Implementación de la extensión Azure Machine Learning en un clúster de Kubernetes habilitado para Azure Kubernetes Service (AKS) o Azure Arc

Para habilitar el clúster de Kubernetes habilitado para Azure Kubernetes Service (AKS) o Azure Arc para ejecutar trabajos de entrenamiento o cargas de trabajo de inferencia, implemente primero la extensión Azure Machine Learning. La extensión de Azure Machine Learning es una extensión de clúster estándar para AKS y una extensión de clúster para Kubernetes habilitado para Azure Arc. Puede administrar su ciclo de vida mediante CLI de Azure k8s-extension.

En este artículo, aprenderá lo siguiente:

  • Requisitos previos
  • Limitaciones
  • Revisión de la configuración de la extensión de Azure Machine Learning
  • Escenarios de implementación de la extensión de Azure Machine Learning
  • Comprobación de la implementación de la extensión de Azure Machine Learning
  • Revisión de los componentes de la extensión de Azure Machine Learning
  • Administración de la extensión Azure Machine Learning

Requisitos previos

  • Un clúster de AKS en ejecución en Azure. Si anteriormente no usaba extensiones de clúster, debe registrar el proveedor de servicios KubernetesConfiguration.
  • O bien, un clúster de Kubernetes habilitado para Azure Arc que está en funcionamiento. Siga las instrucciones que se indican en Conexión de un clúster de Kubernetes existente a Azure Arc.
  • En producción, el clúster de Kubernetes debe tener un mínimo de 4 núcleos vCPU y 14 GB de memoria. Para obtener más información sobre los detalles de los recursos y recomendaciones de tamaño de clúster, vea Planeamiento de recursos recomendado.
  • Un clúster que se ejecuta detrás de un servidor proxy de salida o firewall necesita configuraciones de red adicionales.
  • Instale o actualice la CLI de Azure a la versión 2.51.0 o posterior.
  • Instale o actualice la extensión de la CLI de Azure k8s-extension a la versión 1.2.3 u otra posterior.

Limitaciones

  • Azure Machine Learning no admite el uso de una entidad de servicio con AKS. En su lugar, el clúster de AKS debe usar una identidad administrada. Se pueden usar tanto identidades administradas asignadas por el sistema como identidades administradas asignadas por un usuario. Para obtener más información, consulte Uso de una identidad administrada en Azure Kubernetes Service.
    • Cuando conviertas tu clúster de AKS de usar una entidad de servicio a usar una identidad administrada, tendrás que eliminar y volver a crear todos los grupos de nodos antes de instalar la extensión. No se pueden actualizar directamente los grupos de nodos.
  • Azure Machine Learning no admite deshabilitar las cuentas locales para AKS. Al implementar el clúster de AKS, las cuentas locales están habilitadas de forma predeterminada.
  • Si el clúster de AKS tiene habilitado un intervalo de IP autorizadas para acceder al servidor de API, debe habilitar los intervalos de IP del plano de control de Azure Machine Learning para el clúster de AKS. El plano de control de Azure Machine Learning se implementa en regiones emparejadas. Sin acceso al servidor de API, no se pueden implementar los pods de Machine Learning. Use el intervalo IP para las regiones emparejadas al habilitar los intervalos IP en un clúster de AKS.
  • Azure Machine Learning no admite la asociación de una suscripción entre clústeres de AKS. Si tiene un clúster de AKS en otra suscripción, primero debe conectarlo a Azure Arc y luego asegurarse de que esté especificado en la misma suscripción que su área de trabajo de Azure Machine Learning.
  • Azure Machine Learning no garantiza que todas las características de versión preliminar de AKS vayan a ser compatibles. Por ejemplo, no se admite identidad administrada por pods de Microsoft Entra (en desuso). Use Id. de carga de trabajo de Microsoft Entra en su lugar.
  • Si ha seguido los pasos descritos en el documento Azure Machine Learning AKS v1 para crear o adjuntar AKS como un clúster de inferencia, use el vínculo siguiente para limpiar los recursos heredados relacionados con azureml-fe antes de continuar con el paso siguiente.
  • La extensión Azure Machine Learning no se admite actualmente en arquitecturas ARM64. Use grupos de nodos con la arquitectura de x86_64 (amd64) para la extensión. Un grupo de nodos de AKS no puede combinar SKU de máquinas virtuales amd64 y ARM64, por lo que debes elegir SKU de máquinas virtuales para el grupo de nodos con la arquitectura compatible y no mezclar arquitecturas en el mismo grupo de nodos. Si el clúster tiene grupos de nodos mixtos, use nodeSelector para dirigir la extensión y las cargas de trabajo a los nodos con la arquitectura admitida.

