Refresh

This website www.unite.ai/fr/tensorrt-llm-a-comprehensive-guide-to-optimizing-large-language-model-inference-for-maximum-performance/ is currently offline. Cloudflare's Always Online™ shows a snapshot of this web page from the Internet Archive's Wayback Machine. To check for the live version, click Refresh.

Suivez nous sur

TensorRT-LLM : un guide complet pour optimiser l'inférence de modèles de langage volumineux pour des performances maximales

Intelligence Artificielle

TensorRT-LLM : un guide complet pour optimiser l'inférence de modèles de langage volumineux pour des performances maximales

mm

Publié

 on

Quantification TensorRT-LLM NVIDEA, fusion d'opérations, précision FP8 et prise en charge multi-GPU

Alors que la demande de modèles de langage volumineux (LLM) continue d'augmenter, garantir une inférence rapide, efficace et évolutive est devenu plus crucial que jamais. TensorRT-LLM TensorRT-LLM intervient pour relever ce défi en fournissant un ensemble d'outils et d'optimisations puissants spécialement conçus pour l'inférence LLM. TensorRT-LLM offre un éventail impressionnant d'améliorations des performances, telles que la quantification, la fusion de noyaux, le traitement par lots en vol et la prise en charge multi-GPU. Ces avancées permettent d'atteindre des vitesses d'inférence jusqu'à 8 fois plus rapides que les méthodes traditionnelles basées sur le processeur, transformant ainsi la façon dont nous déployons les LLM en production.

Ce guide complet explore tous les aspects de TensorRT-LLM, de son architecture et de ses fonctionnalités clés aux exemples pratiques de déploiement de modèles. Que vous soyez ingénieur en IA, développeur de logiciels ou chercheur, ce guide vous donnera les connaissances nécessaires pour exploiter TensorRT-LLM afin d'optimiser l'inférence LLM sur les GPU NVIDIA.

Accélérer l'inférence LLM avec TensorRT-LLM

TensorRT-LLM offre des améliorations spectaculaires en termes de performances d'inférence LLM. Selon les tests de NVIDIA, les applications basées sur TensorRT se révèlent jusqu'à Déploiements 8x plus rapides des vitesses d'inférence par rapport aux plates-formes uniquement basées sur le processeur. Il s'agit d'une avancée cruciale dans les applications en temps réel telles que les chatbots, les systèmes de recommandation et les systèmes autonomes qui nécessitent des réponses rapides.

Comment ça marche

TensorRT-LLM accélère l'inférence en optimisant les réseaux neuronaux pendant le déploiement à l'aide de techniques telles que :

  • Quantification:Réduit la précision des poids et des activations, réduisant la taille du modèle et améliorant la vitesse d'inférence.
  • Fusion de couches et de tenseurs:Fusionne des opérations telles que des fonctions d'activation et des multiplications de matrices en une seule opération.
  • Réglage du noyau: Sélectionne les noyaux CUDA optimaux pour le calcul GPU, réduisant ainsi le temps d'exécution.

Ces optimisations garantissent que vos modèles LLM fonctionnent efficacement sur une large gamme de plates-formes de déploiement, des centres de données hyperscale aux systèmes embarqués.

Optimisation des performances d'inférence avec TensorRT

Construit sur le modèle de programmation parallèle CUDA de NVIDIA, TensorRT fournit des optimisations hautement spécialisées pour l'inférence sur les GPU NVIDIA. En rationalisant les processus tels que la quantification, le réglage du noyau et la fusion des opérations de tenseur, TensorRT garantit que les LLM peuvent s'exécuter avec une latence minimale.

Certaines des techniques les plus efficaces incluent :

  • Quantification:Cela réduit la précision numérique des paramètres du modèle tout en maintenant une grande précision, accélérant ainsi efficacement l'inférence.
  • Fusion Tensor:En fusionnant plusieurs opérations dans un seul noyau CUDA, TensorRT minimise la surcharge de mémoire et augmente le débit.
  • Réglage automatique du noyau: TensorRT sélectionne automatiquement le meilleur noyau pour chaque opération, optimisant l'inférence pour un GPU donné.

Ces techniques permettent à TensorRT-LLM d’optimiser les performances d’inférence pour les tâches d’apprentissage en profondeur telles que le traitement du langage naturel, les moteurs de recommandation et l’analyse vidéo en temps réel.

Accélérer les charges de travail de l'IA avec TensorRT

