Creación de un clúster de proceso de Azure Machine Learning

SE APLICA A:Azure ML del SDK de Python v1

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Aprenda a crear y administrar un clúster de proceso en el área de trabajo de Azure Machine Learning.

Puede usar un clúster de proceso de Azure Machine Learning para distribuir un proceso de entrenamiento o inferencia de lotes en un clúster de nodos de proceso de CPU o GPU en la nube. Para más información sobre los tamaños de máquina virtual que incluyen GPU, consulte Tamaños de máquinas virtuales optimizadas para GPU.

En este artículo, aprenderá a:

  • Creación de un clúster de proceso
  • Reducción del costo del clúster de proceso
  • Configuración de una identidad administrada para el clúster

Requisitos previos

¿Qué es un clúster de proceso?

El clúster de Proceso de Azure Machine Learning es una infraestructura de proceso administrado que permite al usuario crear fácilmente un proceso de uno o varios nodos. El clúster de proceso es un recurso que se puede compartir con otros usuarios del área de trabajo. El proceso se escala verticalmente de forma automática cuando se envía un trabajo y se puede colocar en una instancia de Azure Virtual Network. El clúster de proceso no admite ninguna implementación de IP pública (versión preliminar) también en la red virtual. El proceso se ejecuta en un entorno con contenedores y empaqueta las dependencias del modelo en un contenedor de Docker.

Los clústeres de proceso pueden ejecutar trabajos de manera segura en un entorno de red virtual, sin necesidad de que las empresas abran puertos SSH. El trabajo se ejecuta en un entorno en contenedor y empaqueta las dependencias del modelo en un contenedor de Docker.

Limitaciones

  • Algunos de los escenarios que se enumeran en este documento se marcan como versión preliminar. La funcionalidad de versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no es aconsejable usarla 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.

  • Los clústeres de proceso se pueden crear en una región diferente a la del área de trabajo. Esta funcionalidad está en versión preliminar y solo está disponible para clústeres de proceso, no para instancias de proceso. Esta versión preliminar no está disponible si usa un área de trabajo habilitada para el punto de conexión privado.

    Advertencia

    Al usar un clúster de proceso en una región diferente a la del área de trabajo o los almacenes de datos, es posible que vea un aumento de los costos de transferencia de datos y latencia de red. La latencia y los costos pueden producirse al crear el clúster y al ejecutar trabajos en él.

  • Actualmente solo se admite la creación (y no la actualización) de clústeres a través de plantillas de ARM. Para actualizar el proceso, se recomienda usar por ahora el SDK, la CLI de Azure o la experiencia del usuario.

  • Proceso de Azure Machine Learning tiene límites predeterminados, como el número de núcleos que se pueden asignar. Para más información, consulte Administración y solicitud de cuotas para recursos de Azure.

  • Azure permite colocar bloqueos en los recursos, de modo que no se puedan eliminar o sean de solo lectura. No aplique bloqueos de recursos al grupo de recursos que contiene el área de trabajo. Al aplicar un bloqueo al grupo de recursos que contiene el área de trabajo se evitan las operaciones de escalado de los clústeres de proceso de Azure ML. Para obtener más información sobre el bloqueo de recursos, vea Bloqueo de recursos para impedir cambios inesperados.

Sugerencia

Por lo general, los clústeres pueden escalar verticalmente hasta 100 nodos, siempre y cuando tenga la cuota suficiente para el número de núcleos necesarios. De forma predeterminada, los clústeres se configuran con la comunicación entre nodos del clúster habilitada para, por ejemplo, permitir trabajos de MPI. No obstante, puede escalar los clústeres a miles de nodos simplemente generando una incidencia de soporte técnico y solicitando la inclusión en la lista de permitidos de su suscripción, área de trabajo o un clúster específico para deshabilitar la comunicación entre nodos.

Crear

Tiempo estimado: Aproximadamente 5 minutos.

