Implementación de un modelo personalizado en un punto de conexión por lotes

Completado

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.