Implementación de un modelo personalizado en un punto de conexión por lotes
Si desea implementar un modelo en un punto de conexión por lotes sin usar el formato del modelo de MLflow, debe crear el script de puntuación y el entorno.
Para implementar un modelo, debe haber creado un punto de conexión. A continuación, puede implementar el modelo en el punto de conexión.
Creación del script de puntuación
El script de puntuación es un archivo que lee los nuevos datos, carga el modelo y realiza la puntuación.
El script de puntuación debe incluir dos funciones:
init()
: se le llama una vez al principio del proceso, por lo que se usa para cualquier preparación costosa o común, como cargar el modelo.run()
: se le llama para cada minilote para realizar la puntuación.
El método run()
debe devolver un DataFrame de Pandas o una matriz o lista.
Un script de puntuación puede tener el siguiente aspecto:
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
Hay algunas cosas que se deben tener en cuenta en el script de ejemplo:
AZUREML_MODEL_DIR
es una variable de entorno que puede usar para buscar los archivos asociados al modelo.- Use la variable
global
para que los recursos estén disponibles para puntuar los nuevos datos, como el modelo cargado. - El tamaño de
mini_batch
se define en la configuración de implementación. Si los archivos del minilote son demasiado grandes para procesarse, debe dividir los archivos en archivos más pequeños. - De forma predeterminada, las predicciones se escribirán en un único archivo.
Sugerencia
Obtenga más información sobre cómo crear scripts de puntuación para implementaciones por lotes.
Creación de un entorno
La implementación requiere un entorno de ejecución en el que ejecutar el script de puntuación. Cualquier dependencia que requiera el código debe incluirse en el entorno.
Puede crear un entorno con una imagen de Docker con dependencias de Conda o con Dockerfile.
También tendrá que agregar la biblioteca azureml-core
, ya que es necesaria para el funcionamiento de las implementaciones por lotes.
Para crear un entorno mediante una imagen base de Docker, puede definir las dependencias de Conda en un archivo conda.yaml
:
name: basic-env-cpu
channels:
- conda-forge
dependencies:
- python=3.8
- pandas
- pip
- pip:
- azureml-core
- mlflow
A continuación, para crear el entorno, ejecute el código siguiente:
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)
Configuración y creación de la implementación
Por último, puede configurar y crear la implementación con la clase BatchDeployment
.
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)
Sugerencia
Explore la documentación de referencia para crear una implementación por lotes con el SDK v2 de Python.