Validation avant déploiement pour Model Serving
Les conseils de cet article peuvent vous aider à confirmer que votre modèle et toutes ses dépendances sont compatibles avec l'environnement de service avant de le déployer, afin que vous puissiez détecter les problèmes pendant le développement au lieu d'attendre le processus de déploiement de l'endpoint. Databricks vous recommande de suivre ces étapes de validation pour garantir une meilleure expérience de développement lors de l'utilisation du service de modèles. Start par tester les prédictions, le moyen le plus direct de confirmer que votre modèle et ses dépendances fonctionnent dans un environnement qui simule le service.
Tester les prédictions avant le déploiement
Avant de déployer votre modèle sur le endpoint de mise en service, testez les prédictions hors ligne avec un environnement virtuel à l'aide de mlflow.models.predict et d'exemples d'entrée. MLflow fournit des APIs de validation qui simulent l'environnement de déploiement et permettent de tester les dépendances modifiées. Avec le env_manager="virtualenv" default, MLflow reconstruit les dépendances enregistrées de votre modèle dans un environnement isolé qui simule l’environnement d’exécution de service, de sorte qu’une dépendance manquante, en conflit avec un autre package ou impossible à installer apparaît ici au lieu de lors du déploiement de l’Endpoint.
Il existe deux options de validation pré-déploiement : l'API Python MLflow et la CLI MLflow. Consultez la documentation MLflow sur le test des prédictions pour des conseils plus détaillés.
Vous pouvez spécifier les paramètres suivants :
-
Le
model_uridu modèle qui est déployé vers Model Serving. -
L'un des éléments suivants :
- Le
input_datadans le format attendu pour l'appelmlflow.pyfunc.PyFuncModel.predict()du modèle. - Le
input_pathqui définit un fichier contenant des données d'entrée qui seront chargées et utilisées pour l'appel àpredict.
- Le
-
Le
content_typeau formatcsvoujson. -
Un
output_pathfacultatif pour écrire les prédictions dans un fichier. Si vous omettez ce parameter, les prédictions sont imprimées dansstdout. -
Un gestionnaire d'environnement,
env_manager, utilisé pour construire l'environnement de déploiement :- La default est
virtualenv. Recommandé pour la validation du serving. localest disponible, mais potentiellement sujette aux erreurs pour la validation de service. Généralement utilisé uniquement pour le debugging rapide.
- La default est
-
Détermine s'il faut installer la version actuelle de MLflow présente dans votre environnement avec l'environnement virtuel utilisant
install_mlflow. Ce paramètre est défini par default surFalse. -
S'il faut mettre à jour et tester différentes versions des dépendances de package pour le dépannage ou le debugging. Vous pouvez spécifier cela comme une liste de remplacements ou d'ajouts de dépendances de chaîne à l'aide de l'argument de remplacement,
pip_requirements_override.
Par exemple :
import mlflow
run_id = "..."
model_uri = f"runs:/{run_id}/model"
mlflow.models.predict(
model_uri=model_uri,
input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
content_type="json",
env_manager="virtualenv",
install_mlflow=False,
pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)
Mettre à jour les dépendances du modèle
S’il y a des problèmes avec les dépendances spécifiées avec un modèle enregistré, vous pouvez mettre à jour les exigences en utilisant la CLI MLflow ou mlflow.models.model.update_model_requirements() dans l’API Python MLflow sans avoir à enregistrer un autre modèle.
L'exemple suivant montre comment mettre à jour le pip_requirements.txt d'un modèle journalisé en place.
Vous pouvez mettre à jour les définitions existantes avec des versions de package spécifiées ou ajouter des exigences inexistantes au fichier pip_requirements.txt. Ce fichier se trouve dans l'artefact du modèle MLflow à l'emplacement spécifié model_uri.
from mlflow.models.model import update_model_requirements
update_model_requirements(
model_uri=model_uri,
operation="add",
requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)
Valider l’entrée du modèle avant le déploiement
Les Endpoint de mise en service du modèle attendent un format d'entrée JSON spécial. Vous pouvez valider que l'entrée de votre modèle fonctionne sur un endpoint de service avant le déploiement en utilisant validate_serving_input dans MLflow.
Voici un exemple du code généré automatiquement dans le tab des artefacts de l'exécution si votre modèle est enregistré avec un exemple d'entrée valide.
from mlflow.models import validate_serving_input
model_uri = 'runs:/<run_id>/<artifact_path>'
serving_payload = """{
"messages": [
{
"content": "How many product categories are there?",
"role": "user"
}
]
}
"""
# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)
Vous pouvez également tester des exemples d'entrée par rapport au modèle enregistré en utilisant l'API convert_input_example_to_serving_input pour générer une entrée de service JSON valide.
from mlflow.models import validate_serving_input
from mlflow.models import convert_input_example_to_serving_input
model_uri = 'runs:/<run_id>/<artifact_path>'
# Define INPUT_EXAMPLE with your own input example to the model
# A valid input example is a data instance suitable for pyfunc prediction
serving_payload = convert_input_example_to_serving_input(INPUT_EXAMPLE)
# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)
Tester manuellement la mise à disposition du modèle
Vous pouvez tester manuellement le comportement de déploiement du modèle en suivant les étapes ci-dessous :
- Ouvrez un Notebook et attachez-le à un cluster polyvalent qui utilise une version de Databricks Runtime, et non Databricks Runtime for Machine Learning.
- Chargez le modèle à l'aide de MLflow et essayez le debugging à partir de là.
Vous pouvez également charger le modèle localement sur votre PC et le déboguer à partir de là. Chargez votre modèle localement en utilisant les éléments suivants :
import os
import mlflow
os.environ["MLFLOW_TRACKING_URI"] = "databricks://PROFILE"
ARTIFACT_URI = "model_uri"
if '.' in ARTIFACT_URI:
mlflow.set_registry_uri('databricks-uc')
local_path = mlflow.artifacts.download_artifacts(ARTIFACT_URI)
print(local_path)
conda env create -f local_path/artifact_path/conda.yaml
conda activate mlflow-env
mlflow.pyfunc.load_model(local_path/artifact_path)