TensorRT accélère les charges de travail d'apprentissage en profondeur en incorporant des optimisations de précision telles que INT8 et FP16. Ces formats à précision réduite permettent une inférence beaucoup plus rapide tout en maintenant la précision. Cela est particulièrement utile dans les applications en temps réel où une faible latence est une exigence critique.

INT8 et FP16 les optimisations sont particulièrement efficaces dans :

  • Video Streaming:Les tâches de traitement vidéo basées sur l’IA, comme la détection d’objets, bénéficient de ces optimisations en réduisant le temps nécessaire au traitement des images.
  • Systèmes de recommandation:En accélérant l’inférence pour les modèles qui traitent de grandes quantités de données utilisateur, TensorRT permet une personnalisation en temps réel à grande échelle.
  • Traitement du langage naturel (PNL):TensorRT améliore la vitesse des tâches NLP telles que la génération de texte, la traduction et le résumé, les rendant adaptées aux applications en temps réel.

Déployez, exécutez et faites évoluer avec NVIDIA Triton

Une fois votre modèle optimisé avec TensorRT-LLM, vous pouvez facilement le déployer, l'exécuter et le mettre à l'échelle à l'aide de Serveur d'inférence NVIDIA Triton. Triton est un logiciel open source qui prend en charge le traitement par lots dynamique, les ensembles de modèles et le débit élevé. Il fournit un environnement flexible pour la gestion des modèles d'IA à grande échelle.

Certaines des caractéristiques clés incluent:

  • Exécution simultanée du modèle:Exécutez plusieurs modèles simultanément, maximisant ainsi l’utilisation du GPU.
  • Traitement par lots dynamique:Combine plusieurs demandes d'inférence en un seul lot, réduisant ainsi la latence et augmentant le débit.
  • Entrées audio/vidéo en streaming:Prend en charge les flux d'entrée dans les applications en temps réel, telles que les analyses vidéo en direct ou les services de conversion de la parole en texte.

Cela fait de Triton un outil précieux pour le déploiement de modèles optimisés TensorRT-LLM dans des environnements de production, garantissant une évolutivité et une efficacité élevées.

Fonctionnalités principales de TensorRT-LLM pour l'inférence LLM

API Python Open Source

TensorRT-LLM fournit une solution hautement modulaire et API Python open source, simplifiant le processus de définition, d'optimisation et d'exécution des LLM. L'API permet aux développeurs de créer des LLM personnalisés ou de modifier des LLM prédéfinis en fonction de leurs besoins, sans nécessiter de connaissances approfondies de CUDA ou des frameworks d'apprentissage profond.

Traitement par lots en vol et attention paginée

L'une des fonctionnalités remarquables de TensorRT-LLM est Traitement par lots en vol, qui optimise la génération de texte en traitant plusieurs requêtes simultanément. Cette fonctionnalité minimise le temps d'attente et améliore l'utilisation du GPU en regroupant les séquences de manière dynamique.

En outre, Attention paginée garantit que l'utilisation de la mémoire reste faible même lors du traitement de longues séquences d'entrée. Au lieu d'allouer une mémoire contiguë à tous les jetons, l'attention paginée divise la mémoire en « pages » qui peuvent être réutilisées de manière dynamique, évitant ainsi la fragmentation de la mémoire et améliorant l'efficacité.

Inférence multi-GPU et multi-nœuds

Pour les modèles plus volumineux ou les charges de travail plus complexes, TensorRT-LLM prend en charge multi-GPU et inférence multi-nœuds. Cette capacité permet la distribution des calculs de modèle sur plusieurs GPU ou nœuds, améliorant ainsi le débit et réduisant le temps d'inférence global.

Prise en charge du 8e PC

Avec l'avènement de FP8 (virgule flottante 8 bits), TensorRT-LLM exploite les GPU H100 de NVIDIA pour convertir les pondérations des modèles dans ce format pour une inférence optimisée. FP8 permet une consommation de mémoire réduite et un calcul plus rapide, particulièrement utile dans les déploiements à grande échelle.

Architecture et composants de TensorRT-LLM

Comprendre l'architecture de TensorRT-LLM vous aidera à mieux exploiter ses capacités d'inférence LLM. Décomposons les composants clés :

Définition du modèle

TensorRT-LLM vous permet de définir des LLM à l'aide d'une API Python simple. L'API construit un représentation graphique du modèle, facilitant la gestion des couches complexes impliquées dans les architectures LLM comme GPT ou BERT.

