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:
- Schreiben Sie ein benutzerdefiniertes Python-Modell. Auf diese Weise können Sie eine
mlflow.pyfunc.PythonModel
-Unterklasse erstellen, um die Initialisierung und Vorhersage anzupassen. Dieser Ansatz eignet sich gut für die Anpassung reiner Python-Modelle.- Ein einfaches Beispiel finden Sie im Beispiel zum Hinzufügen eines N-Modells.
- Für ein komplexeres Beispiel können Sie das benutzerdefinierte XGBoost-Modellbeispiel heranziehen.
- Schreiben Sie eine benutzerdefinierte Variante. In diesem Szenario können Sie die Protokollierung über die generische
pyfunc
-Variante hinaus anpassen. Die Implementierung ist jedoch aufwendiger.
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 desartifacts
-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:
- Verwenden benutzerdefinierter Python-Bibliotheken mit der Modellbereitstellung
- Packen von benutzerdefinierten Artefakten und Dateien für die Modellbereitstellung
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.
Die Docker-Integration von MLflow für eine Docker-basierte Bereitstellungslösung: build-docker für MLflow-Modelle
Die MLflow-Integration von Azure Machine Learning:
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:
Starten Sie Ihren Bewertungscluster mit derselben Databricks Runtime-Version, die während des Trainings verwendet wurde. Lesen Sie das Feld
databricks_runtime
aus der MetadatendateiMLmodel
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.
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.
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.
- Wenn Sie die Databricks-Modellregistrierung zum Generieren eines Bewertungsnotebooks verwenden, enthält das Notebook Code zum Installieren der Python-Abhängigkeiten in der
MLflow verarbeitet jeden benutzerdefinierten Python-Code, der im
code_path
-Parameter vonlog_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:- Aufrufen von mlflow.pyfunc.spark_udf mit dem Argument
env_manager=['virtualenv'/'conda']
. - Extrahieren der Anforderungen mithilfe von mlflow.pyfunc.get_model_dependencies und Installieren dieser Anforderungen mithilfe von %pip install.
Hinweis
Wenn Sie beim Protokollieren des Modells
.py
-Dateien oder Python-Wheel-Dateien mithilfe descode_path
-Arguments angegeben haben, lädt MLflow diese Abhängigkeiten automatisch für Sie.- Aufrufen von mlflow.pyfunc.spark_udf mit dem Argument