Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Vous pouvez utiliser un pipeline Azure DevOps pour automatiser le cycle de vie du Machine Learning. Certaines des opérations que vous pouvez automatiser sont les suivantes :
- Préparation des données (extraction, transformation, opérations de chargement).
- Entraînement de modèles de machine learning avec mise à l'échelle horizontale et verticale à la demande.
- Déploiement de modèles Machine Learning en tant que services web publics ou privés.
- Surveillance des modèles Machine Learning déployés (par exemple, pour l’analyse des performances ou de la dérive des données).
Cet article explique comment créer un pipeline Azure qui génère un modèle Machine Learning et le déploie sur Azure Machine Learning.
Ce tutoriel utilise Azure Machine Learning Python SDK v2 et Azure CLI extension ML v2.
Conditions préalables
- Terminez le didacticiel Créer des ressources pour commencer afin de :
- Créez un espace de travail.
- Créez un cluster de calcul basé sur le cloud à utiliser pour entraîner votre modèle.
- Python 3.10 ou version ultérieure installée pour exécuter des scripts Azure SDK ML v2 localement.
- Installez l’extension Azure Machine Learning pour Azure Pipelines. Vous pouvez installer cette extension à partir de la place de marché Visual Studio marketplace.
Étape 1 : Obtenir le code
Forkez le dépôt suivant depuis GitHub :
https://github.com/azure/azureml-examples
Étape 2 : Créer un projet
Connectez-vous à Azure. Recherchez et sélectionnez Azure DevOps organisations. Sélectionnez Afficher mes organisations. Sélectionnez l’organisation que vous souhaitez utiliser.
Dans votre organisation sélectionnée, créez un projet. Si vous n’avez pas de projets dans votre organisation, vous voyez l'écran Créer un projet pour démarrer. Sinon, sélectionnez le bouton New Project dans le coin supérieur droit du tableau de bord.
Étape 3 : Créer une connexion de service
Vous pouvez utiliser une connexion de service existante.
Vous avez besoin d’une connexion Azure Resource Manager pour vous authentifier auprès du portail Azure.
Dans Azure DevOps, sélectionnez Project paramètres, puis sélectionnez Services connexions.
Sélectionnez Create service connection, Azure Resource Manager, puis sélectionnez Next.
Utilisez les valeurs par défaut pour le type d’identité et les informations d’identification.
Créez votre connexion de service. Définissez votre niveau d’étendue, votre abonnement, votre groupe de ressources et votre nom de connexion préférés.
Étape 4 : Créer un pipeline
Accédez à Pipelines, puis sélectionnez Créer un pipeline.
Sélectionnez GitHub comme emplacement de votre code source.
Vous pouvez être redirigé vers GitHub pour vous connecter. Si vous le faites, entrez vos informations d’identification GitHub.
Lorsque vous voyez la liste des référentiels, sélectionnez votre référentiel.
Vous pouvez être redirigé vers GitHub pour installer l’application Azure Pipelines. Si vous le faites, sélectionnez Approuver & installer.
Sélectionnez le flux de démarrage. Vous mettez à jour le modèle de pipeline de démarrage.
Étape 5 : Créer un pipeline YAML pour envoyer le travail Azure Machine Learning
Supprimez le pipeline de démarrage et remplacez-le par le code YAML suivant. Dans ce pipeline, vous devez :
- Utilisez la tâche de version Python pour configurer Python 3.10 et installer la configuration requise pour le Kit de développement logiciel (SDK).
- Utilisez la tâche Bash pour exécuter des scripts Bash pour le kit SDK Azure Machine Learning et l’interface CLI.
- Utilisez la tâche Azure CLI pour envoyer un travail de Azure Machine Learning.
Sélectionnez l'un des onglets suivants, selon que vous utilisez une connexion de service Azure Resource Manager ou une connexion de service générique. Dans le pipeline YAML, remplacez les valeurs des variables par des valeurs qui correspondent à vos ressources.
- Utilisant une connexion de service Azure Resource Manager
- Utilisation d’une connexion de service générique
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"
Étape 6 : Attendre la fin du travail Azure Machine Learning
À l'étape 5, vous avez ajouté une tâche pour soumettre un travail Azure Machine Learning. Dans cette étape, vous ajoutez un autre travail qui attend la fin du travail Azure Machine Learning.
Important
Les deux mécanismes d’attente de cette étape (la tâche AzureMLJobWaitTask@1 sous l’onglet Azure Resource Manager et l’inscription de webhook InvokeRESTAPI@1 sous l’onglet Générique) dépendent d'Azure Machine Learning pour l’envoi d’une notification RunTerminated à Azure DevOps à la fin de la tâche. Ce chemin de notification est actuellement en cours d'examen et peut ne pas se terminer comme prévu, provoquant l'expiration de la tâche serveur WaitFor* au lieu de refléter l'état de la tâche Azure Machine Learning. Si vous rencontrez ce comportement, sondez l'état d'un travail d'agent en utilisant az ml job show --query status jusqu'à ce qu'un état terminal (Completed, Failed, ou Canceled) soit retourné, puis terminez la tâche avec un état correspondant.
- Utilisant une connexion de service Azure Resource Manager
- Utilisation d’une connexion de service générique
Si vous utilisez une connexion de service Resource Manager, vous pouvez utiliser l'extension Machine Learning. Vous pouvez rechercher cette extension dans la place de marché Azure DevOps extensions Marketplace ou accéder directement à la page extension. Installez l’extension Machine Learning.
Important
N'installez pas l'extension Machine Learning (classique). Il s’agit d’une extension plus ancienne qui ne fournit pas la même fonctionnalité.
Dans la fenêtre révision du pipeline, ajoutez un travail de serveur. Dans la partie étapes du travail, sélectionnez Afficher l’Assistant, puis recherchez AzureML. Sélectionnez la tâche AzureML Attendre la tâche, puis fournissez les informations relatives à la tâche.
La tâche a quatre entrées : Service Connection, Azure Resource Group Name, AzureML Workspace Name et AzureML Job Name. Fournissez ces entrées. Le YAML obtenu pour ces étapes est similaire à l’exemple suivant :
Note
- La tâche d'attente pour le travail Azure Machine Learning s'exécute sur un serveur dédié, qui n'utilise pas les ressources coûteuses des pools d'agents et ne génère aucun coût supplémentaire. Les travaux serveur (indiqués par
pool: server) s’exécutent sur la même machine que votre pipeline. Pour plus d’informations, consultez Travaux serveur. - Une tâche d’attente de travail Azure Machine Learning ne peut attendre qu’un seul travail. Vous devez configurer une tâche distincte pour chaque tâche dont vous attendez l'achèvement.
- La tâche d’attente de travail Azure Machine Learning peut attendre un maximum de deux jours. Cette limite est une limite difficile définie par Azure DevOps pipelines.
- 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)
Étape 7 : Envoyer le pipeline et vérifier l’exécution de votre pipeline
Sélectionnez Enregistrer et exécuter. Lorsque le mécanisme d’attente de l’étape 6 fonctionne comme conçu, le pipeline attend que la tâche Azure Machine Learning se termine et termine la tâche sous WaitForJobCompletion avec le même état que la tâche Azure Machine Learning. Par exemple :
Azure Machine Learning job
Succeeded== tâche Azure DevOps sousWaitForJobCompletionjobSucceededAzure Machine Learning travail
Failed== travail Azure DevOps dans le cadre deWaitForJobCompletiontravailFailedAzure Machine Learning tâche
Cancelled== tâche Azure DevOps sousWaitForJobCompletiontravailCancelled
Note
En raison du problème indiqué à l’étape 6, le travail WaitFor* peut expirer au lieu de refléter l’état du travail Azure Machine Learning. Utilisez Azure Machine Learning studio pour confirmer le résultat réel du travail jusqu’à ce que le chemin de notification soit restauré.
Astuce
Vous pouvez afficher le travail complet Azure Machine Learning dans Azure Machine Learning studio.
Nettoyer les ressources
Si vous n'envisagez pas de continuer à utiliser votre pipeline, supprimez votre projet Azure DevOps. Dans le portail Azure, supprimez votre groupe de ressources et votre instance de Azure Machine Learning.