Configurer MLOps avec Azure DevOps

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (préversion)

Azure Machine Learning vous permet d’intégrer le pipeline Azure DevOps pour automatiser le cycle de vie du Machine Learning. Certaines des opérations que vous pouvez automatiser sont les suivantes :

  • Déploiement de l’infrastructure Azure Machine Learning
  • Préparation des données (opérations d’extraction, de transformation et de chargement)
  • Formation de modèles Machine Learning avec scale-out et scale-up à 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)

Dans cet article, vous allez découvrir comment utiliser Azure Machine Learning pour configurer un pipeline MLOps de bout en bout qui exécute une régression linéaire pour prédire les tarifs des taxis à New York. Le pipeline est composé de composants, chacun servant des fonctions différentes, qui peuvent être inscrits auprès de l’espace de travail, versionnés et réutilisés avec différentes entrées et sorties. vous allez utiliser l’architecture Azure recommandée pour MLOps et l’accélérateur de solution Azure MLOps (v2) pour configurer rapidement un projet MLOps dans Azure Machine Learning.

Conseil

Nous vous recommandons de comprendre certaines des architectures Azure recommandées pour MLOps avant d’implémenter une solution. Vous devez choisir la meilleure architecture pour votre projet Machine Learning donné.

Prérequis

Notes

Git version 2.27 ou ultérieure est obligatoire. Pour plus d’informations sur l’installation de la commande Git, consultez https://git-scm.com/downloads et sélectionnez votre système d’exploitation

Important

Les commandes CLI de cet article ont été testées à l’aide de Bash. Si vous utilisez un autre interpréteur de commandes, vous pouvez rencontrer des erreurs.

Configurer l’authentification avec Azure et DevOps

Avant de pouvoir configurer un projet MLOps avec Azure Machine Learning, vous devez configurer l’authentification pour Azure DevOps.

Créer un principal du service

Pour l’utilisation de la démonstration, la création d’un ou deux principes de service est requise, selon le nombre d’environnements sur lesquels vous souhaitez travailler (Dev ou Prod ou les deux). Ces principes peuvent être créés à l’aide de l’une des méthodes suivantes :

  1. Lancez Azure Cloud Shell.

    Conseil

    La première fois que vous avez lancé le Cloud Shell, vous êtes invité à créer un compte de stockage pour le Cloud Shell.

  2. Si vous y êtes invité, choisissez Bash comme environnement utilisé dans le Cloud Shell. Vous pouvez également modifier les environnements dans la liste déroulante de la barre de navigation supérieure

    Screenshot of the cloud shell environment dropdown.

  3. Copiez les commandes bash suivantes sur votre ordinateur et mettez à jour les variables projectName, subscriptionId et environment avec les valeurs de votre projet. Si vous créez à la fois un environnement Dev et Prod, vous devez exécuter ce script une fois pour chaque environnement, en créant un principal de service pour chacun d’eux. Cette commande accorde également le rôle Contributeur au principal de service dans l’abonnement fourni. Cela est nécessaire pour qu’Azure DevOps utilise correctement les ressources de cet abonnement.

    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. Copiez vos commandes modifiées dans Azure Shell et exécutez-les (Ctrl + Maj + v).

  5. Après avoir exécuté ces commandes, des informations relatives au principal de service vous sont présentées. Enregistrez ces informations dans un emplacement sûr. Elles seront utilisées plus loin dans la démonstration pour configurer Azure DevOps.

    {
       "appId": "<application id>",
       "displayName": "Azure-ARM-dev-Sample_Project_Name",
       "password": "<password>",
       "tenant": "<tenant id>"
    }
    
  6. Répétez l’étape 3 si vous créez des principaux de service pour les environnements Dev et Prod. Pour cette démonstration, nous allons créer un seul environnement (Prod).

  7. Fermez le Cloud Shell une fois les principaux de service créés.

Configurer Azure DevOps

  1. Accédez à Azure DevOps.

  2. Sélectionnez Créer un projet (Nommez le projet mlopsv2 pour ce tutoriel).

    Screenshot of ADO Project.

  3. Dans le projet sous Paramètres du projet (en bas à gauche de la page du projet), sélectionnez Connexions de service.

  4. Sélectionnez Créer une connexion de service.

    Screenshot of ADO New Service connection button.

  5. Sélectionnez Azure Resource Manager, sélectionnezSuivant, sélectionnezPrincipal de service (manuel), sélectionnez Suivant puis sélectionnezAbonnementau niveau de l’étendue.

    • Nom de l’abonnement : utilisez le nom de l’abonnement dans lequel votre principal de service est stocké.
    • ID d’abonnement : utilisez le subscriptionId que vous avez utilisé à l’étape 1 entrée comme ID d’abonnement
    • ID de principal de service : utilisez la appId sortie de l’étape 1 comme ID de principal de service
    • Clé de principal de service : utilisez la password sortie de l’étape 1 comme clé de principal de service
    • ID de locataire : utilisez la tenant sortie de l’étape 1 comme ID de locataire
  6. Nommez la connexion de service Azure-ARM-Prod.

  7. Sélectionnez Accorder l’autorisation d’accès à tous les pipelines, puis sélectionnez Vérifier et enregistrer.

