Système d'inférence TensorFlow évolutif

Last reviewed 2023-11-02 UTC

Cette série sur l'architecture de référence décrit comment concevoir et déployer un système hautement performant d'inférence en ligne pour les modèles de deep learning à l'aide d'un GPU NVIDIA® T4 et du serveur d'inférence Triton.

Cette architecture vous permet de créer un système qui utilise des modèles de machine learning et capable d'exploiter l'accélération GPU. Google Kubernetes Engine (GKE) vous permet de procéder au scaling du système en fonction de la croissance du nombre de clients. Vous pouvez améliorer le débit et réduire la latence du système en appliquant les techniques d'optimisation décrites dans cette série.

Cette série est destinée aux développeurs qui connaissent déjà les frameworks de Google Kubernetes Engine et de machine learning (ML), y compris TensorFlow et NVIDIA TensorRT.

Les documents suivants sont inclus dans cette série :

Architecture

Le schéma suivant illustre l'architecture du système d'inférence.

Architecture du système d'inférence.

Cette architecture comprend les composants suivants :

  • Cloud Load Balancing : envoie le trafic de la requête vers cluster GKE le plus proche du client.

  • Cluster GKE : contient les nœuds de cluster et les serveurs de surveillance. Si les clients envoient des requêtes provenant de plusieurs régions, vous pouvez déployer des clusters GKE dans plusieurs régions. Vous déployez l'outil de test de charge Locust sur le même cluster.

  • Nœuds de cluster avec accélérateur GPU : contient les pods du serveur d'inférence Triton. Un seul pod est déployé pour chaque nœud (un seul GPU ne peut pas être partagé avec plusieurs pods).

  • Serveur d'inférence Triton : diffuse les modèles ResNet-50 que vous créez. Le serveur fournit un service d'inférence via un point de terminaison HTTP ou gRPC. Le service d'inférence permet aux clients distants de demander l'inférence de tout modèle géré par le serveur.

  • NVIDIA T4 : améliore les performances d'inférence. Il doit y avoir un GPU NVIDIA T4 pour chaque pod. Ce GPU est doté de cœurs Tensor, à savoir des unités de traitement spécialisées qui prennent en charge et accélèrent les calculs INT8 et FP16.

  • Serveurs de surveillance : collectent des données de métriques sur l'utilisation du GPU et de la mémoire par Triton. Vous utilisez Prometheus pour la surveillance et les alertes d'événements. Vous utilisez Grafana pour visualiser et analyser les données de performances stockées dans Prometheus.

Considérations de conception

Les consignes suivantes peuvent vous aider à développer une architecture répondant aux exigences de votre organisation en termes de fiabilité et de performances.

Fiabilité

Cette architecture utilise GKE pour l'évolutivité et la gestion flexible des ressources.

Déployer le système sur GKE vous permet de procéder au scaling du système en fonction du nombre de clients. Vous pouvez déployer des clusters GKE dans plusieurs régions et augmenter le nombre de nœuds dans le cluster.

Optimisation des performances

Lorsque vous ajustez les performances, suivez ces consignes générales :

  • Définissez les métriques de performance et la performance cible en fonction du cas d'utilisation du système.
  • Mesurez les performances de référence avant d'appliquer les ajustements.
  • Appliquez une modification et observez l'amélioration. Si vous appliquez plusieurs modifications à la fois, vous ne pouvez pas identifier celle qui a entraîné l'amélioration.
  • Recueillez les métriques appropriées pour comprendre les caractéristiques de performance, et décidez d'une action ultérieure pour l'ajustement des performances.

En suivant ces consignes, vous mesurez l'amélioration des performances générée par les facteurs suivants :

  • TensorRT (optimisation de graphe) : TensorRT applique des optimisations de graphe pour NVIDIA T4. Par exemple, il modifie automatiquement les modèles de deep learning afin qu'ils puissent être traités avec Tensor Core. Tout d'abord, vous observez les performances d'inférence sans TensorRT comme référence. Vous observez ensuite l'amélioration des performances après l'application de l'optimisation de graphe TensorRT.

  • Conversion FP16 : NVIDIA T4 est compatible avec FP32 (virgule flottante de 32 bits) et FP16 pour les calculs à virgule flottante. Lorsque vous convertissez la précision des variables de la valeur par défaut FP32 en FP16, vous pouvez améliorer les performances d'inférence.

  • quantification INT8 : La quantification est une technique d'optimisation des modèles de deep learning qui améliore les performances de calcul des GPU. NVIDIA T4 est compatible avec les types de variables INT8 (entiers de 8 bits) pour la quantification. Par rapport à la conversion vers FP16, la quantification INT8 peut offrir de meilleures performances mais peut potentiellement réduire la justesse. Toutefois, TensorRT utilise un processus de calibrage qui minimise la perte d'informations lors des calculs.

  • Taille de lot et nombre de groupes d'instances : Vous pouvez ajuster la taille de lot et le nombre de groupes d'instances à l'aide de Triton. Par exemple, lorsque vous définissez la taille de lot sur 16, les requêtes d'inférence sont stockées dans une file d'attente par lot et 16 requêtes sont traitées comme un seul lot. De même, si vous définissez le nombre de groupes d'instances sur 4, plusieurs requêtes sont traitées avec quatre threads en parallèle. Dans ce scénario, il y a 16 requêtes dans chaque lot et 4 threads en parallèle, ce qui signifie que 64 requêtes sont traitées simultanément sur un seul GPU.

    L'augmentation du nombre de groupes d'instances permet à TensorRT d'optimiser l'utilisation des GPU. Dans le même temps, en ajustant la taille de lot, vous permettez à Triton d'optimiser les calculs sur le GPU. Par exemple, il peut combiner plusieurs calculs provenant de différentes requêtes en une seule tâche de calcul sur Tensor Cores.

Déploiement

Pour déployer cette architecture, consultez la section Déployer un système d'inférence TensorFlow évolutif.

Pour mesurer et régler le déploiement, consultez la section Mesurer et régler les performances d'un système d'inférence TensorFlow.

Étapes suivantes