Revisión de las opciones de configuración de la extensión de Azure Machine Learning

Use el comando CLI de Azure az k8s-extension create para implementar la extensión de Azure Machine Learning. El comando az k8s-extension create acepta opciones de configuración como pares key=value separados por espacios mediante el parámetro --config o --config-protected. En la tabla siguiente se enumeran las opciones de configuración disponibles que puede especificar durante la implementación.

Nombre de clave de opción de configuración Descripción Formación Inferencia Entrenamiento e inferencia
enableTraining True o False, predeterminado False. Debe establecerse en True para implementar la extensión Azure Machine Learning con compatibilidad con el entrenamiento de modelos de Machine Learning y la puntuación por lotes. N/D
enableInference True o False, predeterminado False. Debe establecerse en True para la implementación de la extensión Azure Machine Learning con compatibilidad con inferencia de Machine Learning. N/D
allowInsecureConnections True o False, predeterminado False. Puede establecerse en True para usar puntos de conexión HTTP de inferencia con fines de desarrollo o prueba. N/D Opcional Opcional
inferenceRouterServiceType loadBalancer, nodePort, o clusterIP. Obligatorio si enableInference=True. N/D
internalLoadBalancerProvider Esta configuración solo se aplica ahora al clúster de Azure Kubernetes Service (AKS). Se debe establecer en azure para permitir que el enrutador de inferencia use el equilibrador de carga interno. N/D Opcional Opcional
sslSecret Nombre del secreto de Kubernetes en el espacio de nombres azureml. Esta configuración se usa para almacenar cert.pem (certificado TLS/SSL codificado en PEM) y key.pem (clave TLS/SSL codificada en PEM), ambos necesarios para la compatibilidad con puntos de conexión HTTPS de inferencia cuando allowInsecureConnections está establecido en False. Para obtener una definición de YAML de ejemplo de sslSecret, vea Configuración de sslSecret. Use esta configuración o una combinación de los valores de configuración protegidos de sslCertPemFile y sslKeyPemFile. N/D Opcional Opcional
sslCname El punto de conexión HTTPS de inferencia usa un registro CNAME de TLS/SSL. Obligatorio si allowInsecureConnections=False N/D Opcional Opcional
inferenceRouterHA True o False, predeterminado True. De forma predeterminada, la extensión Azure Machine Learning implementa tres réplicas del enrutador de inferencia para conseguir alta disponibilidad, para lo que se necesitan al menos tres nodos de trabajo en un clúster. Establézcalo en False si el clúster tiene menos de tres nodos de trabajo; en este caso solo se implementa un servicio de enrutador de inferencia. N/D Opcional Opcional
nodeSelector Los recursos de Kubernetes implementados y las cargas de trabajo de aprendizaje automático se implementan aleatoriamente en uno o más nodos del clúster de forma predeterminada, y los recursos DaemonSet se implementan en TODOS los nodos. Si quiere restringir la implementación de la extensión y las cargas de trabajo de entrenamiento e inferencia a nodos específicos con las etiquetas key1=value1 y key2=value2, use nodeSelector.key1=value1, nodeSelector.key2=value2 según corresponda. Opcional Opcional Opcional
installNvidiaDevicePlugin True o False, predeterminado False. El complemento de dispositivo NVIDIA es necesario para las cargas de trabajo de ML en hardware GPU de NVIDIA. De forma predeterminada, la implementación de la extensión Azure Machine Learning instalará NVIDIA Device Plugin independientemente de que el clúster de Kubernetes tenga hardware de GPU o no. El usuario puede especificar esta configuración en True, para instalarla, pero asegúrese de cumplir los requisitos previos. Opcional Opcional Opcional
installPromOp True o False, predeterminado True. La extensión Azure Machine Learning necesita el operador prometheus para administrar prometheus. Establezca en False para reutilizar el operador prometheus existente. Para más información sobre la reutilización del operador prometheus existente, consulte Reutilización del operador prometheus. Opcional Opcional Opcional
installVolcano True o False, predeterminado True. La extensión de Azure Machine Learning necesita el programador de Volcano para programar el trabajo. Establézcalo en False para reutilizar el programador de Volcano existente. Para más información sobre cómo reutilizar el programador Volcano existente, consulte Reutilización del programador Volcano Opcional N/D Opcional
installDcgmExporter True o False, predeterminado False. Dcgm-exporter puede exponer métricas de GPU para cargas de trabajo de Azure Machine Learning, que se pueden supervisar en Azure Portal. Establezca installDcgmExporter en True para instalar dcgm-exporter. Pero si quiere utilizar un exportador dcgm-exporter propio, consulte Exportador DCGM. Opcional Opcional Opcional
Nombre de clave de configuración protegida Descripción Formación Inferencia Entrenamiento e inferencia
sslCertPemFile, sslKeyPemFile Ruta al certificado TLS/SSL y al archivo de clave (con codificación PEM), necesaria para la implementación de la extensión Azure Machine Learning con compatibilidad con puntos de conexión HTTPS de inferencia, cuando allowInsecureConnections se establece en False. Nota No se admite el archivo PEM con protección con frase de contraseña. N/D Opcional Opcional