Fixations de poids

Avant de compiler le modèle, les pondérations (ou paramètres) doivent être liées au réseau. Cette étape garantit que les pondérations sont intégrées au moteur TensorRT, ce qui permet une inférence rapide et efficace. TensorRT-LLM permet également de mettre à jour les pondérations après la compilation, ce qui ajoute de la flexibilité aux modèles qui nécessitent des mises à jour fréquentes.

Recherche de motifs et fusion

Opération Fusion est une autre fonctionnalité puissante de TensorRT-LLM. En fusionnant plusieurs opérations (par exemple, des multiplications de matrices avec des fonctions d'activation) dans un seul noyau CUDA, TensorRT minimise la surcharge associée aux lancements multiples du noyau. Cela réduit les transferts de mémoire et accélère l'inférence.

Plugins

Pour étendre les capacités de TensorRT, les développeurs peuvent écrire plugins—des noyaux personnalisés qui effectuent des tâches spécifiques comme l'optimisation des blocs d'attention multi-têtes. Par exemple, Attention Flash le plugin améliore considérablement les performances des couches d'attention LLM.

Benchmarks : Gains de performances de TensorRT-LLM

TensorRT-LLM démontre des gains de performances significatifs pour l'inférence LLM sur différents GPU. Voici une comparaison de la vitesse d'inférence (mesurée en jetons par seconde) à l'aide de TensorRT-LLM sur différents GPU NVIDIA :

Modèle La précision Longueur d'entrée/sortie H100 (80 Go) A100 (80 Go) L40S FP8
GPTJ 6B FP8 128/128 34,955 11,206 6,998
GPTJ 6B FP8 2048/128 2,800 1,354 747
LLaMA v2 7B FP8 128/128 16,985 10,725 6,121
LLaMA v3 8B FP8 128/128 16,708 12,085 8,273

Ces tests montrent que TensorRT-LLM offre des améliorations substantielles en termes de performances, en particulier pour les séquences plus longues.

Travaux pratiques : Installation et création de TensorRT-LLM

Étape 1 : Créer un environnement de conteneur

Pour faciliter l'utilisation, TensorRT-LLM fournit des images Docker pour créer un environnement contrôlé pour la création et l'exécution de modèles.

docker build --pull \
             --target devel \
             --file docker/Dockerfile.multi \
             --tag tensorrt_llm/devel:latest .


Étape 2 : exécuter le conteneur

Exécutez le conteneur de développement avec accès aux GPU NVIDIA :

docker run --rm -it \
           --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all \
           --volume ${PWD}:/code/tensorrt_llm \
           --workdir /code/tensorrt_llm \
           tensorrt_llm/devel:latest

Étape 3 : créer TensorRT-LLM à partir de la source

À l'intérieur du conteneur, compilez TensorRT-LLM avec la commande suivante :

python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt
pip install ./build/tensorrt_llm*.whl

Cette option est particulièrement utile lorsque vous souhaitez éviter les problèmes de compatibilité liés aux dépendances Python ou lorsque vous vous concentrez sur l'intégration C++ dans les systèmes de production. Une fois la compilation terminée, vous trouverez les bibliothèques compilées pour l'environnement d'exécution C++ dans le cpp/build/tensorrt_llm répertoire, prêt à être intégré à vos applications C++.

Étape 4 : lier l'environnement d'exécution C++ TensorRT-LLM

Lors de l'intégration de TensorRT-LLM dans vos projets C++, assurez-vous que les chemins d'inclusion de votre projet pointent vers le cpp/include répertoire. Il contient les en-têtes d'API stables et pris en charge. Les bibliothèques TensorRT-LLM sont liées dans le cadre de votre processus de compilation C++.

Par exemple, la configuration CMake de votre projet peut inclure :

include_directories(${TENSORRT_LLM_PATH}/cpp/include)
link_directories(${TENSORRT_LLM_PATH}/cpp/build/tensorrt_llm)
target_link_libraries(your_project tensorrt_llm)

Cette intégration vous permet de profiter des optimisations TensorRT-LLM dans vos projets C++ personnalisés, garantissant une inférence efficace même dans des environnements de bas niveau ou de hautes performances.

Fonctionnalités avancées de TensorRT-LLM

TensorRT-LLM est bien plus qu'une simple bibliothèque d'optimisation. Elle comprend plusieurs fonctionnalités avancées qui aident à gérer les déploiements LLM à grande échelle. Ci-dessous, nous explorons certaines de ces fonctionnalités en détail :

1. Traitement par lots en vol

Le traitement par lots traditionnel implique d'attendre qu'un lot soit entièrement collecté avant de le traiter, ce qui peut entraîner des retards. Traitement par lots en vol modifie cela en démarrant dynamiquement l'inférence sur les requêtes terminées dans un lot tout en collectant d'autres requêtes. Cela améliore le débit global en minimisant le temps d'inactivité et en améliorant l'utilisation du GPU.

Cette fonctionnalité est particulièrement précieuse dans les applications en temps réel, telles que les chatbots ou les assistants vocaux, où le temps de réponse est critique.

2. Attention paginée

Attention paginée est une technique d'optimisation de la mémoire permettant de gérer de grandes séquences d'entrée. Au lieu d'exiger une mémoire contiguë pour tous les jetons d'une séquence (ce qui peut entraîner une fragmentation de la mémoire), Paged Attention permet au modèle de diviser les données du cache clé-valeur en « pages » de mémoire. Ces pages sont allouées et libérées de manière dynamique selon les besoins, optimisant ainsi l'utilisation de la mémoire.

L'attention paginée est essentielle pour gérer de grandes longueurs de séquence et réduire la surcharge de mémoire, en particulier dans les modèles génératifs comme GPT et LLaMA.

3. Plugins personnalisés

TensorRT-LLM vous permet d'étendre ses fonctionnalités avec plugins personnalisésLes plugins sont des noyaux définis par l'utilisateur qui permettent des optimisations ou des opérations spécifiques non couvertes par la bibliothèque TensorRT standard.

Par exemple, Attention Flash Le plugin est un noyau personnalisé bien connu qui optimise les couches d'attention multi-têtes dans les modèles basés sur Transformer. En utilisant ce plugin, les développeurs peuvent obtenir des accélérations substantielles dans le calcul de l'attention, l'un des composants les plus gourmands en ressources des LLM.

Pour intégrer un plug-in personnalisé dans votre modèle TensorRT-LLM, vous pouvez écrire un noyau CUDA personnalisé et l'enregistrer auprès de TensorRT. Le plug-in sera appelé pendant l'exécution du modèle, offrant des améliorations de performances sur mesure.

4. FP8 Precision sur NVIDIA H100

Avec Précision FP8TensorRT-LLM tire parti des dernières innovations matérielles de NVIDIA dans le Architecture de la trémie H100. FP8 réduit l'empreinte mémoire des LLM en stockant les pondérations et les activations dans un format à virgule flottante 8 bits, ce qui permet un calcul plus rapide sans sacrifier beaucoup de précision. TensorRT-LLM compile automatiquement les modèles pour utiliser des noyaux FP8 optimisés, accélérant encore davantage les temps d'inférence.

Cela fait de TensorRT-LLM un choix idéal pour les déploiements à grande échelle nécessitant des performances et une efficacité énergétique de premier ordre.

Exemple : déploiement de TensorRT-LLM avec Triton Inference Server

Pour les déploiements de production, NVIDIA Serveur d'inférence Triton fournit une plate-forme robuste pour la gestion de modèles à grande échelle. Dans cet exemple, nous allons montrer comment déployer un modèle optimisé pour TensorRT-LLM à l'aide de Triton.

Étape 1 : Configurer le référentiel modèle

Créez un référentiel de modèles pour Triton, qui stockera vos fichiers de modèles TensorRT-LLM. Par exemple, si vous avez compilé un modèle GPT2, la structure de votre répertoire pourrait ressembler à ceci :

mkdir -p model_repository/gpt2/1
cp ./trt_engine/gpt2_fp16.engine model_repository/gpt2/1/

Étape 2 : Créer le fichier de configuration Triton

Dans le même model_repository/gpt2/ répertoire, créez un fichier de configuration nommé config.pbtxt qui indique à Triton comment charger et exécuter le modèle. Voici une configuration de base pour TensorRT-LLM :

name: "gpt2"
platform: "tensorrt_llm"
max_batch_size: 8

input [
  {
    name: "input_ids"
    data_type: TYPE_INT32
    dims: [-1]
  }
]

output [
  {
    name: "logits"
    data_type: TYPE_FP32
    dims: [-1, -1]
  }
]

Étape 3 : Lancer le serveur Triton

Utilisez la commande Docker suivante pour lancer Triton avec le référentiel de modèles :

docker run --rm --gpus all \
    -v $(pwd)/model_repository:/models \
    nvcr.io/nvidia/tritonserver:23.05-py3 \
    tritonserver --model-repository=/models

Étape 4 : Envoyer des demandes d'inférence à Triton

Une fois le serveur Triton en cours d'exécution, vous pouvez lui envoyer des requêtes d'inférence à l'aide de HTTP ou de gRPC. Par exemple, en utilisant curl pour envoyer une demande :

curl -X POST http://localhost:8000/v2/models/gpt2/infer -d '{
  "inputs": [
    {"name": "input_ids", "shape": [1, 128], "datatype": "INT32", "data": [[101, 234, 1243]]}
  ]
}'

