Suivre des expériences de Machine Learning Azure Synapse Analytics avec MLflow et Azure Machine Learning

Cet article explique comment activer MLflow pour se connecter à Azure Machine Learning tout en travaillant dans un espace de travail Azure Synapse Analytics. Vous pouvez tirer parti de cette configuration pour le suivi, la gestion des modèles et le déploiement de modèles.

MLflow est une bibliothèque open source permettant de gérer le cycle de vie de vos expériences de Machine Learning. MLFlow Tracking est un composant de MLflow qui consigne et assure le suivi de vos métriques d'exécution d'apprentissage et de vos artefacts de modèle. Apprenez-en davantage sur MLflow.

Si vous avez un projet MLflow à entraîner avec Azure Machine Learning, consultez Entraîner des modèles ML avec des projets MLflow et Azure Machine Learning (préversion).

Prérequis

Installation des bibliothèques

Pour installer des bibliothèques sur votre cluster dédié dans Azure Synapse Analytics :

  1. Créez un fichier requirements.txt avec les packages que vos expériences requièrent, mais assurez-vous qu’il inclut également les packages suivants :

    requirements.txt

    mlflow
    azureml-mlflow
    azure-ai-ml
    
  2. Accédez au portail de l’espace de travail Azure Analytics.

  3. Accédez à l’onglet Gérer et sélectionnez Pools Apache Spark.

  4. Cliquez sur les trois points en regard du nom du cluster, puis sélectionnez Packages.

    install mlflow packages in Azure Synapse Analytics

  5. Dans la section Fichiers d’exigences, cliquez sur Charger.

  6. Chargez le fichier requirements.txt.

  7. Attendez que votre cluster redémarre.

Suivre des expériences avec MLflow

Azure Synapse Analytics peut être configuré pour suivre les expériences avec MLflow vers un espace de travail Azure Machine Learning. Azure Machine Learning fournit un référentiel centralisé pour gérer tout le cycle de vie des expériences, modèles et déploiements. Il présente l’avantage de faciliter le déploiement à l’aide d’options de déploiement d’Azure Machine Learning.

Configuration de vos notebooks pour utiliser MLflow connecté à Azure Machine Learning

Pour utiliser Azure Machine Learning comme référentiel centralisé pour les expériences, vous pouvez tirer parti de MLflow. Sur chaque notebook sur lequel vous travaillez, vous devez configurer l’URI de suivi pour qu’il pointe vers l’espace de travail que vous allez utiliser. L’exemple suivant montre comment procéder :

Configurer l’URI de suivi

  1. Récupérez l’URI de suivi pour votre espace de travail :

    S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)

    1. Connectez-vous et configurez votre espace de travail :

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Vous pouvez obtenir l’URI de suivi à l’aide de la commande az ml workspace :

      az ml workspace show --query mlflow_tracking_uri
      
  2. Configuration de l’URI de suivi :

    Ensuite, la méthode set_tracking_uri() pointe l’URI de MLflow Tracking vers cet URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Conseil

    Quand vous travaillez sur des environnements partagés (par exemple, un cluster Azure Databricks, un cluster Azure Synapse Analytics ou un environnement similaire), il est utile de définir la variable d’environnement MLFLOW_TRACKING_URI au niveau du cluster afin de configurer automatiquement l’URI de suivi MLflow pour qu’il pointe vers Azure Machine Learning pour toutes les sessions exécutées dans le cluster plutôt que de le faire pour chaque session.

Configurer l’authentification

Quand le suivi est configuré, vous devez également configurer le mode d’authentification auprès de l’espace de travail associé. Par défaut, le plug-in Azure Machine Learning pour MLflow effectue une authentification interactive en ouvrant le navigateur par défaut pour demander les informations d’identification. Consultez Configurer MLflow pour Azure Machine Learning : Configurer l’authentification pour connaître d’autres moyens de configurer l’authentification pour MLflow auprès des espaces de travail Azure Machine Learning.

Pour les travaux interactifs, quand un utilisateur est connecté à la session, vous pouvez vous appuyer sur l’authentification interactive. Dans ce cas, aucune action supplémentaire n’est requise.

Avertissement

L’authentification interactive par navigateur bloque l’exécution du code quand les informations d’identification sont demandées. Cette option d’authentification n’est pas appropriée dans les environnements non surveillés, par exemple pour les travaux d’entraînement. Nous vous recommandons de configurer un autre mode d’authentification.

Pour les scénarios impliquant une exécution non surveillée, vous devez configurer un principal de service pour la communication avec Azure Machine Learning.

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

Conseil