Como puede ver en la tabla de opciones de configuración, las combinaciones de diferentes opciones permiten implementar la extensión Azure Machine Learning para distintos escenarios de carga de trabajo de ML:

  • Para el trabajo de entrenamiento y la carga de trabajo de inferencia por lotes, especifique enableTraining=True.
  • Solo para la carga de trabajo de inferencia, especifique enableInference=True.
  • Para todo tipo de carga de trabajo de ML, especifique enableTraining=True y enableInference=True.

Si tiene previsto implementar la extensión Azure Machine Learning para la carga de trabajo de inferencia en tiempo real y quiere especificar enableInference=True, preste atención a las siguientes opciones de configuración relacionadas con la carga de trabajo de inferencia en tiempo real:

  • El servicio de enrutador azureml-fe es necesario para la compatibilidad con la inferencia en tiempo real y debe especificar la configuración inferenceRouterServiceType para azureml-fe. El router se implementa como el azureml-fe-v2 despliegue de Kubernetes, que aparece en la lista de componentes de extensión. azureml-fe se puede implementar con uno de los siguientes inferenceRouterServiceType:
    • Escriba loadBalancer. Expone azureml-fe externamente mediante el equilibrador de carga de un proveedor de nube. Para especificar este valor, asegúrese de que el clúster admite el aprovisionamiento del equilibrador de carga. Tenga en cuenta que la mayoría de los clústeres de Kubernetes locales podrían no admitir el equilibrador de carga externo.
    • Escriba nodePort. Expone azureml-fe en la dirección IP de cada nodo en un puerto estático. Puede ponerse en contacto con azureml-fe, desde fuera del clúster, solicitando <NodeIP>:<NodePort>. El uso de nodePort también permite configurar una solución de equilibrio de carga y terminación TLS/SSL propia para azureml-fe. Para obtener más información sobre cómo configurar su propia entrada, consulte Integrate otro controlador de entrada con Azure Machine Learning extensión a través de HTTP o HTTPS.
    • Escriba clusterIP. Expone azureml-fe en una dirección IP interna del clúster y hace que azureml-fe sea solo accesible desde dentro del clúster. Para que azureml-fe atienda las solicitudes de inferencia de fuera del clúster, requiere que configure su propia solución de equilibrio de carga y la terminación TLS/SSL para azureml-fe. Para obtener más información sobre cómo configurar su propia entrada, consulte Integrate otro controlador de entrada con Azure Machine Learning extensión a través de HTTP o HTTPS.
  • Para garantizar la alta disponibilidad del servicio de enrutamiento azureml-fe, la implementación de la extensión Azure Machine Learning crea de forma predeterminada tres réplicas de azureml-fe para los clústeres con tres nodos o más. Si el clúster tiene menos de 3 nodos, establezca inferenceRouterHA=False.
  • También debería considerar la posibilidad de usar HTTPS para restringir el acceso a los puntos de conexión del modelo y proteger los datos que envían los clientes. Para ello, necesita especificar el parámetro de configuración sslSecret o la combinación de los parámetros de configuración protegidos sslKeyPemFile y sslCertPemFile.
  • De forma predeterminada, la implementación de la extensión de Azure Machine Learning espera valores de configuración para la compatibilidad con HTTPS. Con fines de desarrollo o prueba, se admite la compatibilidad con HTTP mediante la opción de configuración allowInsecureConnections=True.

