Een aangepast model implementeren in een batch-eindpunt

Voltooid

Als u een model wilt implementeren in een batch-eindpunt zonder de MLflow-modelindeling te gebruiken, moet u het scorescript en de omgeving maken.

Als u een model wilt implementeren, moet u al een eindpunt hebben gemaakt. Vervolgens kunt u het model implementeren op het eindpunt.

Het scorescript maken

Het scorescript is een bestand dat de nieuwe gegevens leest, het model laadt en het scoren uitvoert.

Het scorescript moet twee functies bevatten:

  • init(): Eenmaal aangeroepen aan het begin van het proces, dus gebruik dit voor kostbare of algemene voorbereiding, zoals het laden van het model.
  • run(): Wordt aangeroepen voor elke minibatch om de score uit te voeren.

De run() methode moet een Pandas DataFrame of een matrix/lijst retourneren.

Een scorescript kan er als volgt uitzien:

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

Er zijn enkele dingen die u moet noteren uit het voorbeeldscript:

  • AZUREML_MODEL_DIR is een omgevingsvariabele die u kunt gebruiken om de bestanden te vinden die aan het model zijn gekoppeld.
  • Gebruik global een variabele om assets beschikbaar te maken die nodig zijn om de nieuwe gegevens te beoordelen, zoals het geladen model.
  • De grootte van de mini_batch configuratie wordt gedefinieerd in de implementatieconfiguratie. Als de bestanden in de minibatch te groot zijn om te worden verwerkt, moet u de bestanden splitsen in kleinere bestanden.
  • De voorspellingen worden standaard naar één bestand geschreven.

Een omgeving maken

Uw implementatie vereist een uitvoeringsomgeving waarin het scorescript moet worden uitgevoerd. Elke afhankelijkheid die uw code vereist, moet worden opgenomen in de omgeving.

U kunt een omgeving maken met een Docker-installatiekopieën met Conda-afhankelijkheden of met een Dockerfile.

U moet ook de bibliotheek azureml-core toevoegen, omdat dit vereist is om batchimplementaties te laten werken.

Als u een omgeving wilt maken met behulp van een docker-basisinstallatiekopieën, kunt u de Conda-afhankelijkheden in een conda.yaml bestand definiëren:

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pandas
  - pip
  - pip:
      - azureml-core
      - mlflow

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

De implementatie configureren en maken

Ten slotte kunt u de implementatie configureren en maken met de BatchDeployment klasse.

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)

Tip

Bekijk de referentiedocumentatie voor het maken van een batchimplementatie met de Python SDK v2.