Tutorial: Desarrollo de modelos en una estación de trabajo en la nube

Aprenda a desarrollar un script de entrenamiento con un cuaderno en una estación de trabajo en la nube de Azure Machine Learning. En este tutorial se describen los conceptos básicos que necesita para empezar a trabajar:

  • Configure la estación de trabajo en la nube. La estación de trabajo en la nube cuenta con tecnología de una instancia de proceso de Azure Machine Learning, que está preconfigurada con entornos que podrá usar para satisfacer las distintas necesidades del proceso de desarrollo de modelos.
  • Use entornos de desarrollo basados en la nube.
  • Use MLflow para realizar un seguimiento de las métricas del modelo, todo desde un solo cuaderno.

Requisitos previos

Para usar Azure Machine Learning, primero necesitará un área de trabajo. Si no tiene una, complete Creación de los recursos necesarios para empezar a trabajar, para crear un área de trabajo y obtener más información sobre su uso.

Inicio con cuadernos

La sección Cuadernos del área de trabajo es un buen lugar para obtener información sobre Azure Machine Learning y sus funcionalidades. Aquí puede conectarse a los recursos del proceso, trabajar con un terminal y editar y ejecutar cuadernos y scripts de Jupyter Notebook.

  1. Inicie sesión en Azure Machine Learning Studio.

  2. Seleccione el área de trabajo si aún no está abierta.

  3. En el panel de navegación izquierdo, seleccione Cuadernos.

  4. Si no tiene una instancia de proceso, verá la opción Crear proceso en medio de la pantalla. Seleccione Crear proceso y rellene el formulario. Puede usar todos los valores predeterminados. (Si ya tiene una instancia de proceso, en su lugar verá Terminal en ese lugar. Tenga en cuenta que usará la opción Terminal más adelante en este tutorial).

    Screenshot shows how to create a compute instance.

Configuración de un nuevo entorno para la creación de prototipos (opcional)

Para que el script se ejecute, debe trabajar en un entorno configurado con las dependencias y bibliotecas que espera el código. En esta sección encontrará información para crear un entorno adaptado al código. Para crear el nuevo kernel de Jupyter al que se conecta el cuaderno, tendrá que usar un archivo YAML que defina las dependencias.

  • Cargar un archivo.

    Los archivos que cargue se almacenarán en un recurso compartido de archivos de Azure, y estos archivos se montarán en cada instancia de proceso y se compartirán en el área de trabajo.

    1. Descargue este archivo del entorno Conda, workstation_env.yml, a su equipo con el botón Descargar archivo sin formato en la parte superior derecha.
    1. Seleccione Agregar archivos y, después, Cargar archivos para cargarlos en el área de trabajo.

      Screenshot shows how to upload files to your workspace.

    2. Haga clic en Examinar y seleccione los archivos.

    3. Seleccione el archivo workstation_env.yml que descargó.

    4. Seleccione Cargar.

    Verá el archivo workstation_env.yml en la carpeta del nombre de usuario que está en la pestaña Archivos. Seleccione el archivo para obtener una vista previa y consulte las dependencias que especifica. El contenido aparece de esta forma:

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • Cree un kernel.

    A continuación, use el terminal de Azure Machine Learning para crear un nuevo kernel de Jupyter, basado en el archivo workstation_env.yml.

    1. Seleccione Terminal para abrir una ventana de terminal. También puede abrir el terminal desde la barra de comandos izquierda:

      Screenshot shows open terminal tool in notebook toolbar.

    2. Si la instancia de proceso se detiene, seleccione Iniciar proceso y espere hasta que se ejecute.

      Screenshot shows how to start compute if it's stopped.

    3. Una vez que el proceso se está ejecutando, verá un mensaje de bienvenida en el terminal y puede empezar a escribir comandos.

    4. Consulte los entornos de Conda actuales. El entorno activo se marca con un *.

      conda env list
      
    5. Si ha creado una subcarpeta para este tutorial, cd a esa carpeta.

    6. Cree el entorno en función del archivo Conda proporcionado. Recuerde que este entorno tarda unos minutos en crearse.

      conda env create -f workstation_env.yml
      
      
    7. Active el nuevo entorno.

       conda activate workstation_env
      
    8. Compruebe que el entorno correcto está activo; para ello, busque el entorno marcado con *.

      conda env list
      
    9. Cree un nuevo kernel de Jupyter basado en el entorno activo.

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. Cierre ventana de terminal.

