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. La implementación sin código para los modelos de 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 Triton y un modelo 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.

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:

  • 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 .

  1. 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
    
  2. 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`
    
  3. 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
    
  4. 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 a triton_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
    

Implementación en Azure

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

  1. 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
    
  2. 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.

  1. 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%/*}
    
  2. 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)
    
  3. 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)

  1. 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
    
  2. 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: