Bereitstellen eines Modells auf einem verwalteten Onlineendpunkt
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 aufgerufenrun()
: 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:
instance_type
: Zu verwendende VM-Größe. Sehen Sie sich die Liste der unterstützten Größen an.instance_count
: Anzahl der zu verwendenden Instanzen
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")