Triton traitera la demande à l'aide du moteur TensorRT-LLM et renverra les logits en sortie.

Bonnes pratiques pour optimiser l'inférence LLM avec TensorRT-LLM

Pour exploiter pleinement la puissance de TensorRT-LLM, il est important de suivre les bonnes pratiques lors de l'optimisation et du déploiement du modèle. Voici quelques conseils clés :

1. Profilez votre modèle avant l'optimisation

Avant d'appliquer des optimisations telles que la quantification ou la fusion de noyaux, utilisez les outils de profilage de NVIDIA (comme Nsight Systems ou TensorRT Profiler) pour comprendre les goulots d'étranglement actuels dans l'exécution de votre modèle. Cela vous permet de cibler des domaines d'amélioration spécifiques, ce qui conduit à des optimisations plus efficaces.

2. Utilisez une précision mixte pour des performances optimales

Lors de l'optimisation des modèles avec TensorRT-LLM, en utilisant précision mixte (une combinaison de FP16 et FP32) offre une accélération significative sans perte majeure de précision. Pour le meilleur équilibre entre vitesse et précision, envisagez d'utiliser FP8 lorsqu'il est disponible, en particulier sur les GPU H100.

3. Tirez parti de l'attention paginée pour les grandes séquences

Pour les tâches qui impliquent de longues séquences de saisie, telles que le résumé de documents ou les conversations à plusieurs tours, activez toujours Attention paginée pour optimiser l'utilisation de la mémoire. Cela réduit la surcharge de mémoire et évite les erreurs de manque de mémoire lors de l'inférence.

