Bereitstellen eines Modells auf einem verwalteten Onlineendpunkt

Abgeschlossen

Sie können ein Modell auf einem verwalteten Onlineendpunkt bereitstellen, ohne das MLflow-Modellformat zu verwenden. Um ein Modell bereitzustellen, müssen Sie das Bewertungsskript erstellen und die Umgebung definieren, die beim Rückschließen erforderlich ist.

Um ein Modell bereitzustellen, müssen Sie einen Endpunkt erstellt haben. Anschließend können Sie das Modell auf dem Endpunkt bereitstellen.

Bereitstellen eines Modells auf einem Endpunkt

Um ein Modell bereitzustellen, müssen Sie über Folgendes verfügen:

  • Modelldateien, die in einem lokalen Pfad oder registrierten Modell gespeichert sind
  • Bewertungsskript
  • Ausführungsumgebung

Die Modelldateien können protokolliert und gespeichert werden, wenn Sie ein Modell trainieren.

Erstellen des Bewertungsskripts

Das Bewertungsskript muss zwei Funktionen umfassen:

  • init(): Wird beim Initialisieren des Diensts aufgerufen
  • run(): Wird beim Übermitteln neuer Daten an den Dienst aufgerufen

Die init-Funktion wird aufgerufen, wenn die Bereitstellung erstellt oder aktualisiert wird, um das Modell aus der Modellregistrierung zu laden und zwischenzuspeichern. Die run-Funktion wird jedes Mal aufgerufen, wenn der Endpunkt aufgerufen wird, um Vorhersagen aus den Eingabedaten zu generieren. Das folgende Python-Beispielskript verdeutlicht dieses Muster:

import json
import joblib
import numpy as np
import os

# called when the deployment is created or updated
def init():
    global model
    # get the path to the registered model file and load it
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model.pkl')
    model = joblib.load(model_path)

# called when a request is received
def run(raw_data):
    # get the input data as a numpy array
    data = np.array(json.loads(raw_data)['data'])
    # get a prediction from the model
    predictions = model.predict(data)
    # return the predictions as any JSON serializable format
    return predictions.tolist()

Erstellen einer Umgebung

Ihre Bereitstellung erfordert eine Ausführungsumgebung, in der das Bewertungsskript ausgeführt werden kann.

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

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

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.7
  - scikit-learn
  - pandas
  - numpy
  - matplotlib

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.yml",
    name="deployment-environment",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)

Erstellen der Bereitstellung

Wenn Sie über Ihre Modelldateien, das Bewertungsskript und die Umgebung verfügen, können Sie die Bereitstellung erstellen.

Um ein Modell auf einem Endpunkt bereitzustellen, können Sie die Computekonfiguration mit zwei Parametern angeben:

Verwenden Sie zum Bereitstellen des Modells die ManagedOnlineDeployment-Klasse, und führen Sie den folgenden Befehl aus:

from azure.ai.ml.entities import ManagedOnlineDeployment, CodeConfiguration

model = Model(path="./model",

blue_deployment = ManagedOnlineDeployment(
    name="blue",
    endpoint_name="endpoint-example",
    model=model,
    environment="deployment-environment",
    code_configuration=CodeConfiguration(
        code="./src", scoring_script="score.py"
    ),
    instance_type="Standard_DS2_v2",
    instance_count=1,
)

ml_client.online_deployments.begin_create_or_update(blue_deployment).result()

Tipp

Lesen Sie die Referenzdokumentation zum Erstellen einer verwalteten Onlinebereitstellung mit Python-SDK V2.

Sie können mehrere Modelle auf einem Endpunkt bereitstellen. Verwenden Sie den folgenden Code, um Datenverkehr an eine bestimmte Bereitstellung weiterzuleiten:

# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.begin_create_or_update(endpoint).result()

Führen Sie den folgenden Befehl aus, um den Endpunkt und alle zugeordneten Bereitstellungen zu löschen:

ml_client.online_endpoints.begin_delete(name="endpoint-example")