Uso de Azure Pipelines con Azure Machine Learning

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Puede usar una canalización de Azure DevOps para automatizar el ciclo de vida de aprendizaje automático. Algunas de las operaciones que puede automatizar son:

  • 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 rendimiento o el análisis de desfase de datos)

En este artículo se explica cómo crear una canalización de Azure que compile e implemente un modelo de Machine Learning en Azure Machine Learning.

En este tutorial se usa el SDK de Python v2 de Azure Machine Learning y la extensión de ML v2 de la CLI de Azure.

Requisitos previos

Paso 1: Obtención del código

Bifurque el repositorio siguiente en GitHub:

https://github.com/azure/azureml-examples

Paso 2: Inicio de sesión en Azure Pipelines

Inicie sesión en Azure Pipelines. Una vez que haya iniciado sesión, el explorador accederá a https://dev.azure.com/my-organization-name y aparecerá el panel de Azure DevOps.

En la organización seleccionada, cree un proyecto. Si no tiene ningún proyecto en la organización, aparecerá la pantalla Cree un proyecto para empezar. De lo contrario, seleccione el botón Nuevo proyecto en la esquina superior derecha del panel.

Paso 3: creación de una conexión de servicio

Puede usar una conexión de servicio existente.

Necesita una conexión de Azure Resource Manager para autenticarse con Azure Portal.

  1. En Azure DevOps, seleccione Configuración del proyecto y abra la página Conexiones del servicio.

  2. Elija + Nueva conexión de servicio y seleccione Azure Resource Manager.

  3. Seleccione el método de autenticación predeterminado, Entidad de servicio (automática).

  4. Cree la conexión de servicio. Establezca el nivel de ámbito preferido, la suscripción, el grupo de recursos y el nombre de la conexión.

    Screenshot of ARM service connection.

Paso 4: Creación de una canalización

  1. Vaya a Canalizaciones y seleccione Nueva canalización.

  2. Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.

  3. Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.

  4. Cuando vea la lista de repositorios, seleccione el repositorio.

  5. Es posible que se le redirija a GitHub para instalar la aplicación Azure Pipelines. Si es así, seleccione Aprobar e instalar.

  6. Seleccione Canalización inicial. Actualizará la plantilla de canalización inicial.

Paso 5: compilación de la canalización de YAML para enviar el trabajo de Azure Machine Learning

Elimine la canalización de inicio y reemplácela por el siguiente código YAML. En esta canalización:

  • Usará la tarea versión de Python para configurar Python 3.8 e instalar los requisitos del SDK.
  • Usar la tarea de Bash para ejecutar scripts de Bash para el SDK y la CLI de Azure Machine Learning.
  • Use la tarea de la CLI de Azure para enviar un trabajo de Azure Machine Learning.

Seleccione las pestañas siguientes en función de si usa una conexión de servicio de Azure Resource Manager o una conexión de servicio genérica. En la canalización YAML, reemplace el valor de las variables por los recursos.

name: submit-azure-machine-learning-job

trigger:
- none

variables:
  service-connection: 'machine-learning-connection' # replace with your service connection name
  resource-group: 'machinelearning-rg' # replace with your resource group name
  workspace: 'docs-ws' # replace with your workspace name

jobs:
- job: SubmitAzureMLJob
  displayName: Submit AzureML Job
  timeoutInMinutes: 300
  pool:
    vmImage: ubuntu-latest
  steps:
  - task: UsePythonVersion@0
    displayName: Use Python >=3.8
    inputs:
      versionSpec: '>=3.8'

  - bash: |
      set -ex

      az version
      az extension add -n ml
    displayName: 'Add AzureML Extension'

  - task: AzureCLI@2
    name: submit_azureml_job_task
    displayName: Submit AzureML Job Task
    inputs:
      azureSubscription: $(service-connection)
      workingDirectory: 'cli/jobs/pipelines-with-components/nyc_taxi_data_regression'
      scriptLocation: inlineScript
      scriptType: bash
      inlineScript: |
      
        # submit component job and get the run name
        job_name=$(az ml job create --file single-job-pipeline.yml -g $(resource-group) -w $(workspace) --query name --output tsv)

        # Set output variable for next task
        echo "##vso[task.setvariable variable=JOB_NAME;isOutput=true;]$job_name"

Paso 6: esperar a que se complete el trabajo de Azure Machine Learning

En el paso 5, ha agregado un trabajo para enviar un trabajo de Azure Machine Learning. En este paso, agregará otro trabajo que espera a que se complete el trabajo de Azure Machine Learning.

Si usa una conexión de servicio de Azure Resource Manager, puede usar la extensión "Machine Learning". Puede buscar esta extensión en el Marketplace de extensiones de Azure DevOps o ir directamente a la extensión. Instale la extensión "Machine Learning".

Importante

No instale la extensión Machine Learning (clásico) por error; es una extensión anterior que no proporciona la misma funcionalidad.

En la ventana Revisión de canalización, agregue un trabajo de servidor. En la parte de pasos del trabajo, seleccione Mostrar asistente y busque AzureML. Seleccione la tarea Espera de trabajo de AzureML y rellene la información del trabajo.

La tarea tiene cuatro entradas: Service Connection, Azure Resource Group Name, AzureML Workspace Name y AzureML Job Name. Rellene estas entradas. El código YAML resultante para estos pasos es similar al ejemplo siguiente:

Nota

  • La tarea de espera del trabajo de Azure Machine Learning se ejecuta en un trabajo de servidor, que no usa recursos costosos del grupo de agentes y no requiere cargos adicionales. Los trabajos de servidor (indicados por pool: server) se ejecutan en la misma máquina que la canalización. Para obtener más información, consulte Trabajos de servidor.
  • Una tarea de espera del trabajo de Azure Machine Learning solo puede esperar a un trabajo. Deberá configurar una tarea independiente para cada trabajo en el que quiera esperar.
  • La tarea de espera del trabajo de Azure Machine Learning puede esperar un máximo de 2 días. Se trata de un límite máximo establecido por las canalizaciones de Azure DevOps.
- job: WaitForAzureMLJobCompletion
  displayName: Wait for AzureML Job Completion
  pool: server
  timeoutInMinutes: 0
  dependsOn: SubmitAzureMLJob
  variables: 
    # We are saving the name of azureMl job submitted in previous step to a variable and it will be used as an inut to the AzureML Job Wait task
    azureml_job_name_from_submit_job: $[ dependencies.SubmitAzureMLJob.outputs['submit_azureml_job_task.JOB_NAME'] ] 
  steps:
  - task: AzureMLJobWaitTask@1
    inputs:
      serviceConnection: $(service-connection)
      resourceGroupName: $(resource-group)
      azureMLWorkspaceName: $(workspace)
      azureMLJobName: $(azureml_job_name_from_submit_job)

Paso 7: envío de la canalización y comprobación de la ejecución de la canalización

Seleccione Guardar y ejecutar. La canalización esperará a que se complete el trabajo de Azure Machine Learning y finalizará la tarea en WaitForJobCompletion con el mismo estado que el trabajo de Azure Machine Learning. Por ejemplo: trabajo de Azure Machine Learning Succeeded == tarea de Azure DevOps en el trabajo WaitForJobCompletionSucceeded trabajo de Azure Machine Learning Failed == tarea de Azure DevOps en el trabo WaitForJobCompletionFailed trabajo de Azure Machine Learning Cancelled == tarea de Azure DevOps en el trabajo WaitForJobCompletionCancelled

Sugerencia

Puede ver el trabajo completo de Azure Machine Learning en Estudio de Azure Machine Learning.

Limpieza de recursos

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