Freigeben über


Validierung vor der Bereitstellung von Modellen

Die Anleitung in diesem Artikel kann Ihnen helfen, Probleme mit Ihrem Modell abzufangen, bevor Sie auf den Endpunktbereitstellungsprozess warten. Databricks empfiehlt, diese Validierungsschritte zu durchlaufen, um eine bessere Entwicklungserfahrung bei der Verwendung von Modellbereitstellungen zu gewährleisten.

Testen von Vorhersagen vor der Bereitstellung

Testen Sie Offline-Vorhersagen in einer virtuellen Umgebung mit mlflow.models.predict und Eingabebeispielen, bevor Sie Ihr Modell auf den Bereitstellungsendpunkt bereitstellen. MLflow stellt Validierungs-APIs bereit, die die Bereitstellungsumgebung simulieren und das Testen geänderter Abhängigkeiten ermöglichen.

Es gibt zwei Optionen für die Überprüfung vor der Bereitstellung: die MLflow Python-API und die MLflow CLI. Ausführlichere Anleitungen finden Sie in der MLflow-Dokumentation zu Testvorhersagen .

Sie können die folgenden Parameter angeben:

  • Die model_uri des Modells, das für die Modellverwaltung bereitgestellt wird.
  • Eins der folgenden:
    • Die input_data im erwarteten Format für den mlflow.pyfunc.PyFuncModel.predict()-Aufruf des Modells.
    • Den input_path, der eine Datei mit Eingabedaten definiert, die geladen und für den Aufruf von predict verwendet werden.
  • Den content_type im csv- oder json-Format.
  • Einen optionalen output_path zum Schreiben der Vorhersagen in eine Datei. Wenn Sie diesen Parameter weglassen, werden die Vorhersagen in stdout geschrieben.
  • Ein Umgebungsmanager, env_manager, der zum Erstellen der Umgebung für die Bereitstellung verwendet wird:
    • Der Standardwert lautet virtualenv. Empfohlen für die Überprüfung.
    • local ist verfügbar, aber möglicherweise fehleranfällig für die Überprüfung. Wird in der Regel nur für schnelles Debuggen verwendet.
  • Ob die aktuelle Version von MLflow, die sich in Ihrer Umgebung befindet, mit der virtuellen Umgebung über install_mlflow installiert werden soll. Diese Einstellung ist standardmäßig auf False festgelegt.
  • Ob Sie verschiedene Versionen von Paketabhängigkeiten zur Problembehandlung oder Fehlersuche aktualisieren und testen möchten. Sie können dies als Liste von Zeichenfolgenabhängigkeiten angeben, die Sie mit dem Override-Argument pip_requirements_override überschreiben oder hinzufügen.

Beispiel:

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"],
)

Aktualisieren von Modellabhängigkeiten

Wenn Probleme mit den mit einem protokollierten Modell angegebenen Abhängigkeiten auftreten, können Sie die Anforderungen mithilfe der MLflow CLI oder mlflow.models.model.update_model_requirements() in der MLflow Python-API aktualisieren, ohne ein anderes Modell protokollieren zu müssen.

Im folgenden Beispiel wird gezeigt, wie das pip_requirements.txt eines protokollierten Modells direkt aktualisiert wird.

Sie können vorhandene Definitionen mit angegebenen Paketversionen aktualisieren oder der Datei pip_requirements.txt nicht vorhandene Anforderungen hinzufügen. Diese Datei befindet sich im MLflow-Modellartefakt am angegebenen Speicherort 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"],
)

Überprüfen der Modelleingabe vor der Bereitstellung

Das Modell, das Endpunkte bedient, erwartet ein spezielles FORMAT der JSON-Eingabe. Sie können überprüfen, ob Ihre Modelleingabe auf einem Dienendpunkt funktioniert, indem Sie vor der Bereitstellung validate_serving_input in MLflow verwenden.

Im Folgenden finden Sie ein Beispiel für den automatisch generierten Code auf der Registerkarte "Artefakte" der Ausführung, wenn das Modell mit einem gültigen Eingabebeispiel geladen wird.

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)

Sie können auch alle Eingabebeispiele für das protokollierte Modell testen, indem Sie die convert_input_example_to_serving_input API verwenden, um eine gültige JSON-Bereitstellungseingabe zu generieren.

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)

Manuelles Testen des Modells

Sie können das Bereitstellungsverhalten des Modells mithilfe der folgenden Schritte manuell testen:

  1. Öffnen Sie ein Notebook und fügen Sie es an einen Allzweckcluster an, der eine Databricks Runtime-Version verwendet, bei der es sich nicht um die Databricks Runtime für maschinelles Lernen handelt.
  2. Laden Sie das Modell mit MLflow und versuchen Sie, von dort aus zu debuggen.

Sie können das Modell auch lokal auf Ihrem PC laden und von dort aus debuggen. Gehen Sie zum lokalen Laden Ihres Modells folgendermaßen vor:

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)