Implementación de la extensión Azure Machine Learning: ejemplos de la CLI y Azure Portal

Para implementar la extensión Azure Machine Learning mediante la CLI, use el comando az k8s-extension create y proporcione valores para los parámetros obligatorios.

En la lista siguiente se describen cuatro escenarios típicos de implementación de extensiones. Para implementar la extensión para el uso de producción, lea detenidamente la lista completa de opciones de configuración.

  • Use el clúster de AKS en Azure para obtener una prueba de concepto rápida para ejecutar todo tipo de carga de trabajo de ML, por ejemplo, para ejecutar trabajos de entrenamiento o para implementar modelos como puntos de conexión en línea o por lotes

    Para la implementación de la extensión de Azure Machine Learning en el clúster de AKS, especifique el valor managedClusters para el parámetro --cluster-type. Ejecute el siguiente comando de la CLI de Azure para implementar la extensión de Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=loadBalancer allowInsecureConnections=True inferenceRouterHA=False --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Uso de un clúster de Kubernetes habilitado para Azure Arc fuera de Azure para una prueba de concepto rápida, para ejecutar solo trabajos de entrenamiento

    Para la implementación de la extensión de Azure Machine Learning en un clúster de Kubernetes habilitado para Azure Arc-enabled Kubernetes, especifique el valor connectedClusters para el parámetro --cluster-type. Ejecute el siguiente comando de la CLI de Azure para implementar la extensión de Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Habilite un clúster de AKS en Azure para cargas de trabajo de entrenamiento e inferencia en producción Para la implementación de la extensión de Azure Machine Learning en AKS, especifique el valor managedClusters para el parámetro --cluster-type. Se presupone que el clúster tiene más de tres nodos y que va a usar un equilibrador de carga público de Azure y HTTPS para la compatibilidad con cargas de trabajo de inferencia. Ejecute el siguiente comando de la CLI de Azure para implementar la extensión de Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=loadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Habilitar un clúster de Kubernetes habilitado para Azure Arc en cualquier lugar para cargas de trabajo de entrenamiento e inferencia de producción utilizando GPU NVIDIA

    Para la implementación de la extensión de Azure Machine Learning en un clúster de Kubernetes habilitado para Azure Arc-enabled Kubernetes, especifique el valor connectedClusters para el parámetro --cluster-type. Se presupone que el clúster tiene más de tres nodos y que va a usar un tipo de servicio NodePort y HTTPS para la compatibilidad con las cargas de trabajo de inferencia. Ejecute el siguiente comando de la CLI de Azure para implementar la extensión Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=nodePort sslCname=<ssl cname> installNvidiaDevicePlugin=True installDcgmExporter=True --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    

Comprobación de la implementación de la extensión de Azure Machine Learning

  1. Ejecute el comando de la CLI aplicable para comprobar los detalles de la extensión de Azure Machine Learning:

    AKS

    az k8s-extension show --name <extension-name> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <resource-group>
    

    Kubernetes habilitado para Azure Arc

    az k8s-extension show --name <extension-name> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group>
    
  2. En la respuesta, busque "name" y "provisioningState": "Succeeded". Puede que se muestre "provisioningState": "Pending" durante los primeros minutos.

  3. Si provisioningState aparece como Succeeded, ejecute el siguiente comando en la máquina con el archivo kubeconfig que apunta al clúster para comprobar que todos los pods del espacio de nombres azureml se encuentran en estado Running:

     kubectl get pods -n azureml
    

Revisión del componente de la extensión de Azure Machine Learning

Cuando finalice la implementación de la extensión Azure Machine Learning, use kubectl get deployments -n azureml para ver la lista de recursos creados en el clúster. La lista normalmente consta de un subconjunto de los siguientes recursos, en función de los valores de configuración que especifique.

