Partager via


Validation de prédéploiement pour le service de modèle

Les conseils de cet article peuvent vous aider à détecter les problèmes liés à votre modèle avant d’attendre le processus de déploiement de point de terminaison. Databricks recommande d’effectuer ces étapes de validation pour garantir une meilleure expérience de développement lors de l’utilisation du service de modèle.

Tester les prédictions avant le déploiement

Avant de déployer votre modèle sur le point de terminaison de service, testez les prédictions hors connexion avec un environnement virtuel à l’aide mlflow.models.predict et des exemples d’entrée. MLflow fournit des API de validation qui simulent l’environnement de déploiement et autorisent le test des dépendances modifiées.

Il existe deux options de validation de prédéploiement : l’API Python MLflow et l’interface CLI MLflow. Consultez la documentation MLflow pour tester les prédictions pour obtenir des instructions plus détaillées.

Vous pouvez spécifier les paramètres suivants :

  • L’model_uri du modèle qui est déployé vers la mise en service de modèles.
  • L’une des opérations suivantes :
    • Les input_data au format attendu pour l’appel mlflow.pyfunc.PyFuncModel.predict() du modèle.
    • Le input_path qui définit un fichier contenant des données d’entrée chargées et utilisées pour l’appel à predict.
  • Le content_type au format csv ou json.
  • Un output_path facultatif pour écrire les prédictions dans un fichier. Si vous omettez ce paramètre, les prédictions sont imprimées dans stdout.
  • Un gestionnaire d’environnement, env_managerutilisé pour configurer l’environnement pour déployer :
    • La valeur par défaut est virtualenv. Recommandé pour la validation de la mise en service.
    • local est disponible, mais il est éventuellement sujet à erreurs pour la validation de la mise en service. Généralement utilisé uniquement pour un débogage rapide.
  • Pour décider d’installer la version actuelle de MLflow qui est dans votre environnement avec l’environnement virtuel en utilisant install_mlflow. Le paramètre a la valeur False par défaut.
  • Pour décider de mettre à jour et de tester différentes versions de dépendances de packages afin de résoudre des problèmes ou d’effectuer des débogages. Vous pouvez spécifier cet élément, car une liste de dépendances de chaîne effectue une action de remplacement ou d’ajout en tirant parti 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 de modèle

S’il existe des problèmes avec les dépendances spécifiées avec un modèle journalisé, vous pouvez mettre à jour les exigences à l’aide de l’interface CLI MLflow ou mlflow.models.model.update_model_requirements() dans l’API Python MLflow sans avoir à journaliser un autre modèle.

L’exemple suivant montre comment mettre à jour directement le pip_requirements.txt du modèle journalisé.

Vous pouvez mettre à jour des définitions existantes avec des versions de package spécifiées ou ajouter des exigences inexistantes dans le fichier pip_requirements.txt. Ce fichier se trouve au sein de l’artefact de modèle MLflow dans l’emplacement model_uri spécifié.

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 points de terminaison pour le service de modèles s’attendent à un format spécial d'entrées JSON. Vous pouvez vérifier que votre entrée de modèle fonctionne sur un point de terminaison de service avant le déploiement à l’aide validate_serving_input de MLflow.

Voici un exemple de code généré automatiquement dans l’onglet 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 sur le modèle journalisé à l’aide de 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 le service du modèle

Vous pouvez tester manuellement le comportement de service du modèle en procédant comme suit :

  1. Ouvrez un notebook et attachez-le à un cluster à usage général qui utilise une version Databricks Runtime, et non Databricks Runtime pour le Machine Learning.
  2. Chargez le modèle à l’aide de MLflow et essayez de déboguer à partir de là.

Vous pouvez également charger le modèle localement sur votre PC et déboguer à partir de là. Chargez votre modèle localement à l’aide des étapes suivantes :

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)