Bereitstellen eines benutzerdefinierten Modells an einem Batchendpunkt

Abgeschlossen

Wenn Sie ein Modell an einem Batchendpunkt bereitstellen möchten, ohne das MLflow-Modellformat zu verwenden, müssen Sie das Bewertungsskript und die Bewertungsumgebung erstellen.

Vor dem Bereitstellen eines Modells müssen Sie bereits einen Endpunkt erstellt haben. Anschließend können Sie das Modell auf dem Endpunkt bereitstellen.

Erstellen des Bewertungsskripts

Das Bewertungsskript ist eine Datei, die die neuen Daten liest, das Modell lädt und die Bewertung ausführt.

Das Bewertungsskript muss zwei Funktionen enthalten:

  • init() wird einmal am Anfang des Prozesses aufgerufen und für jede aufwendige oder allgemeine Vorbereitung verwendet, z. B. das Laden des Modells.
  • run() wird für jeden Minibatch aufgerufen, um die Bewertung durchzuführen.

Von der run()-Methode sollte ein pandas DataFrame oder ein Array/eine Liste zurückgegeben werden.

Ein Bewertungsskript kann wie folgt aussehen:

import os
import mlflow
import pandas as pd


def init():
    global model

    # get the path to the registered model file and load it
    model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    model = mlflow.pyfunc.load(model_path)


def run(mini_batch):
    print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    resultList = []

    for file_path in mini_batch:
        data = pd.read_csv(file_path)
        pred = model.predict(data)

        df = pd.DataFrame(pred, columns=["predictions"])
        df["file"] = os.path.basename(file_path)
        resultList.extend(df.values)

    return resultList

Bei diesem Beispielskript sind einige Punkte zu beachten:

  • AZUREML_MODEL_DIR ist eine Umgebungsvariable, mit der Sie die dem Modell zugeordneten Dateien suchen können.
  • Verwenden Sie die Variable global, um alle Ressourcen zur Verfügung zu stellen, die zum Bewerten der neuen Daten erforderlich sind, z. B. das geladene Modell.
  • Die Größe des mini_batch wird in der Bereitstellungskonfiguration definiert. Wenn die Dateien im Minibatch zu groß für die Verarbeitung sind, müssen Sie die Dateien in kleinere Dateien aufteilen.
  • Standardmäßig werden die Vorhersagen in eine einzelne Datei geschrieben.

Erstellen einer Umgebung

Ihre Bereitstellung erfordert eine Ausführungsumgebung, in der das Bewertungsskript ausgeführt werden kann. Alle Abhängigkeiten, die Ihr Code benötigt, sollten in die Umgebung eingeschlossen werden.

Sie können eine Umgebung mit einem Docker-Image mit Conda-Abhängigkeiten oder mit einem Dockerfile erstellen.

Sie müssen auch die Bibliothek azureml-core hinzufügen, da sie erforderlich ist, damit Batchbereitstellungen funktionieren.

Um eine Umgebung mit einem Docker-Basisimage zu erstellen, können Sie die Conda-Abhängigkeiten in einer conda.yaml-Datei definieren:

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pandas
  - pip
  - pip:
      - azureml-core
      - mlflow

Führen Sie dann den folgenden Code aus, um die Umgebung zu erstellen:

from azure.ai.ml.entities import Environment

env = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    conda_file="./src/conda-env.yml",
    name="deployment-environment",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)

Konfigurieren und Erstellen der Bereitstellung

Abschließend können Sie die Bereitstellung mit der BatchDeployment-Klasse konfigurieren und erstellen.

from azure.ai.ml.entities import BatchDeployment, BatchRetrySettings
from azure.ai.ml.constants import BatchDeploymentOutputAction

deployment = BatchDeployment(
    name="forecast-mlflow",
    description="A sales forecaster",
    endpoint_name=endpoint.name,
    model=model,
    compute="aml-cluster",
    code_path="./code",
    scoring_script="score.py",
    environment=env,
    instance_count=2,
    max_concurrency_per_instance=2,
    mini_batch_size=2,
    output_action=BatchDeploymentOutputAction.APPEND_ROW,
    output_file_name="predictions.csv",
    retry_settings=BatchRetrySettings(max_retries=3, timeout=300),
    logging_level="info",
)
ml_client.batch_deployments.begin_create_or_update(deployment)

Tipp

Lesen Sie die Referenzdokumentation zum Erstellen einer Batchbereitstellung mit dem Python-SDK v2.