Share via


Entrenamiento de modelos con el SDK de Azure Machine Learning para Python (v1)

SE APLICA A:Azure ML del SDK de Python v1

Aprenda a asociar recursos de proceso de Azure al área de trabajo de Azure Machine Learning con el SDK v1. A continuación, puede usar estos recursos como destinos de proceso de entrenamiento e inferencia en las tareas de aprendizaje automático.

En este artículo, aprenderá a configurar el área de trabajo para usar estos recursos de proceso:

  • Equipo local
  • Máquinas virtuales remotas
  • Grupos de Apache Spark (con tecnología de Azure Synapse Analytics)
  • HDInsight de Azure
  • Azure Batch
  • Azure Databricks: se usa como destino de proceso de entrenamiento solo en canalizaciones de aprendizaje automático
  • Análisis con Azure Data Lake
  • Azure Container Instances
  • Kubernetes en Azure Machine Learning

Para usar destinos de proceso administrados por Azure Machine Learning, consulte:

Importante

Los elementos en este artículo marcados como "versión preliminar" se encuentran actualmente en una versión preliminar pública. Se ofrece la versión preliminar sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Requisitos previos

Limitaciones

  • No cree varios datos adjuntos simultáneos en el mismo proceso desde su área de trabajo. Por ejemplo, adjuntar un clúster de Azure Kubernetes Service a un área de trabajo con dos nombres diferentes. Cada adjunto nuevo interrumpirá los adjuntos anteriores existentes.

    Si quiere volver a asociar un destino de proceso, por ejemplo, para cambiar la configuración de TLS u otra configuración del clúster, primero debe eliminar los datos adjuntos existentes.

¿Qué es un destino de proceso?

Con Azure Machine Learning, puede entrenar el modelo en una variedad de recursos o entornos, denominados colectivamente destinos de proceso. Un destino de proceso puede ser una máquina local o un recurso de nube, como una instancia de proceso de Azure Machine Learning, Azure HDInsight o una máquina virtual remota. También puede crear destinos de proceso para la implementación de modelos, como se describe en "Cómo y dónde implementar los modelos".

Equipo local

Cuando se usa el equipo local para el entrenamiento, no es necesario crear un destino de proceso. Simplemente envíe la ejecución de entrenamiento desde la máquina local.

Cuando se usa el equipo local para la inferencia, debe tener instalado Docker. Para realizar la implementación, utilice LocalWebservice.deploy_configuration() para definir el puerto que utilizará el servicio web. A continuación, use el proceso de implementación normal como se describe en Implementación de modelos con Azure Machine Learning.

Máquinas virtuales remotas

Azure Machine Learning también admite la asociación de una máquina virtual de Azure. La máquina virtual debe ser una instancia de Data Science Virtual Machine (DSVM) de Azure. La máquina virtual ofrece una selección de herramientas y plataformas mantenidas para el desarrollo del aprendizaje automático a lo largo de todo el ciclo de vida. Para obtener más información sobre cómo usar la DSVM con Azure Machine Learning, consulte Configuración del entorno de desarrollo.

Sugerencia

En lugar de una máquina virtual remota, se recomienda usar la instancia de proceso de Azure Machine Learning. Es una solución de proceso basada en la nube totalmente administrada que es específica de Azure Machine Learning. Para más información, consulte creación y administración de una instancia de proceso de Azure Machine Learning.

  1. Crear: Azure Machine Learning no puede crear una máquina virtual remota. En su lugar, debe crear la máquina virtual y, luego, asociarlo al área de trabajo de Azure Machine Learning. Para saber cómo crear un DSVM, consulte Aprovisionamiento de Data Science Virtual Machine para Linux (Ubuntu).

    Advertencia

    Azure Machine Learning solo admite máquinas virtuales que ejecuten Ubuntu. Al crear una máquina virtual o elegir una máquina virtual existente, debe seleccionar una máquina virtual que use Ubuntu.

    Azure Machine Learning también requiere que la máquina virtual tenga una dirección IP pública.

  2. Adjuntar: para asociar una máquina virtual existente como destino de proceso, debe proporcionar el identificador de recurso, el nombre de usuario y la contraseña de la máquina virtual. El identificador de recurso de la máquina virtual se puede construir con el identificador de la suscripción, el nombre del grupo de recursos y el nombre de la máquina virtual con el siguiente formato de cadena: /subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Compute/virtualMachines/<vm_name>.

    from azureml.core.compute import RemoteCompute, ComputeTarget
    
    # Create the compute config 
    compute_target_name = "attach-dsvm"
    
    attach_config = RemoteCompute.attach_configuration(resource_id='<resource_id>',
                                                    ssh_port=22,
                                                    username='<username>',
                                                    password="<password>")
    
    # Attach the compute
    compute = ComputeTarget.attach(ws, compute_target_name, attach_config)
    
    compute.wait_for_completion(show_output=True)
    

    O bien puede asociar la instancia de DSVM al área de trabajo mediante Azure Machine Learning Studio.

    Advertencia

    No cree varios datos adjuntos simultáneos en el mismo DSVM desde su área de trabajo. Cada adjunto nuevo interrumpirá los adjuntos anteriores existentes.

  3. Configurar: Cree una configuración de ejecución para el destino de proceso de Data Science Virtual Machine. Docker y Conda se utilizan para crear y configurar el entorno de entrenamiento en la DSVM.

    from azureml.core import ScriptRunConfig
    from azureml.core.environment import Environment
    from azureml.core.conda_dependencies import CondaDependencies
    
    # Create environment
    myenv = Environment(name="myenv")
    
    # Specify the conda dependencies
    myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])
    
    # If no base image is explicitly specified the default CPU image "azureml.core.runconfig.DEFAULT_CPU_IMAGE" will be used
    # To use GPU in DSVM, you should specify the default GPU base Docker image or another GPU-enabled image:
    # myenv.docker.enabled = True
    # myenv.docker.base_image = azureml.core.runconfig.DEFAULT_GPU_IMAGE
    
    # Configure the run configuration with the Linux DSVM as the compute target and the environment defined above
    src = ScriptRunConfig(source_directory=".", script="train.py", compute_target=compute, environment=myenv) 
    

