Freigeben über


Protokollieren von Modellabhängigkeiten

In diesem Artikel erfahren Sie, wie Sie ein Modell und seine Abhängigkeiten als Modellartefakte protokollieren, sodass sie in Ihrer Umgebung für Produktionsaufgaben wie die Modellbereitstellung verfügbar sind.

Protokollieren von Python-Paketmodellabhängigkeiten

MLflow unterstützt nativ einige Python ML-Bibliotheken und kann Abhängigkeiten für Modelle zuverlässig protokollieren, die diese Bibliotheken verwenden. Weitere Informationen finden Sie unter Integrierte Modellvarianten.

MLflow unterstützt beispielsweise scikit-learn im Modul mlflow.sklearn, und der Befehl mlflow.sklearn.log_model protokolliert die sklearn-Version. Dasselbe gilt für die automatische Protokollierung bei diesen ML-Bibliotheken. Weitere Beispiele finden Sie im MLflow GitHub-Repository.

Hinweis

Zum Aktivieren der Ablaufprotokollierung für generative KI-Workloads unterstützt MLflow die OpenAI-Autoprotokollierung.

Für ML-Bibliotheken, die mit pip install PACKAGE_NAME==VERSION installiert werden können, aber über keine integrierten MLflow-Modellvarianten verfügen, können Sie diese Pakete mithilfe der mlflow.pyfunc.log_model-Methode protokollieren. Achten Sie darauf, die Anforderungen mit der genauen Bibliotheksversion zu protokollieren, z. B. f"nltk=={nltk.__version__}" statt nur nltk.

mlflow.pyfunc.log_model unterstützt die Protokollierung für:

  • Öffentliche und benutzerdefinierte Bibliotheken, gepackt als Python-Eggs oder Python-Wheel-Dateien.
  • Öffentliche Pakete auf PyPI sowie privat gehostete Pakete auf Ihrem eigenen PyPI-Server.

MLflow versucht mithilfe von mlflow.pyfunc.log_model, die Abhängigkeiten automatisch abzuleiten. MLflow leitet die Abhängigkeiten mithilfe von mlflow.models.infer_pip_requirements ab und protokolliert sie als Modellartefakt in einer requirements.txt-Datei.

In älteren Versionen kann MLflow manchmal nicht alle Python-Anforderungen automatisch identifizieren, insbesondere wenn die Bibliothek keine integrierte Modellvariante ist. In diesen Fällen können Sie zusätzliche Abhängigkeiten mit dem Parameter extra_pip_requirements im Befehl log_model angeben. Sehen Sie sich ein Beispiel für die Verwendung des Parameters „extra_pip_requirements“ an.

Wichtig

Sie können auch sämtliche Anforderungen mit den Parametern conda_env und pip_requirements überschreiben. Davon wird jedoch im Allgemeinen abgeraten, da dies die Abhängigkeiten außer Kraft setzt, die MLflow automatisch erfassen würde. Sehen Sie sich ein Beispiel für die Verwendung des pip_requirements-Parameters zum Überschreiben von Anforderungen an.

Benutzerdefinierte Modellprotokollierung

Für Szenarien, in denen eine stärker angepasste Modellprotokollierung erforderlich ist, haben Sie folgende Möglichkeiten:

Benutzerdefinierter Python-Code

Möglicherweise verfügen Sie über Python-Codeabhängigkeiten, die nicht mithilfe des %pip install-Befehls installiert werden können, z. B. eine oder mehrere .py-Dateien.

Beim Protokollieren eines Modells können Sie MLflow mitteilen, dass das Modell diese Abhängigkeiten unter einem angegebenen Pfad finden kann, indem Sie den code_path-Parameter in mlflow.pyfunc.log_model verwenden. MLflow speichert alle Dateien oder Verzeichnisse, die mithilfe von code_path als Artefakte übergeben werden, zusammen mit dem Modell in einem Codeverzeichnis. Beim Laden des Modells fügt MLflow diese Dateien oder Verzeichnisse zum Python-Pfad hinzu. Diese Route funktioniert auch mit benutzerdefinierten Python-Wheel-Dateien, die mithilfe von code_path wie .py-Dateien in das Modell eingeschlossen werden können.