Quand vous travaillez sur des environnements partagés, il est recommandé de configurer ces variables d’environnement au niveau du calcul. Gérez-les comme secrets dans une instance d’Azure Key Vault ; il s’agit d’une bonne pratique à adopter dans la mesure du possible. Par exemple, dans Azure Databricks, vous pouvez utiliser des secrets dans des variables d’environnement dans la configuration du cluster comme suit : AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}. Consultez Référencer un secret dans une variable d’environnement pour savoir comment procéder dans Azure Databricks ou reportez-vous à une documentation similaire dans votre plateforme.

Noms des expériences dans Azure Machine Learning

Par défaut, Azure Machine Learning suit les exécutions dans une expérience par défaut appelée Default. Il est généralement judicieux de définir l’expérience sur laquelle vous allez travailler. Utilisez la syntaxe suivante pour définir le nom de l’expérience :

mlflow.set_experiment(experiment_name="experiment-name")

Suivi des paramètres, métriques et artefacts

Vous pouvez ensuite utiliser MLflow dans Azure Databricks comme vous avez l’habitude de le faire. Pour plus d’informations, consultez Journaliser et visualiser les métriques et les fichiers journaux.

Inscrire des modèles dans le registre à l’aide de MLflow

Des modèles peuvent être inscrits dans un espace de travail Azure Machine Learning qui offre un référentiel centralisé pour gérer leur cycle de vie. L’exemple suivant journalise un modèle formé avec Spark MLLib, et l’inscrit dans le registre.

mlflow.spark.log_model(model, 
                       artifact_path = "model", 
                       registered_model_name = "model_name")  
  • S'il n'existe pas de modèle inscrit sous ce nom, la méthode en inscrit un nouveau, crée une version 1, puis renvoie un objet MLflow ModelVersion.

  • S'il existe déjà un modèle inscrit sous ce nom, la méthode crée une nouvelle version du modèle et renvoie l'objet version.

Vous pouvez gérer les modèles inscrits dans Azure Machine Learning à l’aide de MLflow. Pour plus d’informations, consultez Gérer les registres de modèles dans Azure Machine Learning avec MLflow.

Déployer et utiliser des modèles inscrits dans Azure Machine Learning

Les modèles inscrits dans Azure Machine Learning Service à l’aide de MLflow peuvent être utilisés comme suit :

  • Point de terminaison Azure Machine Learning (en temps réel et par lots) : ce déploiement vous permet de tirer parti des fonctionnalités de déploiement d’Azure Machine Learning pour l’inférence en temps réel et par lots dans Azure Container Instances (ACI), Azure Kubernetes (AKS) ou nos points de terminaison managés.

  • Objets modèles MLFlow ou fonctions Pandas définies par l’utilisateur, qui peuvent être utilisés dans des notebooks Azure Synapse Analytics dans des pipelines de diffusion en continu ou de traitement par lots.

Déployer des modèles sur des points de terminaison Azure Machine Learning

Vous pouvez utiliser le plug-in azureml-mlflow pour déployer un modèle dans votre espace de travail Azure Machine Learning. Consultez la page Déployer des modèles MLflow pour obtenir des détails complets sur le déploiement des modèles sur les différentes cibles.

Important

Pour pouvoir déployer des modèles, ceux-ci doivent être inscrits dans le registre Azure Machine Learning. Le déploiement de modèles non inscrits n’est pas pris en charge dans Azure Machine Learning.

Déployer des modèles pour le scoring par lots à l’aide de fonctions définies par l’utilisateur

Vous pouvez choisir des clusters Azure Synapse Analytics pour le scoring par lot. Le modèle MLFlow est chargé et utilisé en tant que fonction Spark Pandas définie par l'utilisateur pour calculer le score des nouvelles données.

from pyspark.sql.types import ArrayType, FloatType 

model_uri = "runs:/"+last_run_id+ {model_path} 

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

Nettoyer les ressources

Si vous souhaitez conserver votre espace de travail Azure Synapse Analytics, mais que vous n’avez plus besoin de l’espace de travail Azure Machine Learning, vous pouvez supprimer l’espace de travail Azure Machine Learning. Si vous ne prévoyez pas d’utiliser les métriques et artefacts journalisés dans votre espace de travail, sachez qu’il n’est pas possible de les supprimer un par un. Au lieu de cela, supprimez le groupe de ressources contenant le compte de stockage et l’espace de travail afin d’éviter des frais supplémentaires :

  1. Dans le portail Azure, sélectionnez Groupes de ressources tout à gauche.

    Delete in the Azure portal

  2. À partir de la liste, sélectionnez le groupe de ressources créé.

  3. Sélectionnez Supprimer le groupe de ressources.

  4. Entrez le nom du groupe de ressources. Puis sélectionnez Supprimer.

Étapes suivantes