Assurer le suivi des expériences de Machine Learning Azure Databricks avec MLflow et Azure Machine Learning
MLflow est une bibliothèque open source permettant de gérer le cycle de vie de vos expériences de Machine Learning. Vous pouvez utiliser MLflow pour intégrer Azure Databricks à Azure Machine Learning afin de tirer le meilleur profit des deux produits.
Cet article portera sur les éléments suivants :
- Bibliothèques requises pour utiliser MLflow avec Azure Databricks et Azure Machine Learning.
- Découvrez comment Assurer le suivi des exécutions avec MLflow dans Azure Machine Learning.
- Comment journaliser des modèles avec MLflow pour les inscrire dans Azure Machine Learning.
- Comment déployer et utiliser des modèles inscrits dans Azure Machine Learning.
Prérequis
- Installez le package
azureml-mlflow
, qui gère la connectivité avec Azure Machine Learning, y compris l’authentification. - Un cluster et un espace de travail Azure Databricks.
- Créez un espace de travail Azure Machine Learning.
Exemples de notebooks
Les modèles d’apprentissage dans Azure Databricks et leur déploiement sur Azure Machine Learning : montre comment effectuer l’apprentissage de modèles dans Azure Databricks et les déployer dans Azure Machine Learning. Il explique également comment gérer les cas où vous souhaitez également suivre les expériences et les modèles avec l’instance MLflow dans Azure Databricks et tirer profit d’Azure Machine Learning pour le déploiement.
Installation des bibliothèques
Pour installer des bibliothèques sur votre cluster, accédez à l'onglet Bibliothèques et sélectionnez Installer.
Dans le champ Package, entrez azureml-mlflow, puis sélectionnez Installer. Répétez cette étape si nécessaire afin d’installer d'autres packages sur votre cluster pour votre expérience.
Suivre les exécutions Azure Databricks avec MLflow
Azure Databricks peut être configuré pour suivre les expériences à l’aide de MLflow de deux façons :
- Suivi dans votre espace de travail Azure Databricks et Azure Machine Learning (suivi double)
- Suivi exclusif sur Azure Machine Learning
Par défaut, le double suivi est configuré pour vous lorsque vous liez votre espace de travail Azure Databricks.
Double suivi sur Azure Databricks et Azure Machine Learning
Le fait de lier votre espace de travail ADB à votre espace de travail Azure Machine Learning vous permet de suivre vos données d’expérience dans l’espace de travail Azure Machine Learning et l’espace de travail Azure Databricks en même temps. Il s’agit du Double suivi.
Avertissement
Actuellement, le double suivi dans un espace de travail Azure Machine Learning avec liaison privée n’est pas pris en charge. Configurez un suivi exclusif avec votre espace de travail Azure Machine Learning à la place.
Avertissement
Le double suivi n’est pas pris en charge dans Microsoft Azure géré par 21Vianet pour le moment. Configurez un suivi exclusif avec votre espace de travail Azure Machine Learning à la place.
Pour lier votre espace de travail ADB à un espace de travail Azure Machine Learning (nouveau ou existant) :
- Connectez-vous au portail Azure.
- Accédez à la page de présentation de votre espace de travail ADB.
- Sélectionnez le bouton Lier l'espace de travail Azure Machine Learning en bas à droite.
Une fois que vous avez lié votre espace de travail Azure Databricks à votre espace de travail Azure Machine Learning, MLflow Tracking est automatiquement configuré pour être suivi aux emplacements suivants :
- L’espace de travail Azure Machine Learning lié.
- Votre espace de travail ADB d’origine.
Vous pouvez ensuite utiliser MLflow dans Azure Databricks comme vous avez l’habitude de le faire. L’exemple suivant définit le nom de l’expérience comme d’habitude dans Azure Databricks et commence à journaliser certains paramètres :
import mlflow
experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}"
mlflow.set_experiment(experimentName)
with mlflow.start_run():
mlflow.log_param('epochs', 20)
pass
Notes
Contrairement au suivi, les registres de modèles ne prennent pas en charge l’inscription simultanée de modèles sur Azure Machine Learning et Azure Databricks. L’inscription ne peut se faire que sur l’un ou l’autre. Pour plus d’informations, consultez la section Inscrire des modèles dans le registre à l’aide de MLflow.
Suivi exclusif sur l’espace de travail Azure Machine Learning
Si vous préférez gérer vos expériences suivies dans un emplacement centralisé, vous pouvez configurer MLflow Tracking pour effectuer le suivi uniquement dans votre espace de travail Azure Machine Learning. Cette configuration présente l’avantage de faciliter le déploiement à l’aide des options de déploiement d’Azure Machine Learning.
Avertissement
Pour un espace de travail Azure Machine Learning avec liaison privée, vous devez déployer Azure Databricks dans votre propre réseau (injection de réseau virtuel) pour garantir une connectivité appropriée.
Vous devez configurer l’URI de suivi MLflow pour qu’il pointe exclusivement vers Azure Machine Learning, comme illustré dans l’exemple suivant :
Configurer l’URI de suivi
Récupérez l’URI de suivi pour votre espace de travail :
S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)
Connectez-vous et configurez votre espace de travail :
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Vous pouvez obtenir l’URI de suivi à l’aide de la commande
az ml workspace
:az ml workspace show --query mlflow_tracking_uri
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.Quand la variable d’environnement est configurée, toute expérience exécutée dans ce cluster est suivie dans Azure Machine Learning.
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
Lorsque MLflow est configuré pour limiter le suivi des expériences à l’espace de travail Azure Machine Learning, la convention d’affectation de noms de l’expérience doit suivre celle qui est utilisée par Azure Machine Learning. Dans Azure Databricks, les expériences sont nommées avec le chemin d’accès à l’emplacement où l’expérience est enregistrée, par exemple /Users/alice@contoso.com/iris-classifier
. En revanche, dans Azure Machine Learning, vous devez fournir directement le nom de l’expérience. Comme dans l’exemple précédent, la même expérience serait directement nommée iris-classifier
:
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.
Consigner des modèles avec MLflow
Au terme de l’apprentissage de votre modèle, vous pouvez le consigner sur le serveur de suivi à l’aide de la méthode mlflow.<model_flavor>.log_model()
. <model_flavor>
fait référence au framework associé au modèle. Découvrez les versions du modèle prises en charge. L’exemple suivant illustre l’inscription d’un modèle créé avec la bibliothèque Spark MLLib :
mlflow.spark.log_model(model, artifact_path = "model")
Il convient de mentionner que la saveur spark
ne correspond pas au fait que nous effectuons l’apprentissage d’un modèle dans un cluster Spark, mais dépend de l’infrastructure d’apprentissage utilisée (vous pouvez parfaitement effectuer l’apprentissage d’un modèle en utilisant TensorFlow avec Spark, auquel cas la saveur à utiliser est tensorflow
).
Les modèles sont consignés au sein de l’exécution qui fait l’objet du suivi. Cela signifie que les modèles sont disponibles à la fois dans Azure Databricks et Azure Machine Learning (par défaut), ou exclusivement dans Azure Machine Learning si vous avez configuré l’URI de suivi pour qu’il pointe vers celui-ci.
Important
Notez qu’ici le paramètre registered_model_name
n’a pas été spécifié. Consultez la section Inscrire des modèles dans le registre à l’aide de MLflow pour plus d’informations sur les implications de ce paramètre et sur le fonctionnement du registre.
Inscrire des modèles dans le registre à l’aide de MLflow
Contrairement au suivi, les registres de modèles ne peuvent pas fonctionner en même temps dans Azure Databricks et Azure Machine Learning. Seul l’un ou l’autre peut être utilisé. Par défaut, les registres de modèles utilisent l’espace de travail Azure Databricks ; sauf si vous avez choisi de configurer MLflow Tracking pour limiter le suivi à votre espace de travail Azure Machine Learning, auquel cas le registre de modèles utilise l’espace de travail Azure Machine Learning.
Ensuite, si vous utilisez la configuration par défaut, la ligne suivante consigne un modèle au sein des exécutions correspondantes d’Azure Databricks et d’Azure Machine Learning, mais elle ne l’inscrit que sur Azure Databricks :
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.
Utilisation du registre Azure Machine Learning avec MLflow
Si vous souhaitez utiliser le registre de modèles Azure Machine Learning au lieu d’Azure Databricks, nous vous recommandons de Configurer MLflow Tracking pour qu’il effectue le suivi uniquement dans votre espace de travail Azure Machine Learning. Cela lèvera toute ambiguïté sur l’emplacement d’inscription des modèles et réduira la complexité.
Cependant, si vous souhaitez continuer à utiliser les fonctionnalités de double suivi mais inscrire des modèles dans Azure Machine Learning, vous pouvez demander à MLflow d’utiliser Azure Machine Learning pour les registres de modèles en configurant l’URI du registre de modèles MLflow. Le format et la valeur de cet URI sont identiques à ceux de l’URI de suivi MLflow.
mlflow.set_registry_uri(azureml_mlflow_uri)
Notes
La valeur de azureml_mlflow_uri
a été obtenue comme indiqué dans Configurer MLflow Tracking de manière à limiter le suivi à votre espace de travail Azure Machine Learning.
Pour obtenir un exemple complet de ce scénario, consultez Effectuer l’apprentissage de modèles dans Azure Databricks et les déployer sur Azure Machine Learning.
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 profit 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 d’inférence managés.
Objets de modèle MLFlow ou fonctions Pandas définies par l’utilisateur, qui peuvent être utilisés dans des notebooks Azure Databricks dans les 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. Si vos modèles sont inscrits dans l’instance MLflow au sein d’Azure Databricks, vous devez les réinscrire dans Azure Machine Learning. Dans ce cas, consultez l’exemple Effectuer l’apprentissage de modèles dans Azure Databricks et les déployer sur Azure Machine Learning
Déployer des modèles sur ADB pour le scoring par lots à l’aide de fonctions définies par l’utilisateur
Vous pouvez choisir des clusters Azure Databricks pour le scoring par lot. En tirant parti de MLflow, vous pouvez résoudre n’importe quel modèle à partir du registre auquel vous êtes connecté. Vous utiliserez généralement l’une des deux méthodes suivantes :
- Si votre modèle a été entraîné et généré avec des bibliothèques Spark (comme
MLLib
), utilisezmlflow.pyfunc.spark_udf
pour charger un modèle et l’utiliser comme fonction UDF Spark Pandas pour noter les nouvelles données. - Si votre modèle n’a pas été entraîné ou généré avec des bibliothèques Spark, utilisez
mlflow.pyfunc.load_model
oumlflow.<flavor>.load_model
pour charger le modèle dans le pilote de cluster. Notez que, de cette façon, toute parallélisation ou distribution de travail que vous souhaitez effectuer dans le cluster doit être orchestrée par vous. Notez également que MLflow n’installe aucune bibliothèque dont votre modèle a besoin pour s’exécuter. Ces bibliothèques doivent être installées dans le cluster avant de l’exécuter.
L’exemple suivant montre comment charger un modèle à partir du Registre nommé uci-heart-classifier
et l’utiliser comme fonction UDF Spark Pandas pour noter de nouvelles données.
from pyspark.sql.types import ArrayType, FloatType
model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"
#Create a Spark UDF for the MLFlow model
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Conseil
Consultez Chargement des modèles à partir du registre pour obtenir d’autres façons de référencer des modèles à partir du Registre.
Une fois le modèle chargé, vous pouvez l’utiliser pour noter les nouvelles données :
#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 Databricks, 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. Cette action entraîne la dissociation de votre espace de travail Azure Databricks et de 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 :
Dans le portail Azure, sélectionnez Groupes de ressources tout à gauche.
À partir de la liste, sélectionnez le groupe de ressources créé.
Sélectionnez Supprimer le groupe de ressources.
Entrez le nom du groupe de ressources. Puis sélectionnez Supprimer.