Sugerencia

Si desea quitar (desasociar) una máquina virtual del área de trabajo, use el método RemoteCompute.detach ().

Azure Machine Learning no eliminará la máquina virtual. Debe eliminar manualmente la máquina virtual mediante el Azure Portal, la CLI o el SDK para la máquina virtual de Azure.

Grupos de Apache Spark

La integración de Azure Synapse Analytics en Azure Machine Learning (versión preliminar) le permite conectar un grupo de Apache Spark respaldado por Azure Synapse para la exploración y preparación interactivas de datos. Con esta integración, puede contar con una instancia de proceso dedicada para la limpieza y transformación de datos a gran escala. Para más información, vea Conexión de grupos de Apache Spark con tecnología de Azure Synapse Analytics.

HDInsight de Azure

Azure HDInsight es una plataforma popular para el análisis de macrodatos. La plataforma proporciona Apache Spark, que se puede usar para entrenar el modelo.

  1. Crear: Azure Machine Learning no puede crear un clúster de HDInsight. En su lugar, debe crear el clúster y, luego, asociarlo al área de trabajo de Azure Machine Learning. Para más información, consulte Crear un clúster de Spark en HDInsight.

    Advertencia

    Azure Machine Learning requiere que el clúster de HDInsight tenga una dirección IP pública.

    Al crear el clúster, debe especificar un nombre de usuario SSH y una contraseña. Anote estos valores, ya que los necesitará al usar HDInsight como destino de proceso.

    Cuando se haya creado el clúster, conéctelo al nombre de host <clustername>-ssh.azurehdinsight.net, donde <clustername> es el nombre que ha proporcionado para el clúster.

  2. Adjuntar: para asociar un clúster de HDInsight como destino de proceso, debe proporcionar el nombre de host, el nombre de usuario y la contraseña del clúster de HDInsight. El identificador de recurso del clúster de HDInsight se puede construir con el identificador de la suscripción, el nombre del grupo de recursos y el nombre del clúster de HDInsight con el siguiente formato de cadena: /subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.HDInsight/clusters/<cluster_name>.

    from azureml.core.compute import ComputeTarget, HDInsightCompute
    from azureml.exceptions import ComputeTargetException
    
    try:
    # if you want to connect using SSH key instead of username/password you can provide parameters private_key_file and private_key_passphrase
    
    attach_config = HDInsightCompute.attach_configuration(resource_id='<resource_id>',
                                                          ssh_port=22, 
                                                          username='<ssh-username>', 
                                                          password='<ssh-pwd>')
    hdi_compute = ComputeTarget.attach(workspace=ws, 
                                       name='myhdi', 
                                       attach_configuration=attach_config)
    
    except ComputeTargetException as e:
    print("Caught = {}".format(e.message))
    
    hdi_compute.wait_for_completion(show_output=True)
    

    O bien puede asociar el clúster de HDInsight al área de trabajo mediante Azure Machine Learning Studio.

    Advertencia

    No cree varios datos adjuntos simultáneos en el mismo HDInsight desde su área de trabajo. Cada adjunto nuevo interrumpirá los adjuntos anteriores existentes.

  3. Configurar: Cree una configuración de ejecución para el destino de proceso de HDI.

    from azureml.core.runconfig import RunConfiguration
    from azureml.core.conda_dependencies import CondaDependencies
    
    
    # use pyspark framework
    run_hdi = RunConfiguration(framework="pyspark")
    
    # Set compute target to the HDI cluster
    run_hdi.target = hdi_compute.name
    
    # specify CondaDependencies object to ask system installing numpy
    cd = CondaDependencies()
    cd.add_conda_package('numpy')
    run_hdi.environment.python.conda_dependencies = cd
    

