Een model implementeren op een beheerd online-eindpunt
U kunt ervoor kiezen om een model te implementeren op een beheerd online-eindpunt zonder de MLflow-modelindeling te gebruiken. Als u een model wilt implementeren, moet u het scorescript maken en de omgeving definiëren die nodig is tijdens deductie.
Als u een model wilt implementeren, moet u een eindpunt hebben gemaakt. Vervolgens kunt u het model implementeren op het eindpunt.
Een model implementeren op een eindpunt
Als u een model wilt implementeren, moet u het volgende hebben:
- Modelbestanden die zijn opgeslagen op lokaal pad of geregistreerd model.
- Een scorescript.
- Een uitvoeringsomgeving.
De modelbestanden kunnen worden geregistreerd en opgeslagen wanneer u een model traint.
Het scorescript maken
Het scorescript moet twee functies bevatten:
init()
: Aangeroepen wanneer de service wordt geïnitialiseerd.run()
: Wordt aangeroepen wanneer nieuwe gegevens naar de service worden verzonden.
De init-functie wordt aangeroepen wanneer de implementatie wordt gemaakt of bijgewerkt, om het model uit het modelregister te laden en op te cachen. De uitvoeringsfunctie wordt aangeroepen telkens wanneer het eindpunt wordt aangeroepen, om voorspellingen te genereren op basis van de invoergegevens. In het volgende Python-voorbeeldscript ziet u dit patroon:
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()
Een omgeving maken
Uw implementatie vereist een uitvoeringsomgeving waarin het scorescript moet worden uitgevoerd.
U kunt een omgeving maken met een Docker-installatiekopieën met Conda-afhankelijkheden of met een Dockerfile.
Als u een omgeving wilt maken met behulp van een docker-basisinstallatiekopieën, kunt u de Conda-afhankelijkheden in een conda.yml
bestand definiëren:
name: basic-env-cpu
channels:
- conda-forge
dependencies:
- python=3.7
- scikit-learn
- pandas
- numpy
- matplotlib
Voer vervolgens de volgende code uit om de omgeving te maken:
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)
De implementatie maken
Wanneer u uw modelbestanden, scorescript en omgeving hebt, kunt u de implementatie maken.
Als u een model wilt implementeren op een eindpunt, kunt u de rekenconfiguratie opgeven met twee parameters:
instance_type
: de grootte van de virtuele machine (VM) die moet worden gebruikt. Bekijk de lijst met ondersteunde grootten.instance_count
: het aantal exemplaren dat moet worden gebruikt.
Als u het model wilt implementeren, gebruikt u de ManagedOnlineDeployment
klasse en voert u de volgende opdracht uit:
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()
Tip
Bekijk de referentiedocumentatie voor het maken van een beheerde online-implementatie met de Python SDK v2.
U kunt meerdere modellen implementeren op een eindpunt. Gebruik de volgende code om verkeer naar een specifieke implementatie te routeren:
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.begin_create_or_update(endpoint).result()
Als u het eindpunt en alle bijbehorende implementaties wilt verwijderen, voert u de opdracht uit:
ml_client.online_endpoints.begin_delete(name="endpoint-example")