Configurer MLflow pour Azure Machine Learning

Cet article présente comment vous pouvez configurer MLflow afin qu’il se connecte un espace de travail Azure Machine Learning pour le suivi, les registres et le déploiement.

Les espaces de travail Azure Machine Learning sont compatibles avec MLflow : ils peuvent jouer le rôle de serveur MLflow sans configuration supplémentaire. Chaque espace de travail a un URI de suivi MLflow que MLflow peut utiliser pour se connecter à l’espace de travail. Les espaces de travail Azure Machine Learning étant déjà configurés pour utiliser MLflow, aucune configuration supplémentaire n’est requise.

Toutefois, si vous travaillez en dehors d’Azure Machine Learning (comme sur votre machine locale, Azure Synapse Analytics ou Azure Databricks), vous devez configurer MLflow de manière à ce qu’il pointe vers l’espace de travail.

Important

En cas d’exécution sur Azure Compute (notebooks Azure Machine Learning, notebooks Jupyter hébergés sur des instances de calcul Azure Machine Learning ou travaux exécutés sur des clusters de calcul Azure Machine Learning), vous n’avez pas besoin de configurer l’URI de suivi. Il est automatiquement configuré pour vous.

Prérequis

Pour suivre ce tutoriel, vous devez respecter les prérequis suivants :

  • Installer le package mlflow du SDK MLflow et le plug-in Azure Machine Learning pour MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Conseil

    Vous pouvez utiliser le package mlflow-skinny, qui est un package MLflow léger sans dépendances de stockage SQL, de serveur, d’interface utilisateur ou de science des données. mlflow-skinny est recommandé pour les utilisateurs qui ont principalement besoin des fonctionnalités de suivi et de journalisation MLflow sans importer la suite complète de fonctionnalités, incluant les des déploiements.

  • Un espace de travail Azure Machine Learning. Vous pouvez en créer un en suivant le didacticiel Créer des ressources de Machine Learning.

  • Si vous réalisez un suivi à distance (autrement dit, des expériences de suivi qui s’exécutent en dehors d’Azure Machine Learning), configurez MLflow pour qu’il pointe vers l’URI de suivi de votre espace de travail Azure Machine Learning. Pour plus d’informations sur la connexion de MLflow à votre espace de travail, consultez Configurer MLflow pour Azure Machine Learning.

Configurer l’URI de suivi MLflow

Pour connecter MLflow à un espace de travail Azure Machine Learning, vous avez besoin de l’URI de suivi de l’espace de travail. Chaque espace de travail a son propre URI de suivi avec le protocole azureml://.

  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

Une fois le suivi défini, vous devez également configurer la méthode d’authentification pour 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.

Le plug-in Azure Machine Learning pour MLflow prend en charge plusieurs mécanismes d’authentification avec le package azure-identity, qui est installé comme dépendance pour le plug-in azureml-mlflow. Les méthodes d’authentification suivantes sont essayées une par une jusqu’à ce que l’une d’elles réussisse :

  1. Environnement : permet de lire les informations de compte spécifiées via des variables d’environnement et les utilise pour l’authentification.
  2. Identité managée : Si l’application est déployée sur un hôte Azure avec l’identité managée activée, il effectue l’authentification avec cette identité.
  3. Azure CLI : si un utilisateur se connecte via la commande Azure CLI az login, il s’authentifie en tant que cet utilisateur.
  4. Azure PowerShell : si un utilisateur se connecte via la commande Connect-AzAccount d’Azure PowerShell, il s’authentifie en tant que cet utilisateur.
  5. Navigateur interactif : authentifie un utilisateur de manière interactive via le navigateur par défaut.

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.

Si vous préférez utiliser un certificat plutôt qu’un secret, vous pouvez configurer la variable d’environnement AZURE_CLIENT_CERTIFICATE_PATH sur le chemin d’un fichier de certificat PEM ou PKCS12 (en incluant la clé privée) et la variable d’environnement AZURE_CLIENT_CERTIFICATE_PASSWORD avec le mot de passe du fichier de certificat, le cas échéant.

Configurer des autorisations et des niveaux d’autorisation

Des rôles par défaut, tels que Scientifique des données AzureML ou Contributeur, sont déjà configurés pour effectuer des opérations MLflow dans un espace de travail Azure Machine Learning. Si vous utilisez un rôle personnalisé, vous avez besoin des autorisations suivantes :

  • Pour utiliser le suivi MLflow :

    • Microsoft.MachineLearningServices/workspaces/experiments/*
    • Microsoft.MachineLearningServices/workspaces/jobs/*
  • Pour utiliser un registre de modèles MLflow :

    • Microsoft.MachineLearningServices/workspaces/models/*/*

Si vous souhaitez découvrir comment accorder l’accès au principal de service que vous avez créé ou au compte d’utilisateur vers votre espace de travail, consultez Accorder l’accès.

Résolution des problèmes d’authentification

MLflow essaie de s’authentifier auprès d’Azure Machine Learning lors de la première opération qui interagit avec le service, par exemple mlflow.set_experiment() ou mlflow.start_run(). Si vous rencontrez des problèmes ou des invites d’authentification inattendues pendant le processus, vous pouvez augmenter le niveau de journalisation afin d’obtenir plus de détails sur l’erreur :

import logging

logging.getLogger("azure").setLevel(logging.DEBUG)

Définir le nom de l’expérience (facultatif)

Toutes les exécutions de MLflow sont enregistrées dans l'expérience active. Par défaut, les exécutions sont consignées dans une expérience nommée Default qui est automatiquement créée pour vous. Vous pouvez configurer l’expérience dans laquelle le suivi est effectué.

Conseil

Lors de l’envoi de travaux à l’aide d’Azure Machine Learning CLI v2, vous pouvez définir le nom de l’expérience à l’aide de la propriété experiment_name dans la définition YAML du travail. Vous n’avez pas besoin de la configurer sur votre script de formation. Consultez YAML : nom d’affichage, nom de l’expérience, description et étiquettes pour plus de détails.

Configurez votre expérience en utilisant la commande MLflow mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Prise en charge de clouds Azure non publics

Le plug-in Azure Machine Learning pour MLflow est configuré par défaut pour fonctionner avec le cloud Azure global. Toutefois, vous pouvez configurer le cloud Azure que vous utilisez en définissant la variable d’environnement AZUREML_CURRENT_CLOUD.

import os

os.environ["AZUREML_CURRENT_CLOUD"] = "AzureChinaCloud"

Vous pouvez identifier le cloud que vous utilisez via la commande Azure CLI suivante :

az cloud list

La valeur IsActive du cloud actuel est définie sur True.

Étapes suivantes

Votre environnement est à présent connecté à votre espace de travail dans Azure Machine Learning et vous pouvez commencer à l’utiliser.