Entrenamiento de modelos con la CLI, el SDK y la API de REST de Azure Machine Learning

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

Azure Machine Learning ofrece múltiples formas de enviar trabajos de entrenamiento de ML. En este artículo, aprenderá a enviar trabajos mediante los métodos siguientes:

  • Extensión de la CLI de Azure para aprendizaje automático: la extensión ml, también denominada CLI v2.
  • SDK de Python v2 para Azure Machine Learning.
  • API de REST: la API en la que se basan la CLI y el SDK.

Prerrequisitos

Para usar la información del SDK, instale el Azure Machine Learning SDK v2 para Python.

Clone el repositorio de ejemplos

Los fragmentos de código de este artículo se basan en ejemplos del repositorio de GitHub de ejemplos de Azure ML. Para clonar el repositorio en su entorno de desarrollo, utilice el siguiente comando:

git clone --depth 1 https://github.com/Azure/azureml-examples

Sugerencia

Use --depth 1 para clonar solamente la confirmación más reciente en el repositorio, lo cual reduce el tiempo para completar la operación.

Trabajo de ejemplo

Los ejemplos de este artículo utilizan el conjunto de datos de la flor del iris para entrenar un modelo MLFlow.

Entrenamiento en la nube

Al entrenar en la nube, debe conectarse al área de trabajo de Azure Machine Learning y seleccionar un recurso de proceso que se usará para ejecutar el trabajo de entrenamiento.

1. Conexión al área de trabajo

Sugerencia

Use las pestañas siguientes para seleccionar el método que desea usar para entrenar un modelo. Al seleccionar una pestaña, se cambiarán automáticamente todas las pestañas de este artículo a la misma pestaña. Puede seleccionar otra pestaña en cualquier momento.

Para conectarse al área de trabajo, necesita parámetros de identificador: una suscripción, un grupo de recursos y un nombre de área de trabajo. Usará estos detalles en MLClient del espacio d nombres azure.ai.ml para obtener un identificador para el área de trabajo de Azure Machine Learning necesaria. Para autenticarse, use la autenticación predeterminada de Azure. Consulte este ejemplo para más información sobre cómo configurar las credenciales y conectarse a un área de trabajo.

#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your AzureML workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'

#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

2. Creación de un recurso de proceso para el entrenamiento

Un clúster de proceso de AzureML es un recurso de proceso totalmente administrado que se puede usar para ejecutar el trabajo de entrenamiento. En los ejemplos siguientes, se crea un clúster de proceso denominado cpu-compute.

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

4. Envío del trabajo de entrenamiento

Para ejecutar este script, usará command. El comando se ejecutará mediante su envío como job a Azure ML.

from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url

En los ejemplos anteriores, se configuró:

  • code: ruta de acceso donde se encuentra el código para ejecutar el comando.
  • command: comando que debe ejecutarse.
  • environment - el entorno necesario para ejecutar el script de entrenamiento. En este ejemplo, se usa un entorno mantenido o listo proporcionado por AzureML denominado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Usamos la versión más reciente de este entorno mediante la directiva @latest. También puede usar entornos personalizados especificando una imagen de Docker base y especificando un yaml de conda sobre él.
  • inputs: diccionario de entradas mediante pares de nombre y valor para el comando. La clave es un nombre para la entrada dentro del contexto del trabajo y el valor es el valor de entrada. Se puede hacer referencia a las entradas en command mediante la expresión ${{inputs.<input_name>}}. Para usar archivos o carpetas como entradas, puede usar la clase Input.

Para más información, consulte la documentación de referencia.

Al enviar el trabajo, se devuelve una dirección URL al estado del trabajo en AzureML Studio. Use la interfaz de usuario de Studio para ver el progreso del trabajo. También puede usar returned_job.status para comprobar el estado actual del trabajo.

Registro del modelo entrenado

En los ejemplos siguientes se muestra cómo registrar un modelo en el área de trabajo de AzureML.

Sugerencia

La propiedad name devuelta por el trabajo de entrenamiento se usa como parte de la ruta de acceso al modelo.

from azure.ai.ml.entities import Model
from azure.ai.ml.constants import ModelType

run_model = Model(
    path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
    name="run-model-example",
    description="Model created from run.",
    type=ModelType.MLFLOW
)

ml_client.models.create_or_update(run_model)

Pasos siguientes

Ahora que tiene un modelo entrenado, aprenda a implementarlo mediante un punto de conexión en línea.

Para obtener más ejemplos, consulte el repositorio de GitHub de ejemplos de AzureML.

Para más información sobre los comandos de la CLI de Azure, las clases del SDK de Python o las API de REST que se usan en este artículo, consulte la siguiente documentación de referencia: