Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 del 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 escalado horizontal y vertical bajo demanda.
- Implementación de modelos de Machine Learning como servicios web públicos o privados.
- Supervisión de modelos de aprendizaje automático implementados (por ejemplo, para el rendimiento o el análisis de desfase de datos).
En este artículo se describe cómo crear una canalización de Azure que compila un modelo de Machine Learning e la implementa en Azure Machine Learning.
En este tutorial se usa Azure Machine Learning Python SDK v2 y CLI de Azure extensión ml v2.
Requisitos previos
- Complete el tutorial Crear recursos para comenzar para:
- Cree un área de trabajo.
- Cree un clúster de proceso basado en la nube que se usará para entrenar el modelo.
- Python 3.10 o posterior debe estar instalado para ejecutar scripts del SDK de Azure ML v2 localmente.
- Instale la extensión Azure Machine Learning para Azure Pipelines. Puede instalar esta extensión desde el marketplace de Visual Studio.
Paso 1: Obtener el código
Haga un fork del siguiente repositorio de GitHub:
https://github.com/azure/azureml-examples
Paso 2: Crear un proyecto
Inicie sesión en Azure. Busque y seleccione Azure DevOps organizaciones. Seleccione Ver mis organizaciones. Seleccione la organización que desea usar.
Dentro de la organización seleccionada, cree un proyecto. Si no tiene ningún proyecto en su organización, verá una pantalla Crear un proyecto para empezar . De lo contrario, seleccione el botón Nuevo Project 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 Azure Resource Manager para autenticarse con el portal de Azure.
En Azure DevOps, seleccione Project settings y, a continuación, seleccione Service connections.
Seleccione Crear conexión de servicio, seleccione Azure Resource Manager y seleccione Siguiente.
Use los valores predeterminados para Tipo de identidad y Credencial.
Cree su conexión de servicio. Establezca el nivel de ámbito, la suscripción, el grupo de recursos y el nombre de conexión preferidos.
Paso 4: Creación de una canalización
Vaya a Canalizaciones y seleccione Crear canalización.
Seleccione GitHub como ubicación del código fuente.
Es posible que se le redirija a GitHub para iniciar sesión. Si lo está, escriba sus credenciales de GitHub.
Cuando vea la lista de repositorios, seleccione el repositorio.
Es posible que se le redirija a GitHub para instalar la aplicación Azure Pipelines. Si lo está, seleccione Aprobar e instalar.
Seleccione Canalización inicial. Usted actualiza la plantilla de canalización inicial.
Paso 5: Creación de una canalización 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:
- Utiliza la tarea de la versión de Python para establecer Python 3.10 e instalar los requisitos del SDK.
- Use la tarea de Bash para ejecutar scripts de Bash para el SDK y la CLI de Azure Machine Learning.
- Use la tarea CLI de Azure para enviar un trabajo de Azure Machine Learning.
Seleccione una de las pestañas siguientes, en función de si usa una conexión de servicio Azure Resource Manager o una conexión de servicio genérica. En el YAML de la canalización, reemplace los valores de las variables por los valores correspondientes a sus 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.10
inputs:
versionSpec: '>=3.10'
- 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, agregó una tarea 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.
Importante
Ambos mecanismos de espera de este paso (la tarea AzureMLJobWaitTask@1 en la pestaña Azure Resource Manager y el registro de webhook de InvokeRESTAPI@1 en la pestaña Genérico) dependen de que Azure Machine Learning envíe una notificación RunTerminated a Azure DevOps cuando el trabajo haya terminado. Esta ruta de acceso de notificación se está investigando actualmente y es posible que no se complete según lo previsto, lo que podría causar que el trabajo del servidor WaitFor* agote el tiempo de espera, en lugar de reflejar el estado del trabajo de Azure Machine Learning. Si encuentra este comportamiento, sondee el estado del trabajo de un agente mediante az ml job show --query status hasta que se devuelva un estado final (Completed, Failed o Canceled) y salga de la tarea con un estado coincidente.
Si usa una conexión de servicio Resource Manager, puede usar la extensión Machine Learning. Puede buscar esta extensión en las extensiones Azure DevOps Marketplace o ir directamente a la página extension. Instale la extensión Machine Learning.
Importante
No instale la extensión Machine Learning (clásico). Es una extensión anterior que no proporciona la misma funcionalidad.
En la ventana de revisión de la tubería, agregue una tarea del servidor. En la parte de pasos del trabajo, seleccione Mostrar asistente y busque AzureML. Seleccione la tarea Espera de trabajo de AzureML y proporcione la información del trabajo.
La tarea tiene cuatro entradas: Service Connection, Azure Resource Group Name, AzureML Workspace Name y AzureML Job Name. Proporcione 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 caros del grupo de agentes y no exige 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 del servidor. - Una tarea de espera de trabajo de Azure Machine Learning solo puede esperar por un trabajo. Debe configurar una tarea separada para cada trabajo por el que desee esperar.
- La tarea de espera de trabajo de Azure Machine Learning puede esperar dos días como máximo. Este límite es un límite estricto establecido por las canalizaciones de Azure DevOps.
- job: WaitForAzureMLJobCompletion
displayName: Wait for AzureML Job Completion
pool: server
timeoutInMinutes: 0
dependsOn: SubmitAzureMLJob
variables:
# Save the name of the azureMl job submitted in the previous step to a variable. It will be used as an input 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 verificación de la ejecución de canalización
Seleccione Guardar y ejecutar. Cuando el mecanismo de espera del paso 6 funciona según lo diseñado, la canalización espera a que se complete el trabajo de Azure Machine Learning y finalice la tarea en WaitForJobCompletion con el mismo estado que el trabajo de Azure Machine Learning. Por ejemplo:
Trabajo
Succeededde Azure Machine Learning == Tarea de Azure DevOps en el trabajoWaitForJobCompletionSucceededTrabajo
Failedde Azure Machine Learning == Tarea de Azure DevOps en el trabajoWaitForJobCompletionFailedTrabajo
Cancelledde Azure Machine Learning == Tarea de Azure DevOps en el trabajoWaitForJobCompletionCancelled
Nota
Debido al problema que se indica en el paso 6, el trabajo de WaitFor* podría agotar el tiempo de espera en lugar de reflejar el estado del trabajo de Azure Machine Learning. Utiliza Azure Machine Learning Studio para confirmar el resultado real del trabajo hasta que se restaure la ruta de notificación.
Sugerencia
Puede ver el trabajo de Azure Machine Learning completo en Estudio de Azure Machine Learning.
Limpieza de recursos
Si no tiene previsto seguir usando la canalización, elimine el proyecto de Azure DevOps. En el portal de Azure, elimine el grupo de recursos y la instancia de Azure Machine Learning.