Aller au contenu principal

Log, charger et enregistrer les modèles MLflow

Un Modèle MLflow est un format standard pour l'empaquetage de modèles de machine learning qui peuvent être utilisés dans une variété d'outils en aval — par exemple, l'inférence par batch sur Apache Spark ou la diffusion en temps réel via une API REST. Le format définit une convention qui vous permet d'enregistrer un modèle dans différentes saveurs (fonction Python, PyTorch, sklearn, etc.), qui peuvent être comprises par différentes plateformes de service et d'inférence de modèles.

Pour savoir comment enregistrer et noter un modèle de streaming, voir Comment enregistrer et charger un modèle de streaming.

MLflow 3 apporte des améliorations significatives aux modèles MLflow en introduisant un nouvel objet LoggedModel dédié avec ses propres métadonnées telles que les métriques et les parameters. Pour plus de détails, consultez Suivre et comparer les modèles à l'aide des modèles enregistrés MLflow.

Log et chargez les modèles

Lorsque vous enregistrez un modèle, MLflow enregistre automatiquement les fichiers requirements.txt et conda.yaml. Vous pouvez utiliser ces fichiers pour recréer l'environnement de développement du modèle et réinstaller les dépendances à l'aide de virtualenv (recommandé) ou de conda.

important

Anaconda Inc. a mis à jour ses conditions d'utilisation pour les canaux de distribution anaconda.org. Selon les nouvelles conditions d'utilisation, il se peut que vous ayez besoin d'une licence commerciale si vous vous basez sur l'empaquetage et la distribution d'Anaconda. Voir la FAQ d'Anaconda Commercial Edition pour plus d'informations. Votre utilisation des canaux de distribution Anaconda est régie par leurs conditions d'utilisation.

Les modèles MLflow enregistrés avant v1.18 (Databricks Runtime 8.3 ML ou antérieur) étaient par default enregistrés avec le Canal de distribution conda defaults (https://repo.anaconda.com/pkgs/) en tant que dépendance. En raison de cette modification de licence, Databricks a cessé d'utiliser le canal de distribution defaults pour les modèles enregistrés avec MLflow v1.18 et versions ultérieures. Le Canal de distribution par default enregistré est maintenant conda-forge, qui pointe vers la https://conda-forge.org/ gérée par la Communauté.

Si vous avez enregistré un modèle avant MLflow v1.18 sans exclure le canal de distribution defaults de l'environnement conda pour le modèle, ce modèle peut avoir une dépendance vis-à-vis du canal de distribution defaults que vous n'aviez pas l'intention d'avoir. Pour confirmer manuellement si un modèle a cette dépendance, vous pouvez examiner la valeur channel dans le fichier conda.yaml qui est empaqueté avec le modèle enregistré. Par exemple, le conda.yaml d'un modèle avec une dépendance vis-à-vis du canal de distribution defaults peut ressembler à ceci :

YAML
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env

Étant donné que Databricks ne peut pas déterminer si votre utilisation du repository Anaconda pour interagir avec vos modèles est autorisée dans le cadre de votre relation avec Anaconda, Databricks n'oblige pas ses clients à apporter des modifications. Si votre utilisation du repository Anaconda.com via Databricks est autorisée selon les conditions d'Anaconda, vous n'avez pas besoin d'agir.

Si vous souhaitez modifier le canal de distribution utilisé dans l’environnement d’un modèle, vous pouvez réenregistrer le modèle dans le registre des modèles avec un nouveau conda.yaml. Vous pouvez le faire en spécifiant le Canal de distribution dans le paramètre conda_env de log_model().

Pour plus d'informations sur l'API log_model(), consultez la documentation MLflow pour le type de modèle avec lequel vous travaillez, par exemple, log_model pour scikit-learn.

Pour plus d’information sur les fichiers conda.yaml, consultez la documentation MLflow.

Commandes d'API

Pour enregistrer un modèle sur le serveur de suivi MLflow, utilisez mlflow.<model-type>.log_model(model, ...).

Pour charger un modèle logué précédemment pour l'inférence ou un développement ultérieur, utilisez mlflow.<model-type>.load_model(modelpath), où modelpath est l'une des options suivantes :

  • un chemin de modèle (tel que models:/{model_id}) (MLflow 3 uniquement)
  • un chemin d’accès relatif à l’exécution (tel que runs:/{run_id}/{model-path})
  • un chemin de volumes Unity Catalog (tel que dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path})
  • un chemin de stockage d'artefacts géré par MLflow commençant par dbfs:/databricks/mlflow-tracking/
  • un chemin d'un modèle enregistré (tel que models:/{model_name}/{model_stage}).

Pour les modèles MLflow Python, une option supplémentaire consiste à utiliser mlflow.pyfunc.load_model() pour charger le modèle en tant que fonction Python générique.

Vous pouvez utiliser l’extrait de code suivant pour charger le modèle et évaluer les points de données.

Python
model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)

En alternative, vous pouvez exporter le modèle en tant que UDF Apache Spark pour l’utiliser pour l’évaluation sur un cluster Spark, soit en tant que Job batch, soit en tant que Job Spark streaming en temps réel.

Python
# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())

Log model dependencies