mlflow.pyfunc.log_model( artifact_path=artifact_path,
                         code_path=[filename.py],
                         data_path=data_path,
                         conda_env=conda_env,
                       )

Protokollieren von Nicht-Python-Paketmodellabhängigkeiten

MLflow erfasst nicht automatisch Nicht-Python-Abhängigkeiten, z. B. Java-, R- und native Pakete (beispielsweise Linux-Pakete). Für diese Pakete müssen Sie zusätzliche Daten protokollieren.

  • Abhängigkeitsliste: Databricks empfiehlt die Protokollierung eines Artefakts mit dem Modell, das diese Nicht-Python-Abhängigkeiten angibt. Dies kann eine einfache .txt- oder .json-Datei sein. mit mlflow.pyfunc.log_model erlaubt es Ihnen, dieses zusätzliche Artefakt mithilfe des artifacts-Arguments anzugeben.
  • Benutzerdefinierte Pakete: Genau wie bei benutzerdefinierten Python-Abhängigkeiten (siehe oben) müssen Sie sicherstellen, dass die Pakete in Ihrer Bereitstellungsumgebung verfügbar sind. Stellen Sie für Pakete, die sich an einem zentralen Speicherort wie Maven Central oder in Ihrem eigenen Repository befinden, sicher, dass der Speicherort zum Zeitpunkt der Bewertung oder Bereitstellung verfügbar ist. Private Pakete, die nicht an anderer Stelle gehostet werden, können Sie zusammen mit dem Modell als Artefakte protokollieren.

Bereitstellen von Modellen mit Abhängigkeiten

Wenn Sie ein Modell über den MLflow-Nachverfolgungsserver oder die Modellregistrierung bereitstellen, müssen Sie sicherstellen, dass in der Bereitstellungsumgebung die richtigen Abhängigkeiten installiert sind. Der einfachste Weg hängt möglicherweise von Ihrem Bereitstellungsmodus – Batch/Streaming oder Onlinebereitstellung – sowie von den Abhängigkeitstypen ab.

Databricks empfiehlt für sämtliche Bereitstellungsmodi die Ausführung von Rückschlüssen auf derselben Laufzeitversion, die Sie während des Trainings verwendet haben, da in der Databricks Runtime, in der Sie Ihr Modell erstellt haben, bereits verschiedene Bibliotheken installiert sind. MLflow in Databricks speichert diese Laufzeitversion automatisch in der Metadatendatei MLmodel in einem databricks_runtime-Feld wie databricks_runtime: 10.2.x-cpu-ml-scala2.12 ab.

Onlinebereitstellung: Mosaic AI Model Serving

Databricks bietet eine Modellbereitstellung, bei der Ihre Machine Learning-Modelle mithilfe von MLflow als skalierbare REST-API-Endpunkte verfügbar gemacht werden.

Was Python-Abhängigkeiten in der requirements.txt-Datei betrifft, verarbeiten Databricks und MLflow alles für öffentliche PyPI-Abhängigkeiten. Wenn Sie beim Protokollieren des Modells .py-Dateien oder Python-Wheel-Dateien mithilfe des code_path-Arguments angegeben haben, lädt MLflow diese Abhängigkeiten automatisch für Sie.

Informationen zu diesen Modellbereitstellungsszenarien finden Sie in den folgenden Artikeln:

Was Python-Abhängigkeiten in der requirements.txt-Datei betrifft, verarbeiten Databricks und MLflow alles für öffentliche PyPI-Abhängigkeiten. Wenn Sie beim Protokollieren des Modells .py-Dateien oder Python-Wheel-Dateien mithilfe des code_path-Arguments angegeben haben, lädt MLflow diese Abhängigkeiten automatisch für Sie.

Onlinebereitstellung: Drittanbietersysteme oder Docker-Container

