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 :
L’interface CLI Azure et l’extension
ml
pour l’interface CLI Azure. Pour plus d’informations, consultez Installer, configurer et utiliser l’interface CLI (v2).Important
Les exemples CLI de cet article supposent que vous utilisez l’interpréteur de commandes Bash (ou compatible). Par exemple, à partir d’un système Linux ou d’un sous-système Windows pour Linux.
Un espace de travail Azure Machine Learning. Si vous n’en avez pas, suivez les étapes décrites dans la section Installation, configuration et utilisation de l’interface CLI (v2) pour en créer une.
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 ml Azure 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.
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
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`
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
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 surtriton_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 ml Azure CLI v2 (actuelle)
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
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 ml Azure 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.
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%/*}
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)
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 ml Azure CLI v2 (actuelle)
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
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 :
- Déployer des modèles avec REST
- Créer et utiliser des points de terminaison en ligne managés dans le studio
- Déploiement sécurisé pour les points de terminaison en ligne
- Comment mettre à l’échelle automatiquement des points de terminaison en ligne gérés
- Voir les coûts d’un point de terminaison en ligne managé Azure Machine Learning
- Accéder aux ressources Azure avec un point de terminaison en ligne managé et une identité managée
- Résolution des problèmes de déploiement de points de terminaison en ligne managés