Ya tiene un nuevo kernel. A continuación, abra un cuaderno y use este kernel.

Creación de un cuaderno

  1. Seleccione Agregar archivos y elija Crear nuevo archivo.

    Screenshot: Create new file.

  2. Asigne un nombre al nuevo cuaderno develop-tutorial.ipynb (o escriba el nombre que quiera).

  3. Si la instancia de proceso se detiene, seleccione Iniciar proceso y espere hasta que se ejecute.

    Screenshot shows how to start compute if it's stopped.

  4. Verá que el cuaderno está conectado al kernel predeterminado en la parte superior derecha. Cambie para usar el kernel Tutorial Workstation Env si ha creado el kernel.

Desarrollo de un script de entrenamiento

En esta sección, desarrollará un script de entrenamiento de Python capaz de predecir pagos predeterminados de la tarjeta de crédito mediante los conjuntos de datos de prueba y entrenamiento preparados del conjunto de datos de UCI.

Este código usa sklearn para el entrenamiento y MLflow para registrar las métricas.

  1. Comience con el código que importa los paquetes y las bibliotecas que usará en el script de entrenamiento.

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. A continuación, cargue y procese los datos de este experimento. En este tutorial, tendrá que leer los datos de un archivo en Internet.

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. Prepare los datos para el entrenamiento:

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. Agregue código para iniciar el registro automático con MLflow, de modo que pueda realizar un seguimiento de las métricas y los resultados. Gracias a la naturaleza iterativa del desarrollo de modelos, MLflow le permite registrar los parámetros y los resultados del modelo. Consulte esas ejecuciones para comparar y comprender cómo funciona el modelo. Los registros también proporcionan contexto que podrá usar cuando esté listo para pasar de la fase de desarrollo a la fase de entrenamiento de los flujos de trabajo en la instancia de Azure Machine Learning.

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. Entrene un modelo.

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

    Nota:

    Puede ignorar las advertencias de mlflow. Seguirá obteniendo todos los resultados de los que necesite un seguimiento.

Iteración

Ahora que tiene los resultados del modelo, es posible que quiera cambiar algo e intentarlo de nuevo. Por ejemplo, tal vez quiera probar una técnica de clasificador diferente:

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

Nota:

Puede ignorar las advertencias de mlflow. Seguirá obteniendo todos los resultados de los que necesite un seguimiento.

Examen de los resultados

Ahora que ha probado dos modelos diferentes, use los resultados cuyo seguimiento realiza MLFfow para decidir qué modelo es mejor. Puede consultar métricas como la precisión u otros indicadores importantes para sus escenarios. Puede profundizar en estos resultados con más detalle si examina los trabajos que creó MLflow.

  1. En el panel de navegación izquierdo, seleccione Trabajos.

    Screenshot shows how to select Jobs in the navigation.

  2. Seleccione el vínculo del tutorial Desarrollo en la nube.

  3. Se muestran dos trabajos diferentes, uno para cada uno de los modelos que haya probado. Estos nombres se generan automáticamente. Cuando mantenga el puntero sobre un nombre, use la herramienta de lápiz que aparece junto al nombre si quiere cambiarlo.

  4. Seleccione el vínculo del primer trabajo. El nombre aparece en la parte superior. También puede cambiar el nombre aquí, con la herramienta del lápiz.

  5. En la página se muestran detalles del trabajo, como propiedades, salidas, etiquetas y parámetros. En Etiquetas, verá el elemento estimator_name, que describe el tipo de modelo.

  6. Seleccione la pestaña Métricas para ver las métricas que registró MLflow. (Puede esperar que los resultados sean diferentes, ya que tiene un conjunto de entrenamiento diferente).

    Screenshot shows metrics for a job.

  7. Seleccione la pestaña Imágenes para ver las imágenes que generó MLflow.

    Screenshot shows images for a job.

  8. Vuelva y revise las métricas e imágenes del otro modelo.