4. Ajuster le parallélisme pour les configurations multi-GPU

Lors du déploiement de LLM sur plusieurs GPU ou nœuds, il est essentiel d'affiner les paramètres pour parallélisme tenseur et parallélisme des pipelines pour correspondre à votre charge de travail spécifique. Une configuration appropriée de ces modes peut conduire à des améliorations significatives des performances en répartissant la charge de calcul de manière uniforme sur les GPU.

Conclusion

TensorRT-LLM représente un changement de paradigme dans l'optimisation et le déploiement de modèles linguistiques à grande échelle. Grâce à ses fonctionnalités avancées telles que la quantification, la fusion d'opérations, la précision FP8 et la prise en charge multi-GPU, TensorRT-LLM permet aux LLM de s'exécuter plus rapidement et plus efficacement sur les GPU NVIDIA. Que vous travailliez sur des applications de chat en temps réel, des systèmes de recommandation ou des modèles linguistiques à grande échelle, TensorRT-LLM fournit les outils nécessaires pour repousser les limites des performances.

Ce guide vous explique comment configurer TensorRT-LLM, optimiser les modèles avec son API Python, déployer sur Triton Inference Server et appliquer les meilleures pratiques pour une inférence efficace. Avec TensorRT-LLM, vous pouvez accélérer vos charges de travail d'IA, réduire la latence et fournir des solutions LLM évolutives aux environnements de production.

Pour plus d'informations, reportez-vous au site officiel Documentation de TensorRT-LLM et Documentation du serveur d'inférence Triton.

J'ai passé les cinq dernières années à m'immerger dans le monde fascinant du Machine Learning et du Deep Learning. Ma passion et mon expertise m'ont amené à contribuer à plus de 50 projets de génie logiciel divers, avec un accent particulier sur l'IA/ML. Ma curiosité continue m'a également attiré vers le traitement automatique du langage naturel, un domaine que j'ai hâte d'explorer davantage.