Configuración de MLOps con Azure DevOps

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

Azure Machine Learning permite la integración con la canalización de Azure DevOps para automatizar el ciclo de vida del aprendizaje automático. Algunas de las operaciones que puede automatizar son:

  • Implementación de la infraestructura de Azure Machine Learning
  • Preparación de datos (extracción, transformación, operaciones de carga)
  • Entrenamiento de modelos de aprendizaje automático con escalabilidad horizontal y escalabilidad vertical a petición
  • Implementación de modelos de Machine Learning como servicios web públicos o privados
  • Supervisión de modelos de Machine Learning implementados (por ejemplo, para el análisis de rendimiento)

En este artículo, obtendrá información sobre el uso de Azure Machine Learning para configurar una canalización de MLOps de un extremo a otro que ejecuta una regresión lineal para predecir tarifas de taxi en Nueva York. La canalización se compone de componentes, cada uno de los cuales atiende diferentes funciones que se pueden registrar con el área de trabajo, el control de versiones y la reutilización con varias entradas y salidas. Va a usar la arquitectura de Azure recomendada para MLOps y el acelerador de soluciones de Azure MLOps (v2) para configurar rápidamente un proyecto de MLOps en Azure Machine Learning.

Sugerencia

Se recomienda comprender algunas de las arquitecturas de Azure recomendadas para MLOps antes de implementar cualquier solución. Deberá elegir la mejor arquitectura para el proyecto de Machine Learning determinado.

Requisitos previos

Nota

Se requiere la versión 2.27 de Git o posterior. Para obtener más información sobre cómo instalar el comando Git, consulte https://git-scm.com/downloads y seleccione el sistema operativo

Importante

Los comandos de la CLI de este artículo se probaron mediante Bash. Si usa un shell diferente, es posible que encuentre errores.

Configuración de la autenticación con Azure y DevOps

Para poder configurar un proyecto de MLOps con Azure Machine Learning, debe configurar la autenticación para Azure DevOps.

Creación de una entidad de servicio

Para el uso de la demostración, se requiere la creación de uno o dos principios de servicio, en función del número de entornos en los que quiera trabajar (desarrollo o producción, o ambos). Estos principios se pueden crear mediante uno de los métodos siguientes:

  1. Inicie Azure Cloud Shell.

    Sugerencia

    La primera vez que inicie el Cloud Shell, se le pedirá que cree una cuenta de almacenamiento para el mismo.

  2. Si se le solicita, elija Bash como entorno usado en el Cloud Shell. También puede cambiar los entornos de la lista desplegable de la barra de navegación superior

    Screenshot of the cloud shell environment dropdown.

  3. Copie los comandos de Bash siguientes en el equipo y actualice las variables projectName, subscriptionId y environment con los valores del proyecto. Si va a crear un entorno de desarrollo y producción, deberá ejecutar este script una vez para cada entorno, de forma que se crea una entidad de servicio para cada uno. Este comando también concederá el rol Colaborador a la entidad de servicio de la suscripción proporcionada. Esto es necesario para que Azure DevOps use correctamente los recursos de esa suscripción.

    projectName="<your project name>"
    roleName="Contributor"
    subscriptionId="<subscription Id>"
    environment="<Dev|Prod>" #First letter should be capitalized
    servicePrincipalName="Azure-ARM-${environment}-${projectName}"
    # Verify the ID of the active subscription
    echo "Using subscription ID $subscriptionID"
    echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes     /subscriptions/$subscriptionId"
    az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionId
    echo "Please ensure that the information created here is properly save for future use."
    
  4. Copie los comandos editados en Azure Shell y ejecútelos (Ctrl + Mayús + v).

  5. Después de ejecutar estos comandos, se le presentará información relacionada con la entidad de servicio. Guarde esta información en una ubicación segura; se usará más adelante en la demostración para configurar Azure DevOps.

    {
       "appId": "<application id>",
       "displayName": "Azure-ARM-dev-Sample_Project_Name",
       "password": "<password>",
       "tenant": "<tenant id>"
    }
    
  6. Repita el Paso 3 si va a crear entidades de servicio para entornos de desarrollo y producción. Para esta demostración, vamos a crear solo un entorno, el de producción.

  7. Cierre el Cloud Shell una vez creadas las entidades de servicio.

Configurar Azure DevOps

  1. Vaya a Azure DevOps.

  2. Seleccione Crear un nuevo proyecto (asigne un nombre al proyecto mlopsv2 para este tutorial).

    Screenshot of ADO Project.

  3. En el proyecto, en Configuración del proyecto (en la parte inferior izquierda de la página del proyecto), seleccione Conexiones de servicio.

  4. Seleccione Crear conexión de servicio.

    Screenshot of ADO New Service connection button.

  5. Seleccione Azure Resource Manager, seleccione Siguiente, seleccione Entidad de servicio (manual), seleccione Siguiente y seleccione el nivel de ámbito Suscripción.

    • Nombre de la suscripción: use el nombre de la suscripción donde se almacena la entidad de servicio.
    • Identificador de suscripción: Use el subscriptionId que usó en el Paso 1 entrada como id. de suscripción
    • Id. de entidad de servicio: use el appId del Paso 1 salida como id. de entidad de servicio
    • Clave de entidad de servicio: use la password del Paso 1 salida como clave de entidad de servicio
    • Id. de inquilino: Use el tenant del Paso 1. salida como id. de inquilino
  6. Nombre la conexión de servicio como Azure-ARM-Prod.

  7. Seleccione Conceder permiso de acceso a todas las canalizaciones y, a continuación, seleccione Comprobar y guardar.