Sugerencia

Si desea quitar (desasociar) un clúster de HDInsight del área de trabajo, use el método HDInsightCompute.detach().

Azure Machine Learning no elimina el clúster de HDInsight. Debe eliminarlo manualmente mediante el Azure Portal, la CLI o el SDK para Azure HDInsight.

Azure Batch

Azure Batch se usa para ejecutar aplicaciones de informática de alto rendimiento (HPC) en paralelo y a gran escala de manera eficaz en la nube. AzureBatchStep se puede usar en una canalización de Azure Machine Learning para enviar trabajos al grupo de máquinas de Azure Batch.

Para adjuntar Azure Batch como destino de proceso, debe usar el SDK de Azure Machine Learning y proporcionar la siguiente información:

  • Nombre de proceso de Azure Batch: nombre descriptivo que se usará para el proceso en el área de trabajo.
  • Nombre de cuenta de Azure Batch: nombre de la cuenta de Azure Batch.
  • Grupo de recursos: grupo de recursos que contiene la cuenta de Azure Batch.

El código siguiente muestra cómo asociar Azure Batch como destino de proceso:

from azureml.core.compute import ComputeTarget, BatchCompute
from azureml.exceptions import ComputeTargetException

# Name to associate with new compute in workspace
batch_compute_name = 'mybatchcompute'

# Batch account details needed to attach as compute to workspace
batch_account_name = "<batch_account_name>"  # Name of the Batch account
# Name of the resource group which contains this account
batch_resource_group = "<batch_resource_group>"

try:
    # check if the compute is already attached
    batch_compute = BatchCompute(ws, batch_compute_name)
except ComputeTargetException:
    print('Attaching Batch compute...')
    provisioning_config = BatchCompute.attach_configuration(
        resource_group=batch_resource_group, account_name=batch_account_name)
    batch_compute = ComputeTarget.attach(
        ws, batch_compute_name, provisioning_config)
    batch_compute.wait_for_completion()
    print("Provisioning state:{}".format(batch_compute.provisioning_state))
    print("Provisioning errors:{}".format(batch_compute.provisioning_errors))

print("Using Batch compute:{}".format(batch_compute.cluster_resource_id))

Advertencia

No cree varios datos adjuntos simultáneos en la misma instancia de Azure Batch desde su área de trabajo. Cada adjunto nuevo interrumpirá los adjuntos anteriores existentes.

Azure Databricks

Azure Databricks es un entorno basado en Apache Spark de la nube de Azure. Se puede usar como destino de proceso con una canalización de Azure Machine Learning.

Importante

Azure Machine Learning no puede crear un destino de proceso de Azure Databricks. En su lugar, debe crear un área de trabajo de Azure Databricks y, a continuación, adjuntarla al área de trabajo de Azure Machine Learning. Para crear un recurso de área de trabajo, consulte el documento Ejecución de un trabajo de Spark en Azure Databricks.

Para conectar un área de trabajo de Azure Databricks desde una suscripción de Azure diferente, su cuenta de Microsoft Entra debe tener concedido el rol Colaborador en el área de trabajo de Azure Databricks. Compruebe el acceso en Azure Portal.

Para adjuntar Azure Databricks como destino de proceso, proporcione la información siguiente:

  • Nombre del proceso de Databricks: el nombre que desea asignar a este recurso de proceso.
  • Nombre de área de trabajo de Databricks: el nombre del área de trabajo de Azure Databricks.
  • Token de acceso de Databricks: el token de acceso usado para autenticarse en Azure Databricks. Para generar un token de acceso, consulte el documento Autenticación.

El código siguiente muestra cómo asociar Azure Databricks como destino de proceso con el SDK de Azure Machine Learning:

import os
from azureml.core.compute import ComputeTarget, DatabricksCompute
from azureml.exceptions import ComputeTargetException

databricks_compute_name = os.environ.get(
    "AML_DATABRICKS_COMPUTE_NAME", "<databricks_compute_name>")
databricks_workspace_name = os.environ.get(
    "AML_DATABRICKS_WORKSPACE", "<databricks_workspace_name>")
databricks_resource_group = os.environ.get(
    "AML_DATABRICKS_RESOURCE_GROUP", "<databricks_resource_group>")
databricks_access_token = os.environ.get(
    "AML_DATABRICKS_ACCESS_TOKEN", "<databricks_access_token>")