Wenn Ihr Szenario die Bereitstellung für Bereitstellungslösungen von Drittanbietern oder Ihre eigene Docker-basierte Lösung erfordert, können Sie Ihr Modell als Docker-Container exportieren.

Databricks empfiehlt für die Bereitstellung von Drittanbietersystemen, die Python-Abhängigkeiten automatisch verarbeiten, Folgendes. Für Nicht-Python-Abhängigkeiten muss der Container jedoch so geändert werden, dass er sie einschließt.

Batch- und Streamingaufträge

Batch- und Streamingbewertung sollten als Databricks-Aufträge ausgeführt werden. Ein Notebookauftrag reicht oft aus, und die einfachste Möglichkeit zum Vorbereiten von Code besteht darin, die Databricks-Modellregistrierung zum Generieren eines Bewertungsnotebooks zu verwenden.

Nachfolgend werden der Prozess und die erforderlichen Schritte beschrieben, um sicherzustellen, dass Abhängigkeiten entsprechend installiert und angewendet werden:

  1. Starten Sie Ihren Bewertungscluster mit derselben Databricks Runtime-Version, die während des Trainings verwendet wurde. Lesen Sie das Feld databricks_runtime aus der Metadatendatei MLmodel aus, und starten Sie einen Cluster mit dieser Laufzeitversion.

    • Dies kann manuell in der Clusterkonfiguration oder automatisiert mithilfe einer benutzerdefinierten Logik erfolgen. Zur Automatisierung das Laufzeitversionsformat, das Sie aus der Metadatendatei in der Auftrags-API und Cluster-API auslesen.
  2. Installieren Sie als Nächstes alle Nicht-Python-Abhängigkeiten. Um sicherzustellen, dass Ihre Nicht-Python-Abhängigkeiten in Ihrer Bereitstellungsumgebung zugänglich sind, haben Sie folgende Möglichkeiten:

    • Installieren Sie die Nicht-Python-Abhängigkeiten Ihres Modells manuell im Databricks-Cluster als Teil der Clusterkonfiguration, bevor Sie den Rückschluss ausführen.
    • Alternativ können Sie eine benutzerdefinierte Logik in die Bereitstellung des Bewertungsauftrags schreiben, um die Installation der Abhängigkeiten in Ihrem Cluster zu automatisieren. Angenommen, Sie haben Ihre Nicht-Python-Abhängigkeiten als Artefakte gespeichert, wie unter Protokollieren von Nicht-Python-Paketmodellabhängigkeiten beschrieben wurde, kann diese Automatisierung Bibliotheken mithilfe der Bibliotheken-API installieren. Alternativ können Sie spezifischen Code schreiben, um ein Initialisierungsskript im Clusterbereich zum Installieren der Abhängigkeiten zu generieren.
  3. Ihr Bewertungsauftrag installiert die Python-Abhängigkeiten in der Auftragsausführungsumgebung. In Databricks können Sie mithilfe der Modellregistrierung ein Notebook für Rückschlüsse generieren, das dies für Sie erledigt.

    • Wenn Sie die Databricks-Modellregistrierung zum Generieren eines Bewertungsnotebooks verwenden, enthält das Notebook Code zum Installieren der Python-Abhängigkeiten in der requirements.txt-Datei des Modells. Für Ihren Notebookauftrag (Batch- oder Streamingbewertung) initialisiert dieser Code Ihre Notebookumgebung, sodass die Modellabhängigkeiten installiert sind und für Ihr Modell zur Verfügung stehen.
  4. MLflow verarbeitet jeden benutzerdefinierten Python-Code, der im code_path-Parameter von log_model enthalten ist. Dieser Code wird dem Python-Pfad hinzugefügt, wenn die -predict()-Methode des Modells aufgerufen wird. Sie können dies auch manuell tun, indem Sie eine der folgenden Aktionen ausführen:

    Hinweis

    Wenn Sie beim Protokollieren des Modells .py-Dateien oder Python-Wheel-Dateien mithilfe des code_path-Arguments angegeben haben, lädt MLflow diese Abhängigkeiten automatisch für Sie.