Se puede reutilizar una instancia de Proceso de Azure Machine Learning entre trabajos. El proceso puede compartirse con otros usuarios del área de trabajo y se conserva entre ejecuciones, escalando o reduciendo automáticamente los nodos verticalmente según el número de ejecuciones enviadas y el valor de max_nodes establecido en el clúster. La configuración min_nodes controla los nodos mínimos disponibles.

Los núcleos dedicados por región por cuota de familia de máquinas virtuales y cuota regional total, que se aplica a la creación de clústeres de proceso, se unifica y comparte con la cuota de instancia de proceso de entrenamiento de Azure Machine Learning.

Importante

Para evitar cargos cuando no se está ejecutando ningún trabajo, establezca los nodos mínimos en 0. Esta configuración permite que Azure Machine Learning anule la asignación de los nodos cuando no están en uso. Cualquier valor mayor que 0 mantendrá ese número de nodos en ejecución, aunque no estén en uso.

El proceso se reduce verticalmente a cero nodos cuando no se utiliza. Se crean máquinas virtuales dedicadas para ejecutar los trabajos según sea necesario.

para crear un recurso de Proceso de Azure Machine Learning persistente en Python, especifique las propiedades vm_size y max_nodes. Azure Machine Learning usará valores predeterminados inteligentes para las demás propiedades.

  • vm_size: la familia máquina virtual de los nodos creados por el Proceso de Azure Machine Learning.
  • max_nodes: el número máximo de nodos hasta los que se aumenta automáticamente cuando ejecuta un trabajo en Proceso de Azure Machine Learning.

SE APLICA A:Azure ML del SDK de Python v1

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # To use a different region for the compute, add a location='<region>' parameter
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                           max_nodes=4)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

Cuando cree una instancia de Proceso de Azure Machine Learning, puede configurar también varias propiedades avanzadas. Estas propiedades permiten crear un clúster persistente de tamaño fijo o dentro de una instancia existente de Azure Virtual Network de su suscripción. Consulte la clase AmlCompute para más información.

Advertencia

Al configurar el parámetro location, si es una región diferente a la del área de trabajo o a la de los almacenes de datos, puede experimentar un aumento en la latencia de red y en los costos de transferencia de datos. La latencia y los costos pueden producirse al crear el clúster y al ejecutar trabajos en él.

Reducción del costo del clúster de proceso

También puede optar por usar VM de prioridad baja para ejecutar algunas cargas de trabajo o todas ellas. Estas máquinas virtuales no tienen una disponibilidad garantizada y se pueden reemplazar mientras están en uso. Tendrá que reiniciar un trabajo que se ha cambiado.

Use cualquiera de estas formas para especificar una VM de prioridad baja:

SE APLICA A:Azure ML del SDK de Python v1

compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                            vm_priority='lowpriority',
                                                            max_nodes=4)

Configuración de la identidad administrada

Los clústeres de proceso de Azure Machine Learning también admiten identidades administradas para autenticar el acceso a los recursos de Azure sin incluir credenciales en el código. Hay dos tipos de identidades administradas:

  • Una identidad administrada asignada por el sistema se habilita directamente en el clúster de proceso de Azure Machine Learning. El ciclo de vida de una identidad asignada por el sistema está vinculado directamente al clúster de proceso. Si se elimina el clúster de proceso, Azure limpia automáticamente las credenciales y la identidad en Azure AD.
  • Una identidad administrada asignada por el usuario es un recurso de Azure independiente que se proporciona a través del servicio de identidad administrada de Azure. Puede asignar una identidad administrada asignada por el usuario a varios recursos y se conserva durante tanto tiempo como necesite. Esta identidad administrada debe crearse de antemano y, a continuación, pasarse como identity_id como parámetro obligatorio.

Nota

El uso de las identidades administradas se admite en los clústeres de proceso, pero no se admite en las instancias de proceso.

