Implementación de un modelo en un punto de conexión en línea administrado
Puede optar por implementar un modelo en un punto de conexión en línea administrado sin usar el formato del modelo de MLflow. Para implementar un modelo, deberá crear el script de puntuación y definir el entorno necesario durante la inferencia.
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.
Implementación de un modelo en un punto de conexión
Para implementar un modelo debe tener:
- Archivos de modelo almacenados en la ruta de acceso local o en el modelo registrado.
- Un script de puntuación.
- Un entorno de ejecución.
Los archivos de modelo se pueden registrar y almacenar al entrenar un modelo.
Creación del script de puntuación
El script de puntuación debe incluir dos funciones:
init()
: se llama cuando se inicializa el servicio.run()
: se llama cuando se envían nuevos datos al servicio.
Se llama a la función init cuando se crea o actualiza la implementación para cargar y almacenar en caché el modelo desde el registro de modelos. Se llama a la función run cada vez que se invoca el punto de conexión para generar predicciones a partir de los datos de entrada. En el script de Python de ejemplo siguiente se muestra este patrón:
import json
import joblib
import numpy as np
import os
# called when the deployment is created or updated
def init():
global model
# get the path to the registered model file and load it
model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model.pkl')
model = joblib.load(model_path)
# called when a request is received
def run(raw_data):
# get the input data as a numpy array
data = np.array(json.loads(raw_data)['data'])
# get a prediction from the model
predictions = model.predict(data)
# return the predictions as any JSON serializable format
return predictions.tolist()
Creación de un entorno
La implementación requiere un entorno de ejecución en el que ejecutar el script de puntuación.
Puede crear un entorno con una imagen de Docker con dependencias de Conda o con Dockerfile.
Para crear un entorno mediante una imagen base de Docker, puede definir las dependencias de Conda en un archivo conda.yml
:
name: basic-env-cpu
channels:
- conda-forge
dependencies:
- python=3.7
- scikit-learn
- pandas
- numpy
- matplotlib
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.yml",
name="deployment-environment",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)
Creación de la implementación
Cuando tenga los archivos de modelo, el script de puntuación y el entorno, puede crear la implementación.
Para implementar un modelo en un punto de conexión, puede especificar la configuración de proceso con dos parámetros:
instance_type
: tamaño de la máquina virtual (VM) que se va a usar. Revise la lista de tamaños admitidos.instance_count
: número de instancias que se van a usar.
Para implementar el modelo, use la clase ManagedOnlineDeployment
y ejecute el siguiente comando:
from azure.ai.ml.entities import ManagedOnlineDeployment, CodeConfiguration
model = Model(path="./model",
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name="endpoint-example",
model=model,
environment="deployment-environment",
code_configuration=CodeConfiguration(
code="./src", scoring_script="score.py"
),
instance_type="Standard_DS2_v2",
instance_count=1,
)
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
Sugerencia
Explore la documentación de referencia para crear una implementación en línea administrada con el SDK v2 de Python.
Puede implementar varios modelos en un punto de conexión. Para enrutar el tráfico a una implementación específica, use el código siguiente:
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.begin_create_or_update(endpoint).result()
Para eliminar el punto de conexión y todas las implementaciones asociadas, ejecute el comando :
ml_client.online_endpoints.begin_delete(name="endpoint-example")