La configuración de Azure DevOps ha finalizado correctamente.

Configuración del repositorio de origen con Azure DevOps

  1. Abra el proyecto que creó en Azure DevOps

  2. Abra la sección Repos y seleccione Importar repositorio

    Screenshot of Azure DevOps import repo first time.

  3. Escriba https://github.com/Azure/mlops-v2-ado-demo en el campo Dirección URL de clonación. Seleccione la opción de importación en la parte inferior de la página.

    Screenshot of Azure DevOps import MLOps demo repo.

  4. Abra la configuración del proyecto en la parte inferior del panel de navegación izquierdo

  5. En la sección "Repositorios", seleccione Repositorios. Seleccione el repositorio que creó en el paso anterior Seleccione la pestaña Seguridad

  6. En la sección Permisos de usuario, seleccione el usuario mlopsv2 Build Service. Cambie el permiso Contribuir a Permitir y el permiso Crear rama a Permitir. Screenshot of Azure DevOps permissions.

  7. Abra la sección Canalizaciones en el panel de navegación izquierdo y seleccione los 3 puntos verticales situados junto al botón Crear canalizaciones. Vaya a Administrar seguridad

    Screenshot of Pipeline security.

  8. Seleccione la cuenta del servicio de compilación de mlopsv2 para el proyecto en la sección Usuarios. Cambie el permiso Edit build pipeline (Editar canalización de compilación) a Permitir

    Screenshot of Add security.

Nota:

Esto finaliza la sección de requisitos previos y la implementación del acelerador de soluciones puede producirse en consecuencia.

Implementación de la infraestructura mediante Azure DevOps

En este paso se implementa la canalización de entrenamiento en el área de trabajo de Azure Machine Learning creada en los pasos anteriores.

Sugerencia

Asegúrese de comprender los patrones arquitectónicos del acelerador de soluciones antes de desproteger el repositorio de MLOps v2 e implementar la infraestructura. En los ejemplos, usará el tipo de proyecto de ML clásico.

Ejecución de la canalización de infraestructuras de Azure

  1. Vaya al repositorio, mlops-v2-ado-demo, y seleccione el archivo config-infra-prod.yml.

    Importante

    Asegúrese de que ha seleccionado la rama principal del repositorio.

    Screenshot of Repo in ADO.

    Este archivo de configuración usa el espacio de nombres y los valores de postfijos de los nombres de los artefactos para garantizar la exclusividad. Actualice la sección siguiente de la configuración a su gusto.

     namespace: [5 max random new letters]
     postfix: [4 max random new digits]
     location: eastus
    

    Nota:

    Si ejecuta una carga de trabajo de aprendizaje profundo, como CV o NLP, asegúrese de que el proceso de GPU esté disponible en la zona de implementación.

  2. Seleccione "Confirmar" e inserte código para introducir estos valores en la canalización.

  3. Vaya a la sección Canalizaciones

    Screenshot of ADO Pipelines.

  4. Seleccione Crear canalización.

  5. Seleccione Git de Azure Repos.

    Screenshot of ADO Where's your code.

  6. Seleccione el repositorio que ha clonado en la sección anterior mlops-v2-ado-demo

  7. Seleccione Archivo YAML de Azure Pipelines existente

    Screenshot of Azure DevOps Pipeline page on configure step.

  8. Seleccione la rama main y elija mlops/devops-pipelines/cli-ado-deploy-infra.yml; a continuación, seleccione Continuar.

  9. Ejecute la canalización; tardará unos minutos en finalizar. La canalización debe crear los siguientes artefactos:

    • Grupo de recursos para el área de trabajo, incluida la cuenta de almacenamiento, Container Registry, Application Insights, Keyvault y el propio área de trabajo de Azure Machine Learning.
    • En el área de trabajo, también hay un clúster de proceso creado.
  10. Ahora se implementa la infraestructura del proyecto de MLOps. Screenshot of ADO Infra Pipeline screen.

    Nota:

    Es posible que se ignoren las advertencias de no poder mover y reutilizar el repositorio existente a la ubicación requerida.

Escenario de entrenamiento e implementación de ejemplo

