Implementación y puntuación de un modelo de Machine Learning con un punto de conexión en línea administrado mediante el SDK de Python v2 (versión preliminar)
SE APLICA A: SDK de Python azure-ai-ml v2 (versión preliminar)
Importante
El SDK v2 está actualmente en versión preliminar pública. Se ofrece la versión preliminar sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
En este artículo, aprenderá cómo implementar el modelo de Machine Learning en un punto de conexión en línea administrado y cómo obtener predicciones. Comenzará por implementar un modelo en la máquina local para depurar los errores y, después, lo implementará y probará en Azure.
Requisitos previos
- Si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar. Pruebe hoy mismo la versión gratuita o de pago de Azure Machine Learning.
- El SDK v2 para Python de Azure Machine Learning.
- Debe tener un grupo de recursos de Azure, en el que usted (o la entidad de servicio que use) tenga acceso de colaborador.
- Debe tener un área de trabajo de Azure Machine Learning.
- Para implementar localmente, debe instalar el motor de Docker en el equipo local. Se recomienda esta opción, para que sea más sencillo depurar los problemas.
Clonación del repositorio de ejemplos
Para ejecutar los ejemplos de entrenamiento, primero clone el repositorio de ejemplos y cambie al directorio sdk
:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk
Sugerencia
Use --depth 1
para clonar solamente la confirmación más reciente en el repositorio, lo cual reduce el tiempo para completar la operación.
Conexión al área de trabajo de Azure Machine Learning
El área de trabajo es el recurso de nivel superior para Azure Machine Learning, que proporciona un lugar centralizado para trabajar con todos los artefactos que se crean al usar Azure Machine Learning. En esta sección, nos conectaremos al área de trabajo en la que realizará las tareas de implementación.
Importe las bibliotecas necesarias:
# import required libraries from azure.ai.ml import MLClient from azure.ai.ml.entities import ( ManagedOnlineEndpoint, ManagedOnlineDeployment, Model, Environment, CodeConfiguration, ) from azure.identity import DefaultAzureCredential
Configure los detalles del área de trabajo y obtenga un manipulador para el área de trabajo:
Para conectarse a un área de trabajo, se necesitan parámetros de identificador: una suscripción, un grupo de recursos y un nombre de área de trabajo. Usaremos estos detalles en el elemento
MLClient
deazure.ai.ml
para obtener un manipulador para el área de trabajo de Azure Machine Learning necesaria. En este ejemplo, se usa la autenticación predeterminada de Azure.# enter details of your AzureML workspace subscription_id = "<SUBSCRIPTION_ID>" resource_group = "<RESOURCE_GROUP>" workspace = "<AZUREML_WORKSPACE_NAME>"
# get a handle to the workspace ml_client = MLClient( DefaultAzureCredential(), subscription_id, resource_group, workspace )
Creación del punto de conexión y la implementación
Nota:
Para realizar la implementación localmente, debe tener instalado el motor de Docker. El motor de Docker debe estar en ejecución. Este motor normalmente se inicia cuando se inicia el equipo. Si no lo hace, puede solucionar el problema aquí.
Creación del punto de conexión local:
El objetivo de la implementación de un punto de conexión local es validar y depurar el código y la configuración antes de implementarlo en Azure. La implementación local tiene las siguientes limitaciones:
- Los puntos de conexión locales no admiten reglas de tráfico, autenticación ni configuración de sondeo.
- Los puntos de conexión locales solo admiten una implementación por punto de conexión.
# Creating a local endpoint import datetime local_endpoint_name = "local-" + datetime.datetime.now().strftime("%m%d%H%M%f") # create an online endpoint endpoint = ManagedOnlineEndpoint( name=local_endpoint_name, description="this is a sample local endpoint" )
ml_client.online_endpoints.begin_create_or_update(endpoint, local=True)
Creación de la implementación local:
El ejemplo contiene todos los archivos necesarios para implementar un modelo en un punto de conexión en línea. Para implementar un modelo debe tener:
- Archivos de modelo (o el nombre y la versión de un modelo ya registrado en el área de trabajo). En el ejemplo, tenemos un modelo scikit-learn que realiza la regresión.
- Código necesario para puntuar el modelo. En este caso, tenemos un archivo score-py.
- Entorno en el que se ejecuta el modelo. Como verá, el entorno podría ser una imagen de Docker con dependencias de Conda o podría ser un Dockerfile.
- Configuración para especificar el tipo de instancia y la capacidad de escalado.
Aspectos clave de la implementación
name
: nombre de la implementación.endpoint_name
: nombre del punto de conexión en el que se va a crear la implementación.model
: modelo que se va a usar para la implementación. Este valor puede ser una referencia a un modelo con versiones existente en el área de trabajo o una especificación de modelo en línea.environment
: entorno que se va a usar para la implementación. Este valor puede ser una referencia a un entorno con versiones existente en el área de trabajo o una especificación de entorno en línea.code_configuration
: configuración del código fuente y el script de puntuaciónpath
: ruta de acceso al directorio de código fuente para la puntuación del modeloscoring_script
: ruta de acceso relativa al archivo de puntuación en el directorio de código fuente
instance_type
: tamaño de máquina virtual que se va a usar para la implementación. Para la lista de tamaños admitidos, consulte Lista de SKU de puntos de conexión en línea administrados.instance_count
: número de instancias que se usarán para la implementación
model = Model(path="../model-1/model/sklearn_regression_model.pkl") env = Environment( conda_file="../model-1/environment/conda.yml", image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1", ) blue_deployment = ManagedOnlineDeployment( name="blue", endpoint_name=local_endpoint_name, model=model, environment=env, code_configuration=CodeConfiguration( code="../model-1/onlinescoring", scoring_script="score.py" ), instance_type="Standard_F2s_v2", instance_count=1, )
ml_client.online_deployments.begin_create_or_update( deployment=blue_deployment, local=True )
Comprobación de que la implementación local se ha realizado correctamente
Compruebe el estado para ver si el modelo se ha implementado sin errores:
ml_client.online_endpoints.get(name=local_endpoint_name, local=True)
Obtención de registros:
ml_client.online_deployments.get_logs( name="blue", endpoint_name=local_endpoint_name, local=True, lines=50 )
Invocación del punto de conexión local
Invoque el punto de conexión para puntuar el modelo con el práctico comando invoke y pase los parámetros de consulta almacenados en un archivo JSON.
ml_client.online_endpoints.invoke(
endpoint_name=local_endpoint_name,
request_file="../model-1/sample-request.json",
local=True,
)
Implementación del punto de conexión en línea en Azure
A continuación, implemente el punto de conexión en línea en Azure.
Configuración del punto de conexión en línea:
Sugerencia
endpoint_name
: Nombre del punto de conexión. El valor debe ser único dentro de la región de Azure. Para más información sobre las reglas de nomenclatura, consulte los límites del punto de conexión en línea administrado.auth_mode
: usekey
para la autenticación basada en claves. Useaml_token
para la autenticación basada en tokens de Azure Machine Learning.key
no expira, peroaml_token
sí lo hace. Para más información sobre la autenticación, consulte Autenticación en un punto de conexión en línea.- Opcionalmente, puede agregar una descripción y etiquetas al punto de conexión.
# Creating a unique endpoint name with current datetime to avoid conflicts import datetime online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f") # create an online endpoint endpoint = ManagedOnlineEndpoint( name=online_endpoint_name, description="this is a sample online endpoint", auth_mode="key", tags={"foo": "bar"}, )
Creación del punto de conexión:
Con el elemento
MLClient
creado anteriormente, ahora crearemos el punto de conexión en el área de trabajo. Este comando iniciará la creación del punto de conexión y devolverá una respuesta de confirmación mientras continúa la creación del punto de conexión.ml_client.begin_create_or_update(endpoint)
Configuración de la implementación en línea:
Una implementación es un conjunto de recursos necesarios para hospedar el modelo que realiza la inferencia real. Crearemos una implementación para nuestro punto de conexión mediante la clase
ManagedOnlineDeployment
.model = Model(path="../model-1/model/sklearn_regression_model.pkl") env = Environment( conda_file="../model-1/environment/conda.yml", image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1", ) blue_deployment = ManagedOnlineDeployment( name="blue", endpoint_name=online_endpoint_name, model=model, environment=env, code_configuration=CodeConfiguration( code="../model-1/onlinescoring", scoring_script="score.py" ), instance_type="Standard_F2s_v2", instance_count=1, )
Creación de la implementación:
Con el elemento
MLClient
creado anteriormente, ahora crearemos la implementación en el área de trabajo. Este comando iniciará la creación de la implementación y devolverá una respuesta de confirmación mientras continúa la creación de la implementación.ml_client.begin_create_or_update(blue_deployment)
# blue deployment takes 100 traffic endpoint.traffic = {"blue": 100} ml_client.begin_create_or_update(endpoint)
Prueba del punto de conexión con datos de ejemplo
Con el elemento MLClient
creado anteriormente, vamos a obtener un manipulador para el punto de conexión. El punto de conexión se puede invocar mediante el comando invoke
con los parámetros siguientes:
endpoint_name
: nombre del punto de conexiónrequest_file
: archivo con los datos de la solicituddeployment_name
: nombre de la implementación específica que se va a probar en un punto de conexión
Vamos a enviar una solicitud de ejemplo mediante un archivo JSON.
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Administración de puntos de conexión e implementaciones
Obtención de los detalles del punto de conexión:
# Get the details for online endpoint endpoint = ml_client.online_endpoints.get(name=online_endpoint_name) # existing traffic details print(endpoint.traffic) # Get the scoring URI print(endpoint.scoring_uri)
Obtención de los registros de la nueva implementación:
Obtenga los registros de la implementación verde y realice las comprobaciones necesarias.
ml_client.online_deployments.get_logs( name="blue", endpoint_name=online_endpoint_name, lines=50 )
Eliminación del punto de conexión
ml_client.online_endpoints.begin_delete(name=online_endpoint_name)
Pasos siguientes
Pruebe estos pasos para saber cómo usar el SDK (v2) de Azure Machine Learning para Python:
- Implementación segura para puntos de conexión en línea
- Explore ejemplos de puntos de conexión en línea: https://github.com/Azure/azureml-examples/tree/main/sdk/endpoints