try:
    databricks_compute = ComputeTarget(
        workspace=ws, name=databricks_compute_name)
    print('Compute target already exists')
except ComputeTargetException:
    print('compute not found')
    print('databricks_compute_name {}'.format(databricks_compute_name))
    print('databricks_workspace_name {}'.format(databricks_workspace_name))
    print('databricks_access_token {}'.format(databricks_access_token))

    # Create attach config
    attach_config = DatabricksCompute.attach_configuration(resource_group=databricks_resource_group,
                                                           workspace_name=databricks_workspace_name,
                                                           access_token=databricks_access_token)
    databricks_compute = ComputeTarget.attach(
        ws,
        databricks_compute_name,
        attach_config
    )

    databricks_compute.wait_for_completion(True)

Para consultar un ejemplo más detallado, vea un cuaderno de ejemplo en GitHub.

Advertencia

No cree varios datos adjuntos simultáneos en la misma instancia de Azure Databricks desde su área de trabajo. Cada adjunto nuevo interrumpirá los adjuntos anteriores existentes.

Análisis con Azure Data Lake

Azure Data Lake Analytics es una plataforma de análisis de macrodatos de la nube de Azure. Se puede usar como destino de proceso con una canalización de Azure Machine Learning.

Cree una cuenta de Azure Data Lake Analytics antes de usarlo. Para crear este recurso, consulte la Introducción a Azure Data Lake Analytics documento.

Para asociar Data Lake Analytics como destino de proceso, debe usar el SDK de Azure Machine Learning y proporcionar la siguiente información:

  • Nombre de proceso: el nombre que desea asignar a este recurso de proceso.
  • Grupo de recursos: el grupo de recursos que contiene la cuenta de Data Lake Analytics.
  • Nombre de cuenta: El nombre de la cuenta de Data Lake Analytics.

El código siguiente muestra cómo asociar Data Lake Analytics como destino de proceso:

import os
from azureml.core.compute import ComputeTarget, AdlaCompute
from azureml.exceptions import ComputeTargetException


adla_compute_name = os.environ.get(
    "AML_ADLA_COMPUTE_NAME", "<adla_compute_name>")
adla_resource_group = os.environ.get(
    "AML_ADLA_RESOURCE_GROUP", "<adla_resource_group>")
adla_account_name = os.environ.get(
    "AML_ADLA_ACCOUNT_NAME", "<adla_account_name>")

try:
    adla_compute = ComputeTarget(workspace=ws, name=adla_compute_name)
    print('Compute target already exists')
except ComputeTargetException:
    print('compute not found')
    print('adla_compute_name {}'.format(adla_compute_name))
    print('adla_resource_id {}'.format(adla_resource_group))
    print('adla_account_name {}'.format(adla_account_name))
    # create attach config
    attach_config = AdlaCompute.attach_configuration(resource_group=adla_resource_group,
                                                     account_name=adla_account_name)
    # Attach ADLA
    adla_compute = ComputeTarget.attach(
        ws,
        adla_compute_name,
        attach_config
    )

    adla_compute.wait_for_completion(True)

Para consultar un ejemplo más detallado, vea un cuaderno de ejemplo en GitHub.

Advertencia

No cree varios datos adjuntos simultáneos en el mismo ADLA desde su área de trabajo. Cada adjunto nuevo interrumpirá los adjuntos anteriores existentes.

Sugerencia

Las canalizaciones de Azure Machine Learning solo pueden trabajar con datos almacenados en el almacén de datos predeterminado de la cuenta de Data Lake Analytics. Si los datos con los que necesita trabajar están en un almacén no predeterminado, puede usar DataTransferStep para copiar los datos antes del entrenamiento.

Azure Container Instances

Las instancias de Azure Container Instances (ACI) se crean dinámicamente al implementar un modelo. No se puede crear o adjuntar ACI al área de trabajo de ninguna otra manera. Para más información, consulte Implementación de un modelo en Azure Container Instances.

Kubernetes

Azure Machine Learning le permite asociar sus propios clústeres de Kubernetes para el entrenamiento y la inferencia: Consulte Configuración de clústeres de Kubernetes para Azure Machine Learning.

Para desasociar un clúster de Kubernetes del área de trabajo, use uno el método siguiente:

compute_target.detach()

Advertencia

La desasociación de un clúster no elimina el clúster. Para eliminar un clúster de Azure Kubernetes Service, consulte Uso de la CLI de Azure con AKS. Para eliminar un clúster de Kubernetes habilitado para Azure Arc, vea Inicio rápido de Azure Arc.

Ejemplos de cuadernos

Consulte estos cuadernos para ver ejemplos de entrenamiento con varios destinos de proceso:

Siga las instrucciones del artículo Exploración de Azure Machine Learning con cuadernos de Jupyter para aprender a ejecutar cuadernos.

Pasos siguientes