Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)
SDK de Python azure-ai-ml v2 (actual)
En Azure Machine Learning, puede usar un contenedor personalizado para implementar un modelo en un punto de conexión en línea. Las implementaciones de contenedores personalizadas pueden usar servidores web distintos del servidor predeterminado de Python Flask que usa Azure Machine Learning.
Al usar una implementación personalizada, puede hacer lo siguiente:
- Use varias herramientas y tecnologías, como TensorFlow Serving (TF Serving), TorchServe, Triton Inference Server, el paquete Plumber R y la imagen mínima de inferencia de Azure Machine Learning.
- Aún así, aproveche las ventajas de la supervisión, el escalado, las alertas y la autenticación integrados que ofrece Azure Machine Learning.
En este artículo se muestra cómo usar una imagen de servicio de TF para servir un modelo de TensorFlow.
Requisitos previos
Un área de trabajo de Azure Machine Learning. Para obtener instrucciones para crear un área de trabajo, consulte Creación del área de trabajo.
La CLI de Azure y la
ml
extensión o el SDK de Python de Azure Machine Learning v2:Para instalar la CLI de Azure y la
ml
extensión, consulte Instalación y configuración de la CLI (v2).En los ejemplos de este artículo se supone que se usa un shell de Bash o un shell compatible. Por ejemplo, puede usar un shell en un sistema Linux o subsistema de Windows para Linux.
Un grupo de recursos de Azure que contiene tu espacio de trabajo y al que tú o tu entidad de servicio tenéis acceso como Colaborador. Si usa los pasos descritos en Creación del área de trabajo para configurar el área de trabajo, cumple este requisito.
Motor de Docker, instalado y ejecutándose localmente. Este requisito previo es muy recomendable. Necesita implementar un modelo localmente y resulta útil para la depuración.
Ejemplos de implementación
En la tabla siguiente se enumeran los ejemplos de implementación que usan contenedores personalizados y aprovechan las distintas herramientas y tecnologías.
Ejemplo | Script de la CLI de Azure | Descripción |
---|---|---|
minimal/multimodel | deploy-custom-container-minimal-multimodel | Implementa varios modelos en una sola implementación mediante la extensión de la imagen mínima de inferencia de Azure Machine Learning. |
minimal/single-model | deploy-custom-container-minimal-single-model | Implementa un único modelo mediante la extensión de la imagen mínima de inferencia de Azure Machine Learning. |
mlflow/multideployment-scikit | deploy-custom-container-mlflow-multideployment-scikit | Implementa dos modelos de MLFlow con distintos requisitos de Python en dos implementaciones independientes detrás de un único punto de conexión. Usa la imagen mínima de inferencia de Azure Machine Learning. |
r/multimodel-plumber | deploy-custom-container-r-multimodel-plumber | Implementa tres modelos de regresión en un punto de conexión. Usa el paquete Plumber R. |
tfserving/half-plus-two | deploy-custom-container-tfserving-half-plus-two | Implementa un modelo Half Plus Two mediante un contenedor personalizado tf Serving. Usa el proceso de registro de modelos estándar. |
tfserving/half-plus-two-integrated | deploy-custom-container-tfserving-half-plus-two-integrated | Implementa un modelo Half Plus Two mediante un contenedor personalizado tf Serving con el modelo integrado en la imagen. |
torchserve/densenet | deploy-custom-container-torchserve-densenet | Implementa un único modelo mediante un contenedor personalizado de TorchServe. |
triton/single-model | deploy-custom-container-triton-single-model | Implementa un modelo de Triton mediante un contenedor personalizado. |
En este artículo se muestra cómo usar el ejemplo tfserving/half-plus-two.
Advertencia
Es posible que los equipos de soporte técnico de Microsoft no puedan ayudar a solucionar problemas causados por una imagen personalizada. Si tiene problemas, es posible que se le pida que use la imagen predeterminada o una de las imágenes que Proporciona Microsoft para ver si el problema es específico de la imagen.
Descarga del código fuente
Los pasos de este artículo usan ejemplos de código del repositorio azureml-examples . Use los comandos siguientes para clonar el repositorio:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Inicialización de las variables de entorno
Para usar un modelo de TensorFlow, necesita varias variables de entorno. Ejecute los siguientes comandos para definir esas variables:
BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1
Descarga de un modelo de TensorFlow
Descargue y descomprima un modelo que divide un valor de entrada por dos y agrega dos al resultado:
wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH
Prueba una imagen de TF Serving localmente
Use Docker para ejecutar la imagen localmente para realizar pruebas:
docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
-e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
--name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10
Envío de solicitudes de ejecución y puntuación a la imagen
Envíe una solicitud de ejecución para comprobar que el proceso dentro del contenedor se está ejecutando. Debería obtener un código de estado de respuesta de 200 OK.
curl -v http://localhost:8501/v1/models/$MODEL_NAME
Envíe una solicitud de puntuación para comprobar que puede obtener predicciones sobre datos sin etiquetar:
curl --header "Content-Type: application/json" \
--request POST \
--data @$BASE_PATH/sample_request.json \
http://localhost:8501/v1/models/$MODEL_NAME:predict
Detención de la imagen
Cuando termine de probar localmente, detenga la imagen:
docker stop tfserving-test
Implementación del punto de conexión en línea en Azure
Para implementar el punto de conexión en línea en Azure, siga los pasos descritos en las secciones siguientes.
Creación de archivos YAML para el punto de conexión y la implementación
Puede configurar la implementación en la nube mediante YAML. Por ejemplo, para configurar el punto de conexión, puede crear un archivo YAML denominado tfserving-endpoint.yml que contenga las siguientes líneas:
$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token
Para configurar la implementación, puede crear un archivo YAML denominado tfserving-deployment.yml que contenga las siguientes líneas:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: <model-version>
path: ./half_plus_two
environment_variables:
MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/<model-version>
MODEL_NAME: half_plus_two
environment:
#name: tfserving
#version: 1
image: docker.io/tensorflow/serving:latest
inference_config:
liveness_route:
port: 8501
path: /v1/models/half_plus_two
readiness_route:
port: 8501
path: /v1/models/half_plus_two
scoring_route:
port: 8501
path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1
En las secciones siguientes se describen conceptos importantes sobre los parámetros de YAML y Python.
Imagen base
En la environment
sección de YAML o el Environment
constructor de Python, especifique la imagen base como parámetro. En este ejemplo se usa docker.io/tensorflow/serving:latest
como valor de image
.
Si inspecciona el contenedor, puede ver que este servidor usa ENTRYPOINT
comandos para iniciar un script de punto de entrada. Ese script toma variables de entorno como MODEL_BASE_PATH
y MODEL_NAME
, y expone puertos como 8501
. Estos detalles pertenecen a este servidor y puede usar esta información para determinar cómo definir la implementación. Por ejemplo, si establece las variables de entorno MODEL_BASE_PATH
y MODEL_NAME
en la definición de implementación, TF Serving usa esos valores para iniciar el servidor. Del mismo modo, si establece el puerto para cada ruta en 8501
en la definición de implementación, las solicitudes de usuario a esas rutas se enrutan correctamente al servidor TF Serving.
Este ejemplo se basa en el caso tf Serving. Sin embargo, puede usar cualquier contenedor que permanezca funcionando y responda a las solicitudes que van a las rutas de disponibilidad, preparación y puntuación. Para ver cómo formar un Dockerfile para crear un contenedor, puede consultar otros ejemplos. Algunos servidores usan CMD
instrucciones en lugar de ENTRYPOINT
instrucciones.
Parámetro de configuración de inferencia
En la environment
sección o la Environment
clase , inference_config
es un parámetro . Especifica el puerto y la ruta de acceso para tres tipos de rutas: disponibilidad, preparación y puntuación. El inference_config
parámetro es necesario si desea ejecutar su propio contenedor con un punto de conexión en línea administrado.
Rutas de preparación frente a rutas de ejecución
Algunos servidores de API proporcionan una manera de comprobar el estado del servidor. Hay dos tipos de rutas que puede especificar para comprobar el estado:
- Rutas de ejecución : para comprobar si un servidor se está ejecutando, se usa una ruta de ejecución.
- Rutas de preparación : para comprobar si un servidor está listo para funcionar, use una ruta de preparación.
En el contexto de la inferencia de aprendizaje automático, un servidor puede responder con un código de estado 200 Ok a una solicitud de ejecución antes de cargar un modelo. El servidor puede responder con un código de estado 200 OK a una solicitud de disponibilidad solo después de cargar el modelo en memoria.
Para obtener más información sobre los sondeos de estado activo y preparación, consulte Configurar sondeos de estado activo, preparación y inicio.
El servidor de API que elija determina las rutas de ejecución y preparación. Identifica ese servidor en un paso anterior al probar el contenedor localmente. En este artículo, la implementación de ejemplo usa la misma ruta de acceso para las rutas de ejecución y preparación, ya que TF Serving solo define una ruta de ejecución. Para ver otras formas de definir las rutas, consulte otros ejemplos.
Rutas de puntuación
El servidor de API que usa proporciona una manera de recibir la carga útil en la que trabajar. En el contexto de la inferencia de aprendizaje automático, un servidor recibe los datos de entrada a través de una ruta específica. Identifique esa ruta para el servidor de API al probar el contenedor localmente en un paso anterior. Especifique esa ruta como ruta de puntuación al definir la implementación que se va a crear.
La exitosa creación de la implementación también actualiza el parámetro scoring_uri
del punto de conexión. Para comprobar este hecho, ejecute el siguiente comando: az ml online-endpoint show -n <endpoint-name> --query scoring_uri
.
Buscar el modelo montado
Al implementar un modelo como un punto de conexión en línea, Azure Machine Learning monta el modelo en el punto de conexión. Cuando se monta el modelo, puede implementar nuevas versiones del modelo sin tener que crear una nueva imagen de Docker. De forma predeterminada, un modelo registrado con el nombre my-model y la versión 1 se encuentra en la siguiente ruta de acceso dentro del contenedor implementado: /var/azureml-app/azureml-models/my-model/1.
Por ejemplo, considere la siguiente configuración:
- Estructura de directorios en la máquina local de /azureml-examples/cli/endpoints/online/custom-container
- Nombre de modelo de
half_plus_two
Supongamos que el archivo tfserving-deployment.yml contiene las siguientes líneas en su model
sección. En esta sección, el name
valor hace referencia al nombre que se usa para registrar el modelo en Azure Machine Learning.
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
En este caso, al crear una implementación, el modelo se encuentra en la carpeta siguiente: /var/azureml-app/azureml-models/tfserving-mounted/1.
Puede configurar opcionalmente el valor model_mount_path
. Al ajustar esta configuración, puede cambiar la ruta de acceso donde se monta el modelo.
Importante
El model_mount_path
valor debe ser una ruta de acceso absoluta válida en Linux (el sistema operativo de la imagen de contenedor).
Al cambiar el valor de model_mount_path
, también debe actualizar la variable de entorno MODEL_BASE_PATH
. Ajuste MODEL_BASE_PATH
al mismo valor que model_mount_path
para evitar una implementación fallida debido a un error relacionado con la ruta de acceso base que no se ha encontrado.
Por ejemplo, puede agregar el model_mount_path
parámetro al archivo tfserving-deployment.yml. También puede actualizar el valor MODEL_BASE_PATH
en ese archivo.
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
environment_variables:
MODEL_BASE_PATH: /var/tfserving-model-mount
...
En la implementación, el modelo se encuentra en /var/tfserving-model-mount/tfserving-mounted/1. Ya no está en azureml-app/azureml-models, sino en la ruta de acceso de montaje que ha especificado:
Creación del punto de conexión y la implementación
Después de construir el archivo YAML, use el siguiente comando para crear el punto de conexión:
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml
Use el comando siguiente para crear la implementación. Este paso puede ejecutarse durante unos minutos.
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic
Invocación del punto de conexión
Una vez completada la implementación, realice una solicitud de puntuación al punto de conexión implementado.
RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)
Eliminación del punto de conexión
Si ya no necesita el punto de conexión, ejecute el siguiente comando para eliminarlo:
az ml online-endpoint delete --name tfserving-endpoint