Servicio de alto rendimiento con Triton Inference Server
SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)
Obtenga información sobre cómo usar NVIDIA Triton Inference Server en Azure Machine Learning con puntos de conexión en línea.
Triton es un software de código abierto de varios marcos que está optimizado para la inferencia. Admite marcos de aprendizaje automático populares como TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT, etc. Se puede usar para las cargas de trabajo de CPU o GPU.
Hay principalmente dos enfoques que puede tomar para aprovechar los modelos de Triton al implementarlos en el punto de conexión en línea: implementación sin código o implementación de código completo (Traiga su propio contenedor).
- La implementación sin código para los modelos de Triton es una manera sencilla de implementarlos, ya que solo necesita traer los modelos de Triton para implementarlos.
- La implementación de código completo ("Traiga su propio contenedor") para los modelos de Triton es una manera más avanzada de implementarlos, ya que tiene control total sobre la personalización de las configuraciones disponibles para el servidor de inferencia de Triton.
Para ambas opciones, el servidor de inferencia de Triton realizará la inferencia en función del modelo de Triton tal como se define en NVIDIA. Por ejemplo, los modelos de conjunto se pueden usar para escenarios más avanzados.
Triton se admite en puntos de conexión en línea administrados y en puntos de conexión en línea de Kubernetes.
En este artículo, aprenderá a implementar un modelo mediante la implementación sin código para Triton en un punto de conexión en línea administrado. Se proporciona información sobre el uso de la CLI (línea de comandos), el SDK de Python v2 y Estudio de Azure Machine Learning. Si desea agregar más personalización directamente mediante la configuración del servidor de inferencia de Triton, consulte Uso de un contenedor personalizado para implementar un modelo y el ejemplo BYOC para Triton (definición de implementación y script de un extremo a otro).
Nota:
El uso del contenedor NVIDIA Triton Inference Server se rige por el contrato de licencia de NVIDIA AI Enterprise Software y se puede usar durante 90 días sin una suscripción de producto empresarial. Para más información, consulte NVIDIA AI Enterprise en Azure Machine Learning.
Requisitos previos
Antes de seguir los pasos de este artículo, asegúrese de que tiene los siguientes requisitos previos:
La CLI de Azure y la extensión
ml
a la CLI de Azure. Para más información, consulte Instalación, configuración y uso de la CLI v2.Importante
En los ejemplos de la CLI de este artículo se supone que usa el shell de Bash (o compatible). Por ejemplo, de un sistema Linux o Subsistema de Windows para Linux.
Un área de trabajo de Azure Machine Learning. Si no tiene uno, siga los pasos descritos en el artículo Instalación, configuración y uso de la CLI (v2) para crearlo.
Un entorno de Python 3.8 (o superior) en funcionamiento.
Debe tener instalados paquetes de Python adicionales para la puntuación. Puede instalarlos con el código siguiente. Incluyen:
- Numpy: una biblioteca de cálculo numérico y matricial
- Triton Inference Server Client: facilita las solicitudes al servidor de inferencias de Triton
- Pillow: biblioteca para las operaciones con imágenes
- Gevent: biblioteca de conexión en red que se usa al conectarse al servidor Triton
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
Acceso a las VM de la serie NCv3 de su suscripción de Azure.
Importante
Es posible que tenga que solicitar un aumento de cuota para su suscripción para poder usar esta serie de VM. Para más información, consulte Serie NCv3.
NVIDIA Triton Inference Server requiere una estructura de repositorio de modelos específica, donde haya un directorio para cada modelo y subdirectorios para la versión del modelo. El contenido de cada subdirectorio de versión del modelo viene determinado por el tipo del modelo y los requisitos del back-end que admite el modelo. Para ver toda la estructura del repositorio de modelos https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files
La información de este documento se basa en el uso de un modelo almacenado en formato ONNX, por lo que la estructura de directorios del repositorio de modelos es <model-repository>/<model-name>/1/model.onnx
. En concreto, este modelo realiza la identificación de la imagen.
La información de este artículo se basa en ejemplos de código que se encuentran en el repositorio azureml-examples. Para ejecutar los comandos localmente sin tener que copiar y pegar los archivos YAML y otros, clone el repositorio y luego cambie los directorios al directorio cli
del repositorio:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples
cd cli
Si aún no ha establecido los valores predeterminados de la CLI de Azure, guarde la configuración predeterminada. Para evitar pasar los valores de la suscripción, el área de trabajo y el grupo de recursos varias veces, ejecute los comandos siguientes. Reemplace los parámetros siguientes por valores para su configuración específica:
- Reemplace
<subscription>
con la identificación de su suscripción de Azure. - Reemplace
<workspace>
por el nombre del área de trabajo de Azure Machine Learning. - Reemplace
<resource-group>
por el grupo de recursos de Azure que contiene el área de trabajo. - Reemplace
<location>
por la región de Azure que contiene el área de trabajo.
Sugerencia
Puede ver cuáles son los valores predeterminados actuales mediante el comando az configure -l
.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Definición de la configuración de la implementación
SE APLICA A: Extensión de ML de la CLI de Azure v2 (actual)
En esta sección se muestra cómo puede implementar en un punto de conexión en línea administrado mediante la CLI de Azure con la extensión de Machine Learning (v2).
Importante
En el caso de la implementación sin código de Triton, actualmente no se admiten las pruebas a través de puntos de conexión locales .
Para evitar escribir una ruta de acceso para varios comandos, use el siguiente comando para establecer una variable de entorno
BASE_PATH
. Esta variable apunta al directorio donde se encuentran el modelo y los archivos de configuración de YAML asociados:BASE_PATH=endpoints/online/triton/single-model
Use el siguiente comando para establecer el nombre del punto de conexión que se creará. En este ejemplo, se crea un nombre aleatorio para el punto de conexión:
export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
Cree un archivo de configuración de YAML para el punto de conexión. En el ejemplo siguiente se configuran el nombre y el modo de autenticación del punto de conexión. El que se usa en los siguientes comandos se encuentra en
/cli/endpoints/online/triton/single-model/create-managed-endpoint.yml
el repositorio azureml-examples que clonó anteriormente:create-managed-endpoint.yaml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: aml_token
Cree un archivo de configuración de YAML para la implementación. En el ejemplo siguiente se configura una implementación denominada blue en el punto de conexión definido en el paso anterior. El que se usa en los siguientes comandos se encuentra en
/cli/endpoints/online/triton/single-model/create-managed-deployment.yml
en el repositorio azureml-examples que clonó anteriormente:Importante
Para que la implementación sin código (NCD) de Triton funcione, es necesario establecer
type
atriton_model
,type: triton_model
. Para obtener más información, consulte el esquema de YAML del modelo de la CLI (v2).Esta implementación usa una VM Standard_NC6s_v3. Es posible que deba solicitar un aumento de cuota para su suscripción para poder usar esta VM. Para más información, consulte Serie NCv3.
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: blue endpoint_name: my-endpoint model: name: sample-densenet-onnx-model version: 1 path: ./models type: triton_model instance_count: 1 instance_type: Standard_NC6s_v3
Implementar en Azure
SE APLICA A: Extensión de ML de la CLI de Azure v2 (actual)
Para crear un nuevo punto de conexión mediante la configuración de YAML, use el siguiente comando:
az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
Para crear la implementación mediante la configuración de YAML, use el siguiente comando:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
Prueba del punto de conexión
SE APLICA A: Extensión de ML de la CLI de Azure v2 (actual)
Una vez completada la implementación, use el siguiente comando para realizar una solicitud de puntuación al punto de conexión implementado.
Sugerencia
El archivo /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py
del repositorio azureml-examples se usa para la puntuación. La imagen que se pasa al punto de conexión necesita un procesamiento previo para cumplir los requisitos de tamaño, tipo y formato, y el procesamiento posterior para mostrar la etiqueta prevista. El objeto triton_densenet_scoring.py
usa la biblioteca tritonclient.http
para comunicarse con Triton Inference Server. Este archivo se ejecuta del lado cliente.
Para obtener el URI de puntuación del punto de conexión, use el siguiente comando:
scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv) scoring_uri=${scoring_uri%/*}
Para obtener una clave de autenticación, use el siguiente comando:
auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
Para puntuar los datos con el punto de conexión, use el comando siguiente. Envía la imagen de un pavo real (https://aka.ms/peacock-pic) al punto de conexión:
python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
La respuesta del script es similar al texto siguiente:
Is server ready - True Is model ready - True /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt 84 : PEACOCK
Eliminación del punto de conexión y el modelo
SE APLICA A: Extensión de ML de la CLI de Azure v2 (actual)
Una vez que haya terminado con el punto de conexión, use el siguiente comando para eliminarlo:
az ml online-endpoint delete -n $ENDPOINT_NAME --yes
Use el siguiente comando para archivar el modelo:
az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
Pasos siguientes
Para más información, consulte estos artículos:
- Implementación de modelos con REST
- Creación y uso de puntos de conexión en línea administrados en studio
- Implementación segura para puntos de conexión en línea
- Escalabilidad automática de puntos de conexión administrados en línea
- Visualización de los costos de un punto de conexión en línea administrado de Azure Machine Learning
- Acceso a recursos de Azure con un punto de conexión en línea administrado e identidad administrada
- Solución de problemas de implementación de puntos de conexión en línea administrados