Haute performance avec un serveur d’inférence Triton

S’APPLIQUE À :Extension Azure CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)

Découvrez comment utiliser le serveur NVIDIA Triton Inference dans Azure Machine Learning avec des points de terminaison en ligne.

Triton est un logiciel open source multi-infrastructures qui est optimisé pour l’inférence. Il prend en charge les infrastructures de Machine Learning populaires comme TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT, etc. Il peut être utilisé pour vos charges de travail de processeur ou GPU.

Vous pouvez adopter principalement deux approches pour tirer profit des modèles Triton lors de leur déploiement sur un point de terminaison en ligne : le déploiement sans code ou le déploiement de code complet (apportez votre propre conteneur).

  • Le déploiement sans code pour les modèles Triton est un moyen simple de les déployer, car vous devez uniquement apporter des modèles Triton à déployer.
  • Le déploiement de code complet (apportez votre propre conteneur) pour les modèles Triton est plus avancé pour les déployer, car vous disposez d’un contrôle complet sur la personnalisation des configurations disponibles pour le serveur d’inférence Triton.

Pour les deux options, le serveur d’inférence Triton effectue une inférence basée sur le modèle Triton tel que défini par NVIDIA. Par exemple, des modèles d’ensemble peuvent être utilisés pour des scénarios plus avancés.

Triton est pris en charge dans les points de terminaison en ligne managés et les points de terminaison en ligne Kubernetes.

Dans cet article, vous allez découvrir comment déployer un modèle à l’aide d’un déploiement sans code pour Triton sur un point de terminaison en ligne managé. Vous trouverez des informations sur l’utilisation de l’interface CLI (ligne de commande), du SDK Python v2 et d’Azure Machine Learning studio. Si vous souhaitez personnaliser davantage directement à l’aide de la configuration du serveur d’inférence Triton, veuillez consulter la rubrique Utiliser un conteneur personnalisé pour déployer un modèle et l’exemple BYOC pour Triton (définition de déploiement et script de bout en bout).

Remarque

L’utilisation du conteneur NVIDIA Triton Inference Server est régie par le Contrat de licence NVIDIA AI Enterprise Software et peut être utilisée pendant 90 jours sans abonnement de produit d’entreprise. Pour plus d’informations, consultez NVIDIA AI Enterprise sur Azure Machine Learning.

Prérequis

Avant de suivre les étapes décrites dans cet article, vérifiez que vous disposez des composants requis suivants :

  • Environnement Python 3.8 (ou supérieur) opérationnel.

  • Vous devez avoir des packages Python supplémentaires installés pour le scoring et vous pouvez les installer avec le code ci-dessous. Ils comprennent :

    • Numpy : bibliothèque de calcul numérique et de tableau
    • Client du serveur d’inférence Triton : facilite les demandes adressées au serveur d’inférence Triton
    • Pillow : bibliothèque pour les opérations d’image
    • Gevent : bibliothèque de mise en réseau utilisée lors de la connexion au serveur Triton
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Accès aux machines virtuelles de la série NCv3 pour votre abonnement Azure.

    Important

    Vous devez peut-être demander une augmentation du quota pour votre abonnement pour pouvoir utiliser cette série de machines virtuelles. Pour plus d’informations, consultez Série NCv3.

Le serveur NVIDIA Triton Inference nécessite une structure de référentiel de modèles spécifique, avec un répertoire pour chaque modèle et des sous-répertoires pour la version de modèle. Le contenu de chaque sous-répertoire de version de modèle est déterminé par le type du modèle et les spécifications du serveur back-end sur lequel s’appuie le modèle. Pour afficher l’ensemble de la structure du référentiel de modèles https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

Les informations contenues dans ce document sont basées sur l’utilisation d’un modèle stocké au format ONNX, de sorte que la structure de répertoires du référentiel de modèles est <model-repository>/<model-name>/1/model.onnx. Plus précisément, ce modèle effectue l’identification de l’image.

Les informations de cet article sont basées sur des exemples de code contenus dans le référentiel azureml-examples. Pour exécuter les commandes localement sans avoir à copier/coller le fichier YAML et d’autres fichiers, clonez le référentiel, puis remplacez les répertoires par le répertoire cli dans le référentiel :

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples
cd cli

Si vous n’avez pas encore défini les paramètres par défaut pour l’interface CLI Azure, enregistrez vos paramètres par défaut. Pour éviter de transmettre plusieurs fois les valeurs de votre abonnement, de votre espace de travail et de votre groupe de ressources, utilisez les commandes suivantes. Remplacez les paramètres suivants par des valeurs pour votre configuration spécifique :

  • Remplacez <subscription> par l’identifiant de votre abonnement Azure.
  • Remplacez <workspace> par le nom de votre espace de travail Azure Machine Learning.
  • Remplacez <resource-group> par le groupe de ressources Azure qui contient votre espace de travail.
  • Remplacez <location> par la région Azure qui contient votre espace de travail.

Conseil

Vous pouvez afficher les valeurs par défaut actuelles à l’aide de la commande az configure -l.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Définir la configuration du déploiement

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)

Cette section explique comment effectuer un déploiement sur un point de terminaison en ligne managé à l’aide de l’interface Azure CLI avec l’extension Machine Learning (v2).

Important

Pour le déploiement sans code Triton, les tests via des points de terminaison locaux ne sont pas pris en charge actuellement.

  1. Pour éviter de taper un chemin pour plusieurs commandes, utilisez la commande suivante afin de définir une variable d’environnement BASE_PATH. Cette variable pointe vers le répertoire où se trouvent les fichiers de modèle et de configuration YAML associés :

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Utilisez la commande suivante pour définir le nom du point de terminaison qui va être créé. Dans cet exemple, un nom aléatoire est créé pour le point de terminaison :

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Créez un fichier de configuration YAML pour votre point de terminaison. L’exemple suivant configure le nom et le mode d’authentification du point de terminaison. Le point de terminaison utilisé dans les commandes suivantes se trouve à l’emplacement /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml dans le référentiel azureml-examples que vous avez cloné auparavant :

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Créez un fichier de configuration YAML pour le déploiement. L’exemple suivant configure un déploiement du modèle nommé blue sur le point de terminaison défini à l’étape précédente. Le point de terminaison utilisé dans les commandes suivantes se trouve à l’emplacement /cli/endpoints/online/triton/single-model/create-managed-deployment.yml dans le référentiel azureml-examples que vous avez cloné auparavant :

    Important

    Pour que le déploiement MLflow sans code (NCD) fonctionne, type doit être défini sur triton_model​, type: triton_model​. Pour plus d’informations, consultez le schéma YAML du modèle CLI (v2).

    Ce déploiement utilise une machine virtuelle Standard_NC6s_v3. Vous devrez peut-être demander une augmentation du quota pour votre abonnement pour utiliser cette machine virtuelle. Pour plus d’informations, consultez Série 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
    

Déployer dans Azure

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)

  1. Pour créer un point de terminaison à l’aide de la configuration YAML, utilisez la commande suivante :

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Pour créer le déploiement à l’aide de la configuration YAML, utilisez la commande suivante :

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
    

Tester le point de terminaison

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)

Une fois votre déploiement terminé, utilisez la commande suivante pour effectuer une requête de scoring sur le point de terminaison déployé.

Conseil

Le fichier /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py dans le référentiel azureml-examples est utilisé pour le scoring. L’image transmise au point de terminaison doit être traitée en amont pour respecter les exigences de taille, de type et de format, et en aval pour afficher l’étiquette prédite. triton_densenet_scoring.py utilise la bibliothèque tritonclient.http pour communiquer avec le serveur Triton Inference. Ce fichier s’exécute côté client.

  1. Pour récupérer l’URI de scoring du point de terminaison, utilisez la commande suivante :

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Pour récupérer une clé d’authentification, utilisez la commande suivante :

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Pour effectuer le scoring des données avec le point de terminaison, utilisez la commande suivante : Cette opération envoie l’image d’un paon (https://aka.ms/peacock-pic) au point de terminaison :

    python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
    

    La réponse du script ressemble au texte suivant :

    Is server ready - True
    Is model ready - True
    /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt
    84 : PEACOCK
    

Supprimer le point de terminaison et le modèle

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)

  1. Une fois que vous avez terminé avec le point de terminaison, utilisez la commande suivante pour le supprimer :

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Utilisez la commande suivante pour archiver votre modèle :

    az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
    

Étapes suivantes

Pour en savoir plus, consultez les articles suivants :