Distribuera en anpassad modell till en batchslutpunkt
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.
Dricks
Läs mer om hur du skapar bedömningsskript för batchdistributioner.
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.