El acelerador de soluciones incluye código y datos para una canalización de aprendizaje automático de un extremo a otro de ejemplo que ejecuta una regresión lineal para predecir tarifas de taxi en Nueva York. La canalización se compone de componentes, cada uno de los cuales atiende diferentes funciones que se pueden registrar con el área de trabajo, el control de versiones y la reutilización con varias entradas y salidas. Las canalizaciones y flujos de trabajo de ejemplo para los escenarios de Computer Vision y NLP tendrán diferentes pasos y pasos de implementación.

Esta canalización de entrenamiento contiene los pasos siguientes:

Preparar los datos

  • Este componente toma varios conjuntos de datos de taxi (amarillo y verde) y combina o filtra los datos y prepara los conjuntos de datos de entrenamiento/val y evaluación.
  • Entrada: datos locales en ./data/ (varios archivos de .csv)
  • Salida: conjunto de datos preparado único (.csv) y conjuntos de datos entrenamiento/val/prueba.

Train Model (entrenar modelo)

  • Este componente entrena un regresor lineal con el conjunto de formación.
  • Entrada: datos de entrenamiento
  • Salida: modelo entrenado (formato pickle)

Evaluación de módulo

  • Este componente usa el modelo entrenado para predecir tarifas de taxi en el conjunto de pruebas.
  • Entrada: modelo de ML y conjunto de datos de prueba
  • Salida: rendimiento del modelo y una marca de implementación para implementar o no.
  • Este componente compara el rendimiento del modelo con todos los modelos previamente implementados en el nuevo conjunto de datos de prueba y decide si promover o no el modelo en producción. La promoción del modelo en producción se produce al registrar el modelo en el área de trabajo de AML.

Registro del modelo

  • Este componente puntúa el modelo en función de la precisión de las predicciones en el conjunto de pruebas.
  • Entrada: modelo entrenado y la marca de implementación.
  • Salida: modelo registrado en Azure Machine Learning.

Implementación de la canalización de entrenamiento de modelos

  1. Ir a canalizaciones de ADO

    Screenshot of ADO Pipelines.

  2. Seleccione Nueva canalización.

    Screenshot of ADO New Pipeline button.

  3. Seleccione Git de Azure Repos.

    Screenshot of ADO Where's your code.

  4. Seleccione el repositorio que ha clonado en la sección anterior mlopsv2

  5. Seleccione Archivo YAML de Azure Pipelines existente

    Screenshot of ADO Pipeline page on configure step.

  6. Seleccione main como una rama y elija /mlops/devops-pipelines/deploy-model-training-pipeline.yml; a continuación, seleccione Continuar.

  7. Guarde y ejecute la canalización

Nota:

En este punto, se configura la infraestructura y se despliega el bucle de creación de prototipos de la arquitectura de MLOps. Está listo para pasar a nuestro modelo entrenado a producción.

Implementación del modelo entrenado

Este escenario incluye flujos de trabajo precompilados para dos enfoques para implementar un modelo entrenado, una puntuación por lotes o una implementación de un modelo en un punto de conexión para la puntuación en tiempo real. Puede ejecutar uno o ambos flujos de trabajo para probar el rendimiento del modelo en el área de trabajo de Azure Machine Learning. En este ejemplo, usaremos la puntuación en tiempo real.

Implementación del punto de conexión del modelo de Machine Learning

  1. Ir a canalizaciones de ADO

    Screenshot of ADO Pipelines.

  2. Seleccione Nueva canalización.

    Screenshot of ADO New Pipeline button for endpoint.

  3. Seleccione Git de Azure Repos.

    Screenshot of ADO Where's your code.

  4. Seleccione el repositorio que ha clonado en la sección anterior mlopsv2

  5. Seleccione Archivo YAML de Azure Pipelines existente

    Screenshot of Azure DevOps Pipeline page on configure step.

  6. Seleccione la rama main y elija el punto de conexión en línea administrado /mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml; luego, seleccione Continuar.

  7. Los nombres de punto de conexión en línea deben ser únicos, por lo que debe cambiar taxi-online-$(namespace)$(postfix)$(environment) por otro nombre exclusivo y, luego, seleccionar Ejecutar. No es necesario cambiar el valor predeterminado si no se produce un error.

    Screenshot of Azure DevOps batch deploy script.

    Importante

    Si se produce un error en la ejecución debido a un nombre de punto de conexión en línea existente, vuelva a crear la canalización como se ha descrito anteriormente y cambie [el nombre del punto de conexión] a [el nombre del punto de conexión (número aleatorio)]

  8. Cuando se complete la ejecución, verá una salida similar a la siguiente imagen:

    Screenshot of ADO Pipeline batch run result page.

  9. Para probar esta implementación, vaya a la pestaña Puntos de conexión del área de trabajo de Azure Machine Learning, seleccione el punto de conexión y haga clic en la pestaña Prueba. Puede usar los datos de entrada de ejemplo ubicados en el repositorio clonado en /data/taxi-request.json para probar el punto de conexión.

Limpieza de recursos

  1. Si no va a seguir usando la canalización, elimine el proyecto de Azure DevOps.
  2. En Azure Portal, elimine el grupo de recursos y la instancia de Azure Machine Learning.

Pasos siguientes