L’installation d’Azure DevOps est terminée.

Configurer un dépôt source avec Azure DevOps

  1. Ouvrez le projet que vous avez créé dans Azure DevOps

  2. Ouvrez la section Repos et sélectionnez Importer le référentiel

    Screenshot of Azure DevOps import repo first time.

  3. Entrez https://github.com/Azure/mlops-v2-ado-demo dans le champ URL de clone. Sélectionnez Importer au bas de la page.

    Screenshot of Azure DevOps import MLOps demo repo.

  4. Ouvrez les paramètres du projet en bas du volet de navigation gauche

  5. Sous la section Repos, sélectionnez Dépôts. Sélectionnez le dépôt créé à l’étape précédente. Sélectionnez l’onglet Sécurité

  6. Dans la section Autorisations de l’utilisateur, sélectionnez l’utilisateur mlopsv2 Build Service . Modifiez l’autorisation Contribuer par Autoriser et l’autorisation Créer une branche sur Autoriser. Screenshot of Azure DevOps permissions.

  7. Ouvrez la section Pipelines dans le volet de navigation gauche et sélectionnez les 3 points verticaux en regard du bouton Créer des pipelines. Sélectionnez Gérer la sécurité

    Screenshot of Pipeline security.

  8. Sélectionnez le compte mlopsv2 Build Service pour votre projet sous la section Utilisateurs. Modifier le pipeline de build sur Autoriser l’autorisation Modifier le pipeline de build

    Screenshot of Add security.

Remarque

Cette opération termine la section prérequis et le déploiement de l’accélérateur de solution peut se produire en conséquence.

Déploiement de l’infrastructure via Azure DevOps

Cette étape déploie le pipeline d’entraînement dans l’espace de travail Azure Machine Learning créé aux étapes précédentes.

Conseil

Assurez-vous de bien comprendre les modèles architecturaux de l’accélérateur de solution avant d’extraire le référentiel MLOps v2 et de déployer l’infrastructure. Dans des exemples, vous allez utiliser le type de projet ML classique.

Exécuter un pipeline d’infrastructure Azure

  1. Accédez à votre dépôt, mlops-v2-ado-demo, puis sélectionnez le fichier config-infra-prod.yml.

    Important

    Vérifiez que vous avez sélectionné la branche main du dépôt.

    Screenshot of Repo in ADO.

    Ce fichier de configuration utilise les valeurs namespace et postfix des noms des artefacts pour assurer l'unicité. Mettez à jour la section suivante de la configuration à votre convenance.

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

    Notes

    Si vous exécutez une charge de travail Deep Learning telle que CV ou NLP, assurez-vous que votre calcul GPU est disponible dans votre zone de déploiement.

  2. Sélectionnez Commiter et envoyez (push) le code pour transmettre ces valeurs au pipeline.

  3. Accéder à la section Pipelines

    Screenshot of ADO Pipelines.

  4. Sélectionnez Créer un pipeline.

  5. Sélectionnez Azure Repos Git.

    Screenshot of ADO Where's your code.

  6. Sélectionnez le dépôt dans lequel vous avez cloné dans la section précédente mlops-v2-ado-demo

  7. Sélectionnez Fichier YAML Azure Pipelines existant

    Screenshot of Azure DevOps Pipeline page on configure step.

  8. Sélectionnez la branche main et choisissez mlops/devops-pipelines/cli-ado-deploy-infra.yml, puis sélectionnez Continuer.

  9. Exécutez le pipeline ; il faudra quelques minutes pour se terminer. Le pipeline doit créer les artefacts suivants :

    • Groupe de ressources pour votre espace de travail, y compris le compte de stockage, Container Registry, Application Insights, Keyvault et l’espace de travail Azure Machine Learning lui-même.
    • Dans l’espace de travail, un cluster de calcul est également créé.
  10. À présent, l’infrastructure de votre projet MLOps est déployée. Screenshot of ADO Infra Pipeline screen.

    Remarque

    Les avertissements Impossible de déplacer et de réutiliser le référentiel existant vers l’emplacement requis peuvent être ignorés.

Exemple de scénario de formation et de déploiement

L’accélérateur de solution comprend du code et des données pour un échantillon de pipeline Machine Learning de bout en bout qui exécute une régression linéaire pour prédire les tarifs des taxis à NYC. Le pipeline est composé de composants, chacun servant des fonctions différentes, qui peuvent être inscrits auprès de l’espace de travail, versionnés et réutilisés avec différentes entrées et sorties. Les échantillons de pipelines et de flux de travail pour les scénarios Vision par ordinateur et NLP auront différentes étapes et étapes de déploiement.

Ce pipeline d’entraînement contient les étapes suivantes :

Préparer les données

  • Ce composant prend plusieurs jeux de données de taxi (jaune et vert) et fusionne/filtre les données, et prépare les jeux de données train/val et d’évaluation.
  • Entrée : Données locales sous ./data/ (plusieurs fichiers .csv)
  • Sortie : jeu de données préparé unique (.csv) et jeux de données train/val/test.

Former le modèle

  • Ce composant entraîne un régresseur linéaire avec le jeu d’entraînement.
  • Entrée : jeu de données d’entraînement
  • Sortie : Modèle entraîné (format pickle)

Évaluer le modèle

  • Ce composant utilise le modèle entraîné pour prédire les tarifs des taxis sur le jeu de test.
  • Entrée : modèle ML et jeu de données de test
  • Sortie : performances du modèle et d’un indicateur de déploiement s’il faut déployer ou non.
  • Ce composant compare les performances du modèle avec tous les modèles déployés précédemment sur le nouveau jeu de données de test et décide s’il faut promouvoir ou non le modèle en production. La promotion du modèle en production s’effectue en inscrivant le modèle dans l’espace de travail AML.

Inscription du modèle

  • Ce composant évalue le modèle en fonction de la précision des prédictions dans le jeu de tests.
  • Entrée : modèle entraîné et indicateur de déploiement.
  • Sortie : modèle inscrit dans Azure Machine Learning.

Déploiement du pipeline d’apprentissage du modèle

  1. Accéder aux pipelines ADO

    Screenshot of ADO Pipelines.

  2. Sélectionnez Nouveau pipeline.

    Screenshot of ADO New Pipeline button.

  3. Sélectionnez Azure Repos Git.

    Screenshot of ADO Where's your code.

  4. Sélectionnez le dépôt dans lequel vous avez cloné dans la section précédente mlopsv2

  5. Sélectionnez Fichier YAML Azure Pipelines existant

    Screenshot of ADO Pipeline page on configure step.

  6. Sélectionnez main en tant que branche, choisissez /mlops/devops-pipelines/deploy-model-training-pipeline.yml, puis sélectionnez Continuer.

  7. Enregistrez et exécutez le pipeline

Notes

À ce stade, l’infrastructure est configurée et la boucle de prototypage de l’architecture MLOps est déployée. vous êtes prêt à passer à notre modèle entraîné en production.

Déploiement du modèle entraîné

Ce scénario inclut des flux de travail prédéfinis pour deux approches de déploiement d’un modèle entraîné, le scoring par lots ou le déploiement d’un modèle sur un point de terminaison pour un scoring en temps réel. Vous pouvez exécuter l’un ou l’autre de ces flux de travail pour tester les performances du modèle dans votre espace de travail Azure ML. Dans cet exemple, nous allons utiliser le scoring en temps réel.

Déployer le point de terminaison de modèle ML

  1. Accéder aux pipelines ADO

    Screenshot of ADO Pipelines.

  2. Sélectionnez Nouveau pipeline.

    Screenshot of ADO New Pipeline button for endpoint.

  3. Sélectionnez Azure Repos Git.

    Screenshot of ADO Where's your code.

  4. Sélectionnez le dépôt dans lequel vous avez cloné dans la section précédente mlopsv2

  5. Sélectionnez Fichier YAML Azure Pipelines existant

    Screenshot of Azure DevOps Pipeline page on configure step.

  6. Sélectionnez main comme branche et choisissez le point de terminaison en ligne managé /mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml, puis sélectionnez Continuer.

  7. Les noms de point de terminaison en ligne devant être uniques, remplacez taxi-online-$(namespace)$(postfix)$(environment) par un autre nom unique, puis sélectionnez Exécuter. Il est inutile de modifier la valeur par défaut si elle n’échoue pas.

    Screenshot of Azure DevOps batch deploy script.

    Important

    Si l’exécution échoue en raison d’un nom de point de terminaison en ligne existant, recréez le pipeline comme décrit précédemment et remplacez [nom de votre point de terminaison] par [nom de votre point de terminaison (nombre aléatoire)]

  8. Une fois l’exécution terminée, vous verrez une sortie similaire à l’image suivante :

    Screenshot of ADO Pipeline batch run result page.

  9. Pour tester ce déploiement, accédez à l’onglet Points de terminaison de votre espace de travail AzureML, sélectionnez le point de terminaison, puis cliquez sur l’onglet Test . Vous pouvez utiliser les échantillons de données d’entrée situées dans le référentiel cloné à /data/taxi-request.json pour tester le point de terminaison.

Nettoyer les ressources

  1. Si vous ne prévoyez pas de continuer à utiliser votre pipeline, supprimez votre projet Azure DevOps.
  2. Dans le Portail Azure, supprimez votre groupe de ressources et votre instance Azure Machine Learning.

Étapes suivantes