Leitlinien für die Bereitstellung von MLflow-Modellen

GILT FÜR:Azure CLI-ML-Erweiterungv2 (aktuell)

In diesem Artikel Sie mehr darüber, wie Sie MLflow-Modell in Azure Machine Learning sowohl für Echtzeit- als auch für Batchrückschlüsse bereitstellen. Erfahren Sie auch mehr über die verschiedenen Tools, mit denen Sie die Bereitstellung verwalten können.

Bereitstellung von MLflow-Modellen im Vergleich zu benutzerdefinierten Modellen

Im Gegensatz zur Bereitstellung von benutzerdefinierten Modellen in Azure Machine Learning müssen Sie beim Bereitstellen von MLflow-Modellen in Azure Machine Learning kein Bewertungsskript oder eine Umgebung für die Bereitstellung bereitstellen. Stattdessen generiert Azure Machine Learning 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.

Python-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 conda.yaml-Datei zeigt ein Beispiel für Conda-Abhängigkeiten, die in einem MLflow-Modell angegeben sind.

conda.yaml

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

Warnung

MLflow erkennt automatisch Pakete beim Protokollieren eines Modells und heftet die Paketversionen in den Conda-Abhängigkeiten des Modells an. Diese automatische Paketerkennung spiegelt jedoch möglicherweise nicht immer Ihre Absichten oder Anforderungen wider. In solchen Fällen sollten Sie Protokollierungsmodelle mit einer benutzerdefinierten Conda-Abhängigkeitsdefinition in Betracht ziehen.

Auswirkungen der Verwendung von Modellen 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, erzwingt Azure Machine Learning, 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 die Modellsignatur eines MLflow-Modells überprüfen, indem Sie die MLmodel-Datei öffnen, die dem Modell zugeordnet ist. Weitere Informationen dazu, wie Signaturen in MLflow funktionieren, finden Sie unter Signaturen in MLflow.

Die folgende Datei zeigt die MLmodel-Datei, die einem MLflow-Modell zugeordnet ist.

MLmodel

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 sind optional, werden aber dringend empfohlen, da sie eine bequeme Möglichkeit bieten, Datenkompatibilitätsprobleme frühzeitig zu erkennen. Weitere Informationen zum Protokollieren von Modellen mit Signaturen finden Sie unter Protokollierungsmodelle mit einer benutzerdefinierten Signatur, Umgebung oder Beispielen.

In Azure Machine Learning bereitgestellte Modelle im Vergleich zu Modellen, die im integrierten MLflow-Server bereitgestellt werden

MLflow bietet integrierte Bereitstellungstools, mit denen Modellentwickler Modelle lokal testen können. Sie können z. B. eine lokale Instanz eines Modells mithilfe von mlflow models serve -m my_model ausführen, das in der MLflow-Serverregistrierung registriert ist, oder die MLflow CLI mlflow models predict verwenden.

Rückschließen mit Batch- und Onlineendpunkten

Azure Machine Learning unterstützt die Modellimplementierung sowohl für Online- als auch für Batch-Endpunkte. Diese Endpunkte führen unterschiedliche Rückschlusstechnologien aus, die unterschiedliche Features aufweisen können.

Online-Endpunkte ähneln dem integrierten MLflow-Server, indem sie eine skalierbare, synchrone und schlanke Möglichkeit bieten, Modelle für Rückschlüsse auszuführen.

Hingegen sind Batch-Endpunkte in der Lage asynchrone Rückschlüsse bei zeitintensiven Prozessen durchzuführen, die auf große Datenmengen skaliert werden können. Dem MLflow-Server fehlt derzeit diese Funktion, obwohl eine ähnliche Leistung mithilfe von Spark-Aufträgen erreicht werden kann. Weitere Informationen zu Batchendpunkten und MLflow-Modellen finden Sie unter Verwenden von MLflow-Modellen in Batchbereitstellungen.

Die folgenden Abschnitte konzentrieren sich auf MLflow-Modelle, die für Azure Machine Learning-Onlineendpunkte bereitgestellt werden.

Eingabeformate

Eingabetyp Integrierter MLflow-Server Onlineendpunkte für Azure Machine Learning
JSON-serialisierte Pandas-Dataframes in der geteilten Ausrichtung
JSON-serialisierte Pandas-Dataframes in der Datensatzausrichtung Als veraltet markiert
CSV-serialisierte Pandas-Dataframes Batch verwenden1
Tensor-Eingabeformat als JSON-serialisierte Listen (Tensors) und Wörterbuch von Listen (benannte Tensoren)
Tensor-Eingabe, die wie in der API von TF Serving formatiert ist

1 Erwägen Sie die Verwendung von Batch-Rückschlüssen zum Verarbeiten von Dateien. Weitere Informationen finden Sie unter Bereitstellen von MLflow-Modellen in Batch-Endpunkten.

Eingabestruktur

Unabhängig vom verwendeten Eingabetyp muss Azure Machine Learning Eingaben in einer JSON-Nutzlast innerhalb des Wörterbuchschlüssels input_databereitstellen. Da dieser Schlüssel bei Verwendung des Befehls mlflow models serve zum Bereitstellen von Modellen nicht erforderlich ist, können Nutzlasten nicht austauschbar für Azure Machine Learning-Onlineendpunkte und den integrierten MLflow-Server verwendet werden.

Wichtig

Empfehlung für MLflow 2.0: Beachten Sie, dass sich die Struktur der Nutzlast in MLflow 2.0 geändert hat.