Creación de un script de Python

A continuación, cree un script de Python desde el cuaderno para el entrenamiento del modelo.

  1. En la barra de herramientas del cuaderno, seleccione el menú.

  2. Seleccione Exportar como> Python.

    Screenshot shows exporting a Python file from the notebook.

  3. Asigne al archivo el nombre train.py.

  4. Examine este archivo y elimine el código que no quiera tener en el script de entrenamiento. Por ejemplo, mantenga el código del modelo que quiera usar y elimine el código del modelo que no quiera.

    • Asegúrese de mantener el código que inicia el registro automático (mlflow.sklearn.autolog()).
    • Es posible que quiera eliminar los comentarios generados automáticamente y agregar más comentarios propios.
    • Al ejecutar el script de Python de forma interactiva (en un terminal o cuaderno), puede mantener la línea que define el nombre del experimento (mlflow.set_experiment("Develop on cloud tutorial")). O bien, puede asignarle un nombre diferente para verlo como una entrada diferente en la sección Trabajos. Aún así, al preparar el script de un trabajo de entrenamiento, esa línea no funcionará y se debe omitir: la definición del trabajo incluye el nombre del experimento.
    • Al entrenar un único modelo, las líneas para iniciar y finalizar una ejecución (mlflow.start_run() y mlflow.end_run()) tampoco son necesarias (ya que no tendrán ningún efecto), pero se pueden dejar tal cual, si quiere.
  5. Cuando haya terminado con las modificaciones, guarde el archivo.

Ya tiene un script de Python que podrá usar para entrenar el modelo que prefiera.

Ejecute el script de Python.

Por ahora, ejecutará este código en la instancia de proceso, que es el entorno de desarrollo de Azure Machine Learning. En el Tutorial: Entrenamiento de un modelo se muestra cómo ejecutar un script de entrenamiento de forma más escalable en recursos de proceso más eficaces.

  1. En la parte izquierda, seleccione Abrir terminal para abrir una ventana de terminal.

    Screenshot shows how to open a terminal window.

  2. Consulte los entornos de Conda actuales. El entorno activo se marca con un *.

    conda env list
    
  3. Si ha creado un kernel, actívelo ahora:

    conda activate workstation_env
    
  4. Si ha creado una subcarpeta para este tutorial, cd a esa carpeta.

  5. Ejecute el script de entrenamiento.

    python train.py
    

Nota:

Puede ignorar las advertencias de mlflow. Seguirá recibiendo todas las métricas e imágenes del registro automático.

Examen de los resultados del script

Vuelva a la opción Trabajos para ver los resultados del script de entrenamiento. Tenga en cuenta que los datos de entrenamiento cambian con cada división, por lo que los resultados también serán diferentes entre ejecuciones.

Limpieza de recursos

Si quiere continuar con otros tutoriales, ve a Pasos siguientes.

Detención de una instancia de proceso

Si no va a utilizar ahora la instancia de proceso, deténgala:

  1. En el estudio, en el área de navegación de la izquierda, seleccione Proceso.
  2. En las pestañas superiores, seleccione Instancia de proceso.
  3. Seleccione la instancia de proceso en la lista.
  4. En la barra de herramientas superior, seleccione Detener.

Eliminación de todos los recursos

Importante

Los recursos que creó pueden usarse como requisitos previos para otros tutoriales y artículos de procedimientos de Azure Machine Learning.

Si no va a usar ninguno de los recursos que ha creado, elimínelos para no incurrir en cargos:

  1. En Azure Portal, seleccione Grupos de recursos a la izquierda del todo.

  2. En la lista, seleccione el grupo de recursos que creó.

  3. Seleccione Eliminar grupo de recursos.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Escriba el nombre del grupo de recursos. A continuación, seleccione Eliminar.

Pasos siguientes

Más información sobre:

En este tutorial se han mostrado los primeros pasos para crear un modelo y crear prototipos en la misma máquina donde reside el código. En el caso del entrenamiento de producción, puede aprender a usar ese script de entrenamiento en recursos de proceso remotos más eficaces: