Een model implementeren op een beheerd online-eindpunt

Voltooid

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:

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()

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")