Pour charger un modèle avec précision, vous devez vous assurer que les dépendances du modèle sont chargées avec les bonnes versions dans l'environnement du notebook. Dans Databricks Runtime 10.5 ML et versions supérieures, MLflow vous avertit si une incompatibilité est détectée entre l'environnement actuel et les dépendances du modèle.

Des fonctionnalités supplémentaires pour simplifier la restauration des dépendances de modèle sont incluses dans Databricks Runtime 11.0 ML et versions ultérieures. Dans Databricks Runtime 11.0 ML et versions ultérieures, pour les modèles de saveur pyfunc, vous pouvez appeler mlflow.pyfunc.get_model_dependencies pour récupérer et download les dépendances du modèle. Cette fonction renvoie un chemin d'accès au fichier de dépendances que vous pouvez ensuite installer en utilisant %pip install <file-path>. Lorsque vous chargez un modèle en tant que PySpark UDF, spécifiez env_manager="virtualenv" dans l'appel mlflow.pyfunc.spark_udf. Ceci restaure les dépendances du modèle dans le contexte de la PySpark UDF et n'affecte pas l'environnement extérieur.

Vous pouvez également utiliser cette fonctionnalité dans Databricks Runtime 10.5 ou antérieur en installant manuellement MLflow version 1.25.0 ou ultérieure:

Python
%pip install "mlflow>=1.25.0"

Pour plus d'information sur la façon d'enregistrer les dépendances de modèle (Python et non-Python) et les artefacts, consultez Enregistrer les dépendances de modèle.

Découvrez comment enregistrer les dépendances de modèle et les artefacts personnalisés pour le déploiement de modèles :

Extraits de code générés automatiquement dans l'interface utilisateur MLflow

Lorsque vous log un modèle dans un notebook Databricks, Databricks génère automatiquement des extraits de code que vous pouvez copier et utiliser pour charger et exécuter le modèle. Pour afficher ces extraits de code :

  1. Accédez à l'écran Exécutions pour l'exécution qui a généré le modèle. (Consultez Afficher l'expérimentation du Notebook pour savoir comment afficher l'écran Exécutions.)
  2. Faites défiler jusqu'à la section **Artefacts**.
  3. Cliquez sur le nom du modèle enregistré. Un panneau s’ouvre à droite, affichant le code que vous pouvez utiliser pour charger le modèle journalisé et faire des prédictions sur les DataFrames Spark ou pandas.

Extraits de code du panneau d&#39;artefact

Exemples

Pour des exemples de journalisation de modèles, consultez les exemples dans Exemples de suivi des exécutions d'entraînement de machine learning.

Enregistrer les modèles dans le Model Registry

Vous pouvez enregistrer des modèles dans le MLflow Model Registry, un magasin de modèles centralisé qui fournit une interface utilisateur et un ensemble d'APIs pour gérer le cycle de vie complet des modèles MLflow. Pour obtenir des instructions sur la façon d'utiliser le Model Registry pour gérer les modèles dans Databricks Unity Catalog, consultez Gérer le cycle de vie du modèle dans Unity Catalog. Pour utiliser le Workspace Model Registry, consultez Gérer le cycle de vie du modèle à l'aide du Workspace Model Registry (hérité).

Lorsque les modèles créés avec MLflow 3 sont enregistrés dans le registre de modèles Unity Catalog, vous pouvez consulter des données telles que les paramètres et les métriques à un emplacement central, pour toutes les expérimentations et tous les Workspace. Pour plus d'informations, consultez les améliorations de Model Registry avec MLflow 3.

Pour enregistrer un modèle à l'aide de l'API, utilisez la commande suivante :

Python
mlflow.register_model("models:/{model_id}", "{registered_model_name}")

Enregistrer les modèles dans les volumes Unity Catalog

Pour enregistrer un modèle localement, utilisez mlflow.<model-type>.save_model(model, modelpath). modelpath doit être un chemin d'accès Unity Catalog volumes. Par exemple, si vous utilisez un emplacement Unity Catalog volumes /Volumes/catalog_name/schema_name/volume_name/my_project_models pour stocker le travail de votre projet, vous devez utiliser le chemin du modèle /Volumes/catalog_name/schema_name/volume_name/my_project_models:

Python
modelpath = "/Volumes/catalog_name/schema_name/volume_name/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)

Pour les modèles MLlib, utilisez les Pipelines de ML.

download model artifacts

Vous pouvez download les artefacts de modèle Log (tels que les fichiers de modèle, les graphiques et les métriques) pour un modèle enregistré à l’aide de diverses APIs.

API Python exemple :

Python
mlflow.set_registry_uri("databricks-uc")
mlflow.artifacts.download_artifacts(f"models:/{model_name}/{model_version}")

API Java exemple :

Java
MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);

// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);

commande CLI exemple :

mlflow artifacts download --artifact-uri models:/<name>/<version|stage>

Déployer des modèles pour la diffusion en ligne

remarque

Avant de déployer votre modèle, il est bénéfique de vérifier que le modèle est capable d'être servi. Consultez la documentation MLflow pour savoir comment utiliser mlflow.models.predict afin de valider les modèles avant le déploiement.

Utilisez Model Serving pour héberger des modèles de machine learning enregistrés dans le registre de modèles Unity Catalog en tant qu'endpoints REST. Ces Endpoint sont mis à jour automatiquement en fonction de la disponibilité des versions des modèles.