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.

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:

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.