Dieser Abschnitt enthält verschiedene Nutzlastbeispiele und die Unterschiede für ein Modell, das im integrierten MLflow-Server bereitgestellt wird, im Vergleich zum Azure Machine Learning-Rückschluss-Server.

Nutzdatenbeispiel für einen JSON-serialisierten 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]
        ]
    }
}

Nutzdatenbeispiel für eine Tensor-Eingabe

{
    "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]
    ]
}

Nutzdatenbeispiel für eine benannte Tensor-Eingabe

{
    "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]
        ]
    }
}

Weitere Informationen zu integrierten MLflow-Bereitstellungstools finden Sie in der MLflow-Dokumentation unter integrierten Bereitstellungstools.

Anpassen von Rückschlüssen beim Bereitstellen von MLflow-Modellen

Möglicherweise werden Sie zum Erstellen von Bewertungsskripts verwendet, um anzupassen, wie das Rückschließen für Ihre benutzerdefinierten Modelle ausgeführt wird. Bei der Bereitstellung von MLflow-Modellen in Azure Machine Learning wird die Entscheidung darüber, wie der Rückschluss erfolgen soll, jedoch vom Modellersteller (der Person, die das Modell erstellt hat) und nicht vom DevOps-Techniker (der Person, die versucht, es bereitzustellen) getroffen. Jedes Modellframework kann automatisch bestimmte Ableitungsroutinen anwenden.

Wenn Sie irgendwann ändern müssen, wie das Rückschließen eines MLflow-Modells ausgeführt wird, können Sie dies auf einem der beiden Wege tun:

  • Ä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, entscheidet die für das Modell verwendete Variante, wie ein Rückschluss ausgeführt werden sollte und welche Ergebnisse vom Modell zurückgegeben werden. 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. Zu einem anderen Zeitpunkt möchten Sie möglicherweise ändern, was zurückgegeben wird (z. B. Wahrscheinlichkeiten im Vergleich zu 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 für Leistungszwecke empfohlen. Eine weitere Alternative besteht darin, die Art des Rückschlusses Ihres Modells mithilfe einer benutzerdefinierten Modellvariante anzupassen.

Anpassen des Rückschlusses mit einem Bewertungsskript

Obwohl MLflow-Modelle kein Bewertungsskript benötigen, können Sie bei Bedarf dennoch eines bereitstellen. Sie können das Bewertungsskript verwenden, um anzupassen, wie Rückschlüsse für MLflow-Modelle ausgeführt werden. Weitere Informationen zum Anpassen der Rückschlüsse finden Sie unter Anpassen von MLflow-Modellbereitstellungen (Onlineendpunkte) und Anpassen von MLflow-Modellbereitstellungen (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 viele Möglichkeiten, MLflow-Modelle in Online- und Batch-Endpunkten bereitzustellen. Sie können Modelle mit den folgenden Tools bereitstellen:

  • MLflow SDK
  • Azure Machine Learning-CLI
  • Azure Machine Learning SDK for Python
  • Azure Machine Learning Studio

Jeder Workflow verfügt über unterschiedliche Funktionen, insbesondere in Bezug auf die Art der Berechnung, auf die er abzielen könnte. Die folgende Tabelle zeigt die verschiedenen Funktionen.

Szenario MLflow SDK Azure Machine Learning CLI/SDK Azure Machine Learning Studio
Auf verwalteten Online-Endpunkten bereitstellen Hier finden Sie ein Beispiel1 Hier finden Sie ein Beispiel1 Hier finden Sie ein Beispiel1
In verwalteten Online-Endpunkten bereitstellen (mit einem Bewertungsskript) Nicht unterstützt3 Hier finden Sie ein Beispiel. Hier finden Sie ein Beispiel.
In Batch-Endpunkten bereitstellen Nicht unterstützt3 Hier finden Sie ein Beispiel. Hier finden Sie ein Beispiel.
In Batch-Endpunkten bereitstellen (mit einem Bewertungsskript) Nicht unterstützt3 Hier finden Sie ein Beispiel. Hier finden Sie ein Beispiel.
In Webdiensten (ACI/AKS) bereitstellen Legacyunterstützung2 Nicht unterstützt2 Nicht unterstützt2
In Webdiensten (ACI/AKS – mit einem Bewertungsskript) bereitstellen Nicht unterstützt3 Legacyunterstützung2 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 Wir empfehlen stattdessen die Umstellung auf unsere verwalteten Online-Endpunkte.

3 MLflow (OSS) verfügt nicht über das Konzept eines Bewertungsskripts und unterstützt derzeit keine Batchausführung.

Welches Bereitstellungstool soll verwendet werden?

  • Verwenden Sie das MLflow SDK, wenn diese beiden Bedingungen gelten:

    • Sie sind mit MLflow vertraut, oder Sie verwenden eine Plattform, die MLflow nativ unterstützt (z. B. Azure Databricks).
    • Sie möchten weiterhin den gleichen Satz von Methoden aus MLflow verwenden.
  • Verwenden Sie die Azure Machine Learning CLI v2, ob eine der folgenden Bedingungen zutrifft:

    • Sie sind mit der Azure Machine Learning CLI v2vertraut.
    • Sie möchten Bereitstellungen mithilfe von Automatisierungspipelines automatisieren.
    • Sie möchten die Bereitstellungskonfiguration in einem Git-Repository beibehalten.
  • Wenn Sie mit MLflow trainierte Modelle schnell bereitstellen und testen möchten, verwenden Sie die Benutzeroberflächenbereitstellung von Azure Machine Learning Studio.