Leitlinien für die Bereitstellung von MLflow-Modellen
GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)
In diesem Artikel Sie mehr darüber, wie Sie MLflow-Modelle in Azure Machine Learning sowohl für Echtzeit- als auch für Batchrückschlüsse bereitstellen. Außerdem werden verschiedene Tools vorgestellt, mit denen Sie die Bereitstellungen verwalten können.
Bereitstellung ohne Code
Beim Bereitstellen von MLflow-Modellen in Azure Machine Learning müssen Sie im Gegensatz zur Bereitstellung von benutzerdefinierten Modellen kein Bewertungsskript und keine Umgebung bereitstellen. Azure Machine Learning generiert automatisch das Bewertungsskript und die Umgebung für Sie. Diese Funktion wird als No-Code-Bereitstellung bezeichnet.
Bei einer Bereitstellung ohne Code übernimmt Azure Machine Learning diese Aufgaben:
- Es stellt sicher, dass alle im MLflow-Modell angegebenen Paketabhängigkeiten erfüllt sind.
- Es stellt ein MLflow-Basisimage/eine zusammengestellte Umgebung bereit, das/die folgende Elemente enthält:
- Pakete, die für Azure Machine Learning zum Ermöglichen von Rückschlüssen erforderlich sind, einschließlich
mlflow-skinny
. - Ein Bewertungsskript zum Durchführen eines Rückschlusses.
- Pakete, die für Azure Machine Learning zum Ermöglichen von Rückschlüssen erforderlich sind, einschließlich
Tipp
Arbeitsbereiche ohne zugriff auf öffentliche Netzwerke: Bevor Sie MLflow-Modelle für Onlineendpunkte ohne Übergabekonnektivität bereitstellen können, müssen Sie die Modelle verpacken (Vorschau). Durch die Verwendung von Modellverpackungen können Sie die Notwendigkeit einer Internetverbindung vermeiden, die sonst erforderlich wäre, um die erforderlichen Python-Pakete für die MLflow-Modelle dynamisch zu installieren.
Pakete und Abhängigkeiten
Azure Machine Learning generiert automatisch Umgebungen zum Ermöglichen von Rückschlüssen auf MLflow-Modelle. Um die Umgebungen zu erstellen, liest Azure Machine Learning die Conda-Abhängigkeiten, die im MLflow-Modell angegeben sind, und fügt alle Pakete hinzu, die zum Ausführen des Rückschlussservers erforderlich sind. Diese zusätzlichen Pakete variieren je nach Bereitstellungstyp.
Die folgende Beispieldatei conda.yaml zeigt Conda-Abhängigkeiten, die in einem MLflow-Modell angegeben sind.
channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
- mlflow==2.7.1
- cloudpickle==1.6.0
- dataclasses==0.6
- lz4==4.0.0
- numpy==1.23.5
- packaging==23.0
- psutil==5.9.0
- pyyaml==6.0
- scikit-learn==1.1.2
- scipy==1.10.1
- uuid==1.30
name: mlflow-env
Wichtig
MLflow erkennt automatisch Pakete beim Protokollieren eines Modells und heftet die Paketversionen in den Conda-Abhängigkeiten des Modells an. Diese automatische Paketerkennung spiegelt möglicherweise nicht Ihre Absichten oder Anforderungen wider. Sie können alternativ Modelle mit benutzerdefinierten Signaturen, Umgebungen oder Beispielen protokollieren.
Modelle mit Signaturen
MLflow-Modelle können eine Signatur enthalten, die die erwarteten Eingaben und deren Typen angibt. Wenn solche Modelle für Online- oder Batchendpunkte bereitgestellt werden, stellt Azure Machine Learning sicher, dass die Anzahl und die Typen der Dateneingaben der Signatur entsprechen. Wenn die Eingabedaten nicht wie erwartet geparst werden können, schlägt der Aufruf des Modells fehl.
Sie können eine MLflow-Modellsignatur überprüfen, indem Sie die MLmodel-Datei öffnen. Weitere Informationen dazu, wie Signaturen in MLflow funktionieren, finden Sie unter Signaturen in MLflow.
In der folgenden MLmodel-Beispieldatei ist signature
hervorgehoben.
artifact_path: model
flavors:
python_function:
env:
conda: conda.yaml
virtualenv: python_env.yaml
loader_module: mlflow.sklearn
model_path: model.pkl
predict_fn: predict
python_version: 3.10.11
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
{"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
"s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
"double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
{"name": "s6", "type": "double"}]'
outputs: '[{"type": "double"}]'
Tipp
Signaturen in MLflow-Modellen werden empfohlen, da sie eine bequeme Möglichkeit bieten, Datenkompatibilitätsprobleme zu erkennen. Weitere Informationen zum Protokollieren von Modellen mit Signaturen finden Sie unter Protokollierungsmodelle mit einer benutzerdefinierten Signatur, Umgebung oder Beispielen.
Bereitstellung auf dem integrierten MLflow-Server im Vergleich zur Bereitstellung auf dem Azure Machine Learning-Rückschlussserver
Modellentwickler können integrierte MLflow-Bereitstellungstools verwenden, um Modelle lokal zu testen. Sie können beispielsweise eine lokale Instanz eines Modells, das in der MLflow-Serverregistrierung registriert ist, mithilfe von mlflow models serve
oder der MLflow CLI mlflow models predict
ausführen. Weitere Informationen zu integrierten MLflow-Bereitstellungstools finden Sie in der MLflow-Dokumentation unter integrierten Bereitstellungstools.
Azure Machine Learning unterstützt zudem die Modellbereitstellung sowohl für Online- als auch für Batchendpunkte. Diese Endpunkte führen unterschiedliche Rückschlusstechnologien aus, die unterschiedliche Features aufweisen können.
Azure Machine Learning-Onlineendpunkte ähneln dem integrierten MLflow-Server und bieten eine skalierbare, synchrone und einfache Möglichkeit, Modelle für Rückschlüsse auszuführen.
Azure Machine Learning-Batchendpunkte können asynchrone Rückschlüsse bei zeitintensiven Rückschlussprozessen ausführen, die auf große Datenmengen skaliert werden können. Dem MLflow-Server fehlt diese Funktion, obwohl Sie eine ähnliche Leistung mithilfe von Spark-Aufträgen erreichen können. Weitere Informationen zu Batchendpunkten und MLflow-Modellen finden Sie unter Verwenden von MLflow-Modellen in Batchbereitstellungen.
Eingabeformate
In der folgenden Tabelle sind die Eingabetypen aufgeführt, die vom integrierten MLflow-Server und von Azure Machine Learning-Onlineendpunkten unterstützt werden.
Eingabetyp | Integrierter MLflow-Server | Azure Machine Learning-Onlineendpunkt |
---|---|---|
JSON-serialisierte Pandas-Dataframes in der geteilten Ausrichtung | ✓ | ✓ |
JSON-serialisierte Pandas-Dataframes in der Datensatzausrichtung | Als veraltet markiert | |
CSV-serialisierte Pandas-Dataframes | ✓ | Verwenden von Batchrückschlüssen. Weitere Informationen finden Sie unter Bereitstellen von MLflow-Modellen in Batch-Endpunkten. |
TensorFlow-Eingabe als JSON-serialisierte Listen (Tensors) und Wörterbuch von Listen (benannte Tensoren) | ✓ | ✓ |
TensorFlow-Eingabe mit der TensorFlow-Bereitstellungs-API | ✓ |
Die folgenden Abschnitte konzentrieren sich auf MLflow-Modelle, die für Azure Machine Learning-Onlineendpunkte bereitgestellt werden.
Eingabestruktur
Unabhängig vom Eingabetyp erfordert Azure Machine Learning, dass Eingaben in einer JSON-Nutzlast im Wörterbuchschlüssel input_data
bereitgestellt werden. Dieser Schlüssel ist bei Verwendung des Befehls mlflow models serve
zum Bereitstellen von Modellen nicht erforderlich. Daher können Nutzlasten nicht austauschbar für Azure Machine Learning-Onlineendpunkte und den integrierten MLflow-Server verwendet werden.
Wichtig
Die Nutzlaststruktur wurde in MLflow 2.0 geändert.
Die folgenden Nutzlastbeispiele zeigen die Unterschiede zwischen einem Modell, das auf dem integrierten MLflow-Server bereitgestellt wird, und dem Azure Machine Learning-Rückschlussserver.
JSON-serialisierter Pandas-DataFrame in der geteilten Ausrichtung
{
"input_data": {
"columns": [
"age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
],
"index": [1],
"data": [
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
}
Tensoreingabe
{
"input_data": [
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
Eingabe mit benannten Tensoren
{
"input_data": {
"tokens": [
[0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
],
"mask": [
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
}
}
Rückschlussanpassung für MLflow-Modelle
Bewertungsskripts passen die Ausführung von Rückschlüssen für benutzerdefinierte Modelle an. Bei der Bereitstellung von MLflow-Modellen wird jedoch die Entscheidung über die Ausführung von Rückschlüssen vom Modell-Generator und nicht vom Bereitstellungstechniker getroffen. Jedes Modellframework kann automatisch bestimmte Rückschlussroutinen anwenden.
Wenn Sie ändern müssen, wie der Rückschluss für ein MLflow-Modell ausgeführt wird, können Sie einen der folgenden Schritte ausführen:
- Ändern Sie, wie Ihr Modell in der Trainingsroutine protokolliert wird.
- Passen Sie das Rückschließen mit einem Bewertungsskript zur Bereitstellungszeit an.
Ändern der Protokollierung Ihres Modells während des Trainings
Wenn Sie ein Modell entweder mit mlflow.autolog
oder mlflow.<flavor>.log_model
protokollieren, bestimmt die für das Modell verwendete Variante, wie ein Rückschluss ausgeführt werden soll und welche Ergebnisse zurückgegeben werden sollen. MLflow erzwingt kein bestimmtes Verhalten hinsichtlich der Art und Weise, wie die predict()
-Funktion Ergebnisse generiert.
In einigen Fällen sollten Sie jedoch vor und nach der Ausführung des Modells einige Vorverarbeitungen oder Nachbearbeitungen durchführen. Oder Sie möchten möglicherweise ändern, was zurückgegeben wird, z. B. Wahrscheinlichkeiten anstelle von Klassen. Eine Lösung besteht darin, Machine Learning-Pipelines zu implementieren, die direkt von Eingaben zu Ausgaben wechseln.
Beispielsweise sind sklearn.pipeline.Pipeline
oder pyspark.ml.Pipeline
beliebte Methoden zum Implementieren von Pipelines und werden manchmal aus Leistungsgründen empfohlen. Sie können auch anpassen, wie Ihr Modell Rückschlüsse ausführt, indem Sie benutzerdefinierte Modelle protokollieren.
Anpassen des Rückschlusses mit einem Bewertungsskript
Obwohl MLflow-Modelle kein Bewertungsskript benötigen, können Sie bei Bedarf dennoch eines bereitstellen, um die Rückschlussausführung für MLflow-Modell anzupassen. Weitere Informationen zum Anpassen der Rückschlüsse finden Sie unter Anpassen von MLflow-Modellbereitstellungen für Onlineendpunkte und Anpassen der Modellimplementierungen mithilfe eines Bewertungsskripts für Batchendpunkte.
Wichtig
Wenn Sie ein Bewertungsskript für eine MLflow-Modellbereitstellung angeben möchten, müssen Sie auch eine Umgebung für die Bereitstellung bereitstellen.
Bereitstellungstools
Azure Machine Learning bietet die folgenden Tools zum Bereitstellen von MLflow-Modellen für Online- und Batchendpunkte:
- MLflow SDK
- Azure Machine Learning CLI v2
- Azure Machine Learning SDK for Python
- Azure Machine Learning Studio
Jedes Tool verfügt über unterschiedliche Funktionen, insbesondere in Bezug auf den Computetyp, der als Ziel verwendet werden kann. In der folgenden Tabelle wird die Unterstützung für verschiedene MLflow-Bereitstellungsszenarien gezeigt.
Szenario | MLflow SDK | Azure Machine Learning CLI/SDK oder Studio |
---|---|---|
Bereitstellen für verwaltete Onlineendpunkte1 | Unterstützt. Siehe Progressiver Rollout von MLflow-Modellen für Onlineendpunkte | Unterstützt. Siehe Bereitstellen von MLflow-Modellen für Onlineendpunkte |
Bereitstellen für verwaltete Onlineendpunkte mit einem Bewertungsskript | Nicht unterstützt3 | Unterstützt. Siehe Anpassen von MLflow-Modellbereitstellungen |
In Batch-Endpunkten bereitstellen | Nicht unterstützt3 | Unterstützt. Siehe Verwenden von MLflow-Modellen in Batchbereitstellungen |
Bereitstellen für Batchendpunkte mit einem Bewertungsskript | Nicht unterstützt3 | Unterstützt. Siehe Anpassen der Modellimplementierungen mithilfe eines Bewertungsskripts |
Bereitstellen in Webdiensten wie Azure Container Instances oder Azure Kubernetes Service (AKS) | Legacyunterstützung2 | Nicht unterstützt2 |
Bereitstellen in Webdiensten wie Container Instances oder AKS mit einem Bewertungsskript | Nicht unterstützt3 | Legacyunterstützung2 |
1 Bereitstellung für Onlineendpunkte, die sich in Arbeitsbereichen mit aktivierter privater Verknüpfung befinden, erfordert, dass Sie Modelle vor der Bereitstellung packen (Vorschau).
2 Wechseln Sie nach Möglichkeit zu verwalteten Onlineendpunkten.
3 MLflow (Open-Source) verfügt nicht über das Konzept eines Bewertungsskripts und unterstützt keine Batchausführung.
Auswählen eines Bereitstellungstools
Verwenden Sie in folgenden Fällen das MLflow SDK:
- Sie sind mit MLflow vertraut und möchten weiterhin dieselben Methoden verwenden.
- Sie verwenden eine Plattform wie Azure Databricks, die MLflow nativ unterstützt.
Verwenden Sie in folgenden Fällen die Azure Machine Learning CLI v2 oder das SDK für Python:
- Sie sind mit diesen Tools vertraut.
- Sie möchten die Bereitstellung mit Pipelines automatisieren.
- Sie möchten die Bereitstellungskonfiguration in einem Git-Repository beibehalten.
Verwenden Sie die Benutzeroberfläche von Azure Machine Learning Studio, wenn Sie mit MLflow trainierte Modelle schnell bereitstellen und testen möchten.