Een aangepast model implementeren in een batch-eindpunt
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.
Tip
Meer informatie over het schrijven van scorescripts voor batchimplementaties.
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.