Nombre del recurso Tipo de recurso Formación Inferencia Entrenamiento e inferencia Descripción Comunicación con la nube
relayserver Implementación de Kubernetes La implementación crea el servidor de retransmisión solo para clústeres de Kubernetes habilitados para Azure Arc, y no en clústeres de AKS. El servidor de retransmisión funciona con Azure Relay para comunicarse con los servicios en la nube. Recepción de la solicitud de creación de trabajo, implementación de modelo desde el servicio en la nube; sincronización del estado del trabajo con el servicio en la nube.
gateway Implementación de Kubernetes La puerta de enlace se utiliza para comunicarse y enviar datos hacia adelante y hacia atrás. Envío de nodos e información de recursos de clúster a los servicios en la nube.
aml-operator Implementación de Kubernetes N/D Administrar el ciclo de vida de los trabajos de entrenamiento. Intercambio de tokens con el servicio de token en la nube para la autenticación y autorización de Azure Container Registry.
metrics-controller-manager Implementación de Kubernetes Administración de la configuración de Prometheus N/D
{EXTENSION-NAME}-kube-state-metrics Implementación de Kubernetes Exporte las métricas relacionadas con el clúster a Prometheus. N/D
{EXTENSION-NAME}-prometheus-operator Implementación de Kubernetes Opcional Opcional Opcional Proporcione la implementación nativa de Kubernetes y la administración de Prometheus y los componentes de supervisión relacionados. N/D
amlarc-identity-controller Implementación de Kubernetes N/D Solicitud y renovación del token de Blob de Azure/Azure Container Registry a través de la identidad administrada. Intercambio de tokens con el servicio de token en la nube para la autenticación y autorización de Azure Container Registry y Blob de Azure que usa la implementación de modelos e inferencias.
amlarc-identity-proxy Implementación de Kubernetes N/D Solicitud y renovación del token de Blob de Azure/Azure Container Registry a través de la identidad administrada. Intercambio de tokens con el servicio de token en la nube para la autenticación y autorización de Azure Container Registry y Blob de Azure que usa la implementación de modelos e inferencias.
azureml-fe-v2 Implementación de Kubernetes N/D Componente de front-end que enruta las solicitudes de inferencia entrantes a los servicios implementados. Envíe los registros de servicio al blob de Azure.
inference-operator-controller-manager Implementación de Kubernetes N/D Administrar el ciclo de vida de los puntos de conexión de inferencia. N/D
volcano-admission Implementación de Kubernetes Opcional N/D Opcional Webhook de admisión de Volcano. N/D
controladores de volcanes Implementación de Kubernetes Opcional N/D Opcional Administración del ciclo de vida de los pods de trabajo de entrenamiento de Azure Machine Learning. N/D
volcano-scheduler Implementación de Kubernetes Opcional N/D Opcional Se utiliza para hacer la programación de trabajos en cluster. N/D
fluent-bit DaemonSet de Kubernetes Recopilación del registro del sistema de los componentes. Carga del registro del sistema de los componentes en la nube.
{EXTENSION-NAME}-dcgm-exporter DaemonSet de Kubernetes Opcional Opcional Opcional dcgm-exporter expone métricas de GPU para Prometheus. N/D
nvidia-device-plugin-daemonset DaemonSet de Kubernetes Opcional Opcional Opcional nvidia-device-plugin-daemonset expone GPU en cada nodo del clúster. N/D
prometheus-prom-prometheus StatefulSet de Kubernetes Recopilación y envío de métricas de trabajo a la nube. Envío de métricas de trabajo, como el uso de CPU, GPU y memoria a la nube.

Importante

  • El recurso Azure Relay está en el mismo grupo de recursos que el recurso de clúster de Arc. Se usa para comunicarse con el clúster de Kubernetes. Al modificarlo, se interrumpen los destinos de proceso asociados.
  • De forma predeterminada, los recursos de Deployment se despliegan aleatoriamente en uno o varios nodos del clúster, y los recursos de DaemonSet se despliegan en todos los nodos. Para restringir la implementación de extensiones a nodos específicos, use la nodeSelector configuración descrita en la tabla de opciones de configuración.

Nota:

  • {EXTENSION-NAME}: es el nombre de la extensión que especifique mediante el comando de la az k8s-extension create --name CLI.

Administración de la extensión Azure Machine Learning

Actualizar, enumerar, mostrar y eliminar una extensión de Azure Machine Learning.

Pasos siguientes