Distribuera en anpassad modell till en batchslutpunkt

Slutförd

Om du vill distribuera en modell till en batchslutpunkt utan att använda MLflow-modellformatet måste du skapa bedömningsskriptet och miljön.

Om du vill distribuera en modell måste du redan ha skapat en slutpunkt. Sedan kan du distribuera modellen till slutpunkten.

Skapa bedömningsskriptet

Bedömningsskriptet är en fil som läser in nya data, läser in modellen och utför poängsättningen.

Bedömningsskriptet måste innehålla två funktioner:

  • init(): Anropas en gång i början av processen, så använd för alla kostsamma eller vanliga förberedelser som att läsa in modellen.
  • run(): Anropade för varje minibatch för att utföra poängsättningen.

Metoden run() ska returnera en Pandas DataFrame eller en matris/lista.

Ett bedömningsskript kan se ut så här:

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

Det finns några saker att notera från exempelskriptet:

  • AZUREML_MODEL_DIR är en miljövariabel som du kan använda för att hitta de filer som är associerade med modellen.
  • Använd global variabel för att göra alla tillgångar tillgängliga som behövs för att bedöma nya data, till exempel den inlästa modellen.
  • Storleken på mini_batch definieras i distributionskonfigurationen. Om filerna i mini-batchen är för stora för att bearbetas måste du dela upp filerna i mindre filer.
  • Som standard skrivs förutsägelserna till en enda fil.

Skapa en miljö

Distributionen kräver en körningsmiljö där bedömningsskriptet ska köras. Alla beroenden som din kod kräver bör ingå i miljön.

Du kan skapa en miljö med en Docker-avbildning med Conda-beroenden eller med en Dockerfile.

Du måste också lägga till biblioteket azureml-core eftersom det krävs för att batchdistributioner ska fungera.

Om du vill skapa en miljö med en docker-basavbildning kan du definiera Conda-beroenden i en conda.yaml fil:

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

Kör sedan följande kod för att skapa miljön:

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)

Konfigurera och skapa distributionen

Slutligen kan du konfigurera och skapa distributionen BatchDeployment med klassen .

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)

Dricks

Utforska referensdokumentationen för att skapa en batchdistribution med Python SDK v2.