Bereitstellen eines benutzerdefinierten Modells an einem Batchendpunkt
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.
Tipp
Erfahren Sie mehr über das Erstellen von Bewertungsskripts für Batchbereitstellungen.
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.