SE APLICA A:Azure ML del SDK de Python v1

  • Configure la identidad administrada en la configuración de aprovisionamiento:

    • Identidad administrada asignada por el sistema que se creó en un área de trabajo denominada ws.

      # configure cluster with a system-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="SystemAssigned",
                                                              )
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
    • Identidad administrada asignada por el usuario que se creó en un área de trabajo denominada ws.

      # configure cluster with a user-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="UserAssigned",
                                                              identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
  • Agregue la identidad administrada a un clúster de proceso existente denominado cpu_cluster.

    • Identidad administrada asignada por el sistema:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • Identidad administrada asignada por el usuario:

      # add a user-assigned managed identity
      cpu_cluster.add_identity(identity_type="UserAssigned", 
                                  identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      

Nota

Los clústeres de proceso de Azure Machine Learning solo admiten una identidad asignada por el sistema o varias identidades asignadas por el usuario, no ambas de forma simultánea.

Uso de la identidad administrada

La identidad administrada predeterminada es la identidad administrada asignada por el sistema o la primera identidad administrada asignada por el usuario.

Durante una ejecución, hay dos aplicaciones de una identidad:

  1. El sistema usa una identidad para configurar los montajes de almacenamiento, el registro de contenedor y los almacenes de datos del usuario.

    • En este caso, el sistema usará la identidad administrada predeterminada.
  2. El usuario aplica una identidad para acceder a los recursos desde dentro del código para una ejecución enviada.

    • En este caso, proporcione el elemento client_id correspondiente a la identidad administrada que quiere usar para recuperar una credencial.
    • También puede obtener el id. de cliente de la identidad asignada por el usuario a través de la variable de entorno DEFAULT_IDENTITY_CLIENT_ID.

    Por ejemplo, para recuperar un token para un almacén de datos con la identidad administrada predeterminada:

    client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
    credential = ManagedIdentityCredential(client_id=client_id)
    token = credential.get_token('https://storage.azure.com/')
    

Solución de problemas

Es posible que algunos usuarios que crearon su área de trabajo de Azure Machine Learning en Azure Portal antes de la versión de disponibilidad general no puedan crear la instancia de AmlCompute en esa área de trabajo. Puede generar una solicitud de soporte técnico en el servicio o crear una nueva área de trabajo mediante el portal o el SDK para desbloquearse a sí mismo inmediatamente.

Bloqueado al redimensionar

Si el clúster de proceso de Azure Machine Learning aparece bloqueado al cambiar el tamaño (0-> 0) para el estado del nodo, ello puede deberse a bloqueos de recursos de Azure.

Azure permite colocar bloqueos en los recursos, de modo que no se puedan eliminar o sean de solo lectura. El bloqueo de un recurso puede producir resultados inesperados. Algunas operaciones que no parecen modificar el recurso realmente requieren acciones que ha bloqueado el bloqueo.

Con Azure Machine Learning, al aplicar un bloqueo de eliminación en el grupo de recursos del área de trabajo, se evitarán las operaciones de escalado de los clústeres de proceso de Azure ML. Para solucionar este problema, se recomienda quitar el bloqueo del grupo de recursos y aplicarlo en su lugar a elementos individuales del grupo.

Importante

No aplique el bloqueo a los siguientes recursos:

Nombre del recurso Tipo de recurso
<GUID>-azurebatch-cloudservicenetworksecurityggroup Grupo de seguridad de red
<GUID>-azurebatch-cloudservicepublicip Dirección IP pública
<GUID>-azurebatch-cloudserviceloadbalancer Equilibrador de carga

Estos recursos se usan para comunicarse con el clúster de proceso y hacer operaciones como el escalado. La eliminación del bloqueo de recursos de estos recursos debe permitir el escalado automático para los clústeres de proceso.

Para obtener más información sobre el bloqueo de recursos, vea Bloqueo de recursos para impedir cambios inesperados.

Pasos siguientes

Use el clúster de proceso para: