Partager via


Configurer MLOps avec GitHub

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

Azure Machine Learning vous permet d’intégrer GitHub Actions pour automatiser le cycle de vie de 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

  • Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer. Essayez la version gratuite ou payante de Machine Learning.
  • Un espace de travail Machine Learning.
  • Git en cours d’exécution sur votre ordinateur local.
  • GitHub en tant que référentiel de contrôle de code source

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.

Configurez l'authentification avec Azure et GitHub Actions

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

Créer un principal du service

Créez un principal de service Prod pour cette démonstration. Vous pouvez en ajouter d’autres en fonction du nombre d’environnements sur lesquels vous souhaitez travailler (Dev, Prod ou les deux). Ces principaux de service 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 lancez 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

    Capture d’écran de la liste déroulante de l’environnement cloud Shell.

  3. Copiez les commandes bash suivantes sur votre ordinateur et mettez à jour les variables projectName, subscriptionId et environment avec les valeurs de votre projet. Cette commande accorde également le rôle Contributeur au principal de service dans l’abonnement fourni. Cette information est nécessaire pour que GitHub Actions utilise correctement les ressources de cet abonnement.

    projectName="<your project name>"
    roleName="Contributor"
    subscriptionId="<subscription Id>"
    environment="<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 --json-auth 
    echo "Please ensure that the information created here is properly save for future use."
    

    Notes

    Le paramètre --json-auth de la commande az ad sp create-for-rbac est disponible dans les versions >= 2.51.0 d’Azure CLI. Les versions antérieures à celle-ci utilisent --sdk-auth.

  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 ce guide.

    
      {
      "clientId": "<service principal client id>",  
      "clientSecret": "<service principal client secret>",
      "subscriptionId": "<Azure subscription id>",  
      "tenantId": "<Azure tenant id>",
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
      "resourceManagerEndpointUrl": "https://management.azure.com/", 
      "activeDirectoryGraphResourceId": "https://graph.windows.net/", 
      "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
      "galleryEndpointUrl": "https://gallery.azure.com/",
      "managementEndpointUrl": "https://management.core.windows.net/" 
      }
    
  6. Copiez l’ensemble de cette sortie, accolades incluses. Enregistrez ces informations dans un emplacement sûr. Elles seront utilisées plus loin dans ce guide.

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

Configurez le référentiel GitHub

  1. Dupliquer (fork) le référentiel de modèles de démonstration MLOps v2 dans votre organisation GitHub

  2. Accédez à https://github.com/Azure/mlops-v2-gha-demo/fork pour dupliquer (fork) le référentiel de démonstration MLOps v2 dans votre organisation GitHub. Ce référentiel contient du code MLOps réutilisable qui peut être utilisé dans plusieurs projets.

    Capture d’écran de duplication (fork) GitHub.

  3. Dans votre projet GitHub, sélectionnez Paramètres :

    Capture d’écran des paramètres GitHub.

  4. Sélectionnez ensuite Secrets, puis Actions :

    Capture d’écran des secrets GitHub.

  5. Sélectionnez New repository secret (Nouveau secret de dépôt). Nommez ce secret AZURE_CREDENTIALS et collez la sortie du principal de service comme contenu du secret. Sélectionnez Ajouter un secret. Capture d’écran de la chaîne 1 des secrets GitHub.

  6. Ajoutez chacun des secrets GitHub suivants en utilisant les valeurs correspondantes de la sortie du principal de service comme contenu du secret :

    • ARM_CLIENT_ID
    • ARM_CLIENT_SECRET
    • ARM_SUBSCRIPTION_ID
    • ARM_TENANT_ID

    Capture d’écran de la chaîne 2 des secrets GitHub.

Notes

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éployer l’infrastructure de projet Machine Learning avec GitHub Actions

Cette étape déploie le pipeline d’entraînement dans l’espace de travail 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 utilisez le type de projet ML classique.

Configurer les paramètres d’environnement Machine Learning

Accédez à votre référentiel et sélectionnez le fichier config-infra-prod.yml à la racine. Modifiez les paramètres suivants à votre convenance, puis commitez les modifications.

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. Le texte suivant montre les valeurs et les paramètres par défaut dans les fichiers :

   namespace: mlopslite #Note: A namespace with many characters will cause storage account creation to fail due to storage account names having a limit of 24 characters.
   postfix: ao04
   location: westus
    
   environment: prod
   enable_aml_computecluster: true
   enable_aml_secure_workspace: true
   enable_monitoring: false

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. L’indicateur enable_monitoring dans ces fichiers présente la valeur par défaut False. L’activation de cet indicateur ajoute des éléments supplémentaires au déploiement pour prendre en charge la supervision Azure Machine Learning basée sur https://github.com/microsoft/AzureML-Observability. Cet indicateur active un cluster ADX et augmente le temps de déploiement et le coût de la solution MLOps.

Déployez l’infrastructure Machine Learning

  1. Dans votre référentiel de projets GitHub (par exemple, taxi-fare-regression), sélectionnez Actions

    Capture d’écran des actions GitHub pour le référentiel.

    Les workflows GitHub prédéfinis associés à votre projet sont affichés. Pour un projet Machine Learning classique, les workflows de travail disponibles ressemblent à la capture d’écran suivante :

    Capture d’écran des workflows GitHub pour le référentiel.

  2. Sélectionnez tf-gha-deploy-infra.yml pour déployer l’infrastructure Machine Learning à l’aide de GitHub Actions et Terraform.

    Capture d’écran de l’infrastructure de déploiement GitHub.

  3. Sur le côté droit de la page, sélectionnez Exécuter le workflow, puis sélectionnez la branche sur laquelle exécuter le workflow. Cette action peut déployer Dev Infrastructure si vous avez créé une branche de développement ou une infrastructure Prod si vous effectuez un déploiement à partir de main. Surveillez le workflow jusqu’à la fin de l’opération.

    Capture d’écran du pipeline d’infrastructure GitHub.

  4. Une fois le pipeline terminé, vous pouvez trouver votre espace de travail Azure Machine Learning et les ressources associées en vous connectant au portail Azure. Ensuite, un pipeline d’entraînement et de scoring de modèle est déployé dans le nouvel environnement Machine Learning.

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 ont 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 Machine Learning.

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

Ensuite, vous déployez le pipeline d’entraînement du modèle dans votre nouvel espace de travail Machine Learning. Ce pipeline crée une instance de cluster de calcul, inscrit un environnement d’entraînement définissant l’image Docker et les packages Python nécessaires, inscrit un jeu de données d’entraînement, puis démarre le pipeline d’entraînement décrit dans la dernière section. Une fois le travail terminé, le modèle entraîné est inscrit dans l’espace de travail Azure Machine Learning et disponible pour le déploiement.

  1. Dans votre référentiel de projet GitHub (exemple : taxi-fare-regression), sélectionnez Actions

    Capture d’écran de la page actions du référentiel GitHub.

  2. Sélectionnez deploy-model-training-pipeline dans les workflows répertoriés, puis sélectionnez Exécuter le flux de travail pour exécuter le workflow d’apprentissage du modèle. Ce processus prend plusieurs minutes, en fonction de la taille de calcul.

    Capture d’écran de l’exécution de pipeline dans GitHub.

  3. Une fois terminée, une exécution réussie inscrit le modèle dans l’espace de travail Machine Learning.

    Capture d’écran de l’étape d’entraînement dans GitHub Actions.

Notes

Si vous souhaitez vérifier la sortie de chaque étape individuelle, par exemple pour afficher la sortie d’une exécution ayant échoué, sélectionnez une sortie de travail, puis chaque étape du travail pour afficher la sortie de cette étape.

Avec le modèle entraîné inscrit dans l’espace de travail Machine Learning, vous êtes prêt à déployer le modèle pour le scoring.

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 workflows pour tester les performances du modèle dans votre espace de travail Azure Machine Learning.

Point de terminaison en ligne

  1. Dans votre référentiel de projets GitHub (par exemple, taxi-fare-regression), sélectionnez Actions

    Capture d’écran de la page d’actions GitHub.

  2. Sélectionnez deploy-online-endpoint-pipeline dans les flux de travail répertoriés à gauche, puis sélectionnez Exécuter le flux de travail pour exécuter le flux de travail du pipeline de déploiement du point de terminaison en ligne. Les étapes de ce pipeline créent un point de terminaison en ligne dans votre espace de travail Machine Learning, créent un déploiement de votre modèle sur ce point de terminaison, puis allouent le trafic au point de terminaison.

    Capture d’écran de l’action GitHub pour le point de terminaison en ligne.

    Une fois terminé, le point de terminaison en ligne est déployé dans l’espace de travail Azure Machine Learning et disponible pour les tests.

    Capture d’écran du point de terminaison en ligne de taxi Machine Learning.

  3. Pour tester ce déploiement, accédez à l’onglet Points de terminaison dans votre espace de travail Machine Learning, sélectionnez le point de terminaison et sélectionnez l’onglet Test . Vous pouvez utiliser l’exemple de données d’entrée situées dans le référentiel cloné à /data/taxi-request.json pour tester le point de terminaison.

    Capture d’écran du test de point de terminaison en ligne de taxi Machine Learning.

Point de terminaison de lot

  1. Dans votre référentiel de projets GitHub (par exemple, taxi-fare-regression), sélectionnez Actions

    Capture d’écran de la page d’actions GitHub.

  2. Sélectionnez deploy-batch-endpoint-pipeline dans les workflows, puis sélectionnez Exécuter le flux de travail pour exécuter le workflow du pipeline de déploiement de point de terminaison de lot. Les étapes de ce pipeline créent un cluster AmlCompute sur lequel exécuter le scoring par lots, créent le point de terminaison de lot dans votre espace de travail Machine Learning, puis créent un déploiement de votre modèle sur ce point de terminaison.

    Capture d’écran de l’action GitHub pour le point de terminaison de lot.

  3. Une fois terminé, le point de terminaison de lot est déployé dans l’espace de travail Azure Machine Learning et disponible pour les tests.

    Capture d’écran du point de terminaison de lot de taxi Machine Learning.

Passage en production

Des exemples de scénarios peuvent être entraînés et déployés à la fois pour les branches et environnements Dev et Prod. Lorsque vous êtes satisfait des performances du pipeline d’entraînement, du modèle et du déploiement du modèle dans Test, les pipelines de développement et les modèles peuvent être répliqués et déployés dans l’environnement de production.

Les exemples de pipelines Machine Learning d’apprentissage et de déploiement et les workflows GitHub peuvent être utilisés comme point de départ pour adapter votre propre code de modélisation et vos propres données.

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 Machine Learning.

Étapes suivantes