L'essor de l'IA générative (GenAI) a transformé les industries, du traitement du langage naturel à la génération de contenu créatif. Cependant, le déploiement efficace de ces modèles puissants à grande échelle reste un défi.
Les moteurs d'inférence jouent un rôle essentiel dans l'optimisation des performances, la réduction de la latence et la maximisation de l'utilisation des ressources. Dans cet article, nous nous penchons sur quatre solutions de premier plan : TensorRT-LLM, vLLM, Hugging Face TGI et LMDeploy.
Chacun de ces moteurs présente des atouts uniques, qu'il s'agisse de la précision accélérée par le matériel de NVIDIA, de la gestion innovante de la mémoire de vLLM, de l'écosystème prêt à la production de TGI ou de l'accent mis par LMDeploy sur la rapidité et la simplicité. Rejoignez-nous pour comparer ces moteurs et vous aider à trouver celui qui convient le mieux à vos charges de travail GenAI.
TensorRT-LLM est la réponse de NVIDIA à l'exécution rapide et fluide de modèles de langage volumineux. Construit sur le framework TensorRT, il est conçu pour exploiter au maximum les performances des GPU NVIDIA. Pour ce faire, il a recours à des astuces telles que la fusion de couches, l'ajustement de la précision (FP16, INT8, FP8...) et l'optimisation du noyau qui réduit le temps de calcul sans compromettre la précision du modèle.
Ce n'est pas qu'une question de vitesse. TensorRT-LLM traite efficacement les modèles volumineux en gérant la mémoire de manière intelligente, afin d'éviter les pannes en cours d'exécution. Il prend également en charge la mise en lots dynamique, ce qui vous permet de traiter plusieurs requêtes à la fois sans manquer de mémoire. Si vous utilisez déjà du matériel NVIDIA, c'est une évidence car il est étroitement lié à leur écosystème, comme CUDA et cuDNN, et il s'intègre même avec Triton Inference Server et NVIDIA Dynamo de NVIDIA.
Cela dit, il n'est pas parfait pour tout le monde. L'installation peut être pénible si vous n'êtes pas à l'aise avec les outils de NVIDIA, et il est moins flexible si vous utilisez du matériel non-NVIDIA. Néanmoins, pour la puissance brute et l'optimisation des GPU NVIDIA, il est difficile de faire mieux.
vLLM est très efficace pour traiter rapidement de gros volumes de travaux d'inférence. Il s'agit d'un projet open-source qui se distingue lorsque vous avez besoin d'un débit élevé sans ralentissement. La sauce secrète est PagedAttention, une astuce qui gère la mémoire bien mieux que la plupart des autres. Au lieu de tout charger en même temps et de consommer de la mémoire vive, il divise les caches de valeurs clés en morceaux, ne prenant que ce qui est nécessaire. Moins de gaspillage, plus de rapidité.
Il est également très flexible. Il fonctionne avec des modèles populaires tels que LLaMA ou Mistral dès la sortie de la boîte et prend en charge de nombreux matériels, y compris les GPU NVIDIA ou AMD. Vous bénéficiez également d'une mise en lot dynamique pour regrouper les demandes de manière efficace, ce qui permet au pipeline de fonctionner sans heurts. L'installation est assez simple si vous êtes habitué à Python et PyTorch.
La principale limite de vLLM est sa relative immaturité sur le marché, ce qui signifie qu'il n'offre peut-être pas encore l'ensemble des fonctionnalités disponibles dans les solutions plus établies. Cependant, pour les organisations à la recherche d'une solution efficace offrant une inférence de haute performance, vLLM représente un excellent choix.
Hugging Face TGI (Text Generation Inference) est conçu pour les personnes qui veulent obtenir des modèles et les faire fonctionner sans se casser la tête. C'est un outil construit par l'équipe de Hugging Face, donc il fonctionne bien avec leur énorme bibliothèque de modèles pré-entraînés - pensez à BERT, GPT, et plus encore. Il est conçu pour une utilisation réelle, comme l'alimentation de chatbots ou d'applications où la génération de texte doit fonctionner rapidement et ne pas planter.
L'IGC prend en charge les tâches les plus lourdes grâce à des fonctionnalités telles que la mise en lots continue, qui maintient le système occupé en introduisant de nouvelles demandes au fur et à mesure que les anciennes se terminent. Elle prend en charge l'accélération GPU et peut s'étendre si vous disposez du matériel nécessaire. De plus, il dispose d'une sécurité intégrée, comme le filtrage des mauvaises sorties, ce qui est pratique pour la production. Vous pouvez le déployer avec Docker en quelques étapes, il est donc relativement facile à mettre en place.
Le problème ? Il est lié à l'écosystème de Hugging Face, donc si vous n'êtes pas déjà dans ce monde, il peut sembler restrictif. Néanmoins, pour une option prête à l'emploi, TGI est un excellent choix.
LMDeploy est une boîte à outils créée par les équipes MMRazor et MMDeploy, qui permet de compresser, de déployer et d'exécuter des modèles linguistiques de grande taille en toute simplicité. Qu'est-ce qui le distingue ? Il dispose d'une excellente vitesse de décodage - jusqu'à 1,8 fois plus de requêtes par seconde que vLLM sur un GPU A100. Cela est dû à des astuces telles que la mise en lot persistante, la mise en cache KV bloquée et des noyaux CUDA astucieux qui maintiennent le GPU occupé.
Il possède deux moteurs : TurboMind pour des performances maximales et PyTorch pour un bricolage plus facile. TurboMind est la star ici - il pousse l'inférence 4-bit 2.4x plus vite que FP16, et il gère de gros modèles comme Llama-2 70B avec facilité. Vous pouvez également quantifier les poids et les caches KV pour économiser de la mémoire sans nuire à la précision. Le déploiement est également un jeu d'enfant : une seule commande permet d'installer un serveur sur plusieurs machines si nécessaire. De plus, il mémorise l'historique des discussions dans les discussions à plusieurs tours, ce qui évite de perdre du temps à refaire un vieux travail.
L'inconvénient ? TurboMind est pointilleux : il n'est pas encore compatible avec les modèles d'attention à fenêtre glissante comme Mistral. Et si vous n'utilisez pas de GPU NVIDIA, vous devrez vous contenter du moteur PyTorch, plus lent. Néanmoins, pour sa rapidité et sa simplicité sur le matériel adéquat, LMDeploy est un excellent choix.
Analysons les performances de ces moteurs en termes de latence (vitesse d'exécution d'une requête), de débit (nombre de requêtes qu'ils peuvent ingérer) et d'évolutivité (capacité à gérer des charges plus importantes ou du matériel supplémentaire).
TensorRT-LLM brille par sa latence si vous disposez de GPU NVIDIA. Il est hautement optimisé pour le matériel NVIDIA, de sorte que les requêtes individuelles se terminent rapidement : moins de 50 ms pour la plupart des modèles sur un A100. Le débit est également excellent, en particulier avec la mise en lots dynamique. Les benchmarks de BentoML montrent que ce moteur atteint 700 tokens par seconde avec 100 utilisateurs simultanés pour Llama 3 70B Q4 sur un GPU A100 80GB. TensorRT-LLM est très performant dans les scénarios avec des entrées longues et des taux de requêtes élevés, offrant un bon débit. L'évolutivité sur plusieurs GPU est prise en charge dès le départ avec d'excellentes performances.
vLLM a également un bon débit, en particulier dans les charges de travail à forte intensité de décodage, avec un débit élevé et une faible latence après les récentes mises à jour. Les benchmarks de BentoML montrent que ce moteur atteint 600-650 tokens par seconde à 100 utilisateurs simultanés pour Llama 3 70B Q4 sur un GPU A100 80GB. La latence est bonne mais pas aussi bonne que celle de TensorRT-LLM : environ 60-80 ms pour des exécutions en solo. Il passe bien d'un GPU à l'autre, même en mélangeant les marques, mais il est moins abouti pour les grosses configurations.
Hugging Face TGI fonctionne de manière similaire à vLLM, offrant un équilibre entre performance et facilité d'utilisation. La latence est décente : 50-70 ms sur un bon GPU. Les benchmarks de BentoML montrent que ce moteur atteint 600-650 tokens par seconde avec 100 utilisateurs simultanés pour Llama 3 70B Q4 sur un GPU A100 80GB. Il est conçu pour être mis à l'échelle pour la production, il gère donc plus d'utilisateurs ou de machines en douceur, en particulier avec Docker.
LMDeploy l'emporte sur la vitesse de décodage. Il excelle dans le taux de génération de jetons, en particulier pour les petits modèles, et a un faible temps d'accès au premier jeton (TTFT) pour les grands modèles quantifiés. La latence est faible : 40 à 60 ms. Et le débit est excellent. Les benchmarks réalisés par BentoML montrent que ce moteur atteint 700 tokens par seconde avec 100 utilisateurs simultanés pour Llama 3 70B Q4 sur un GPU A100 80GB. La mise à l'échelle est facile avec sa configuration serveur, mais il s'appuie fortement sur les GPU NVIDIA pour obtenir les meilleurs résultats ; le mode PyTorch est à la traîne.
Résultat : TensorRT-LLM et LMDeploy se distinguent par leur vitesse brute. Votre choix dépend de votre matériel et du nombre de requêtes que vous traitez.
La quantification réduit la précision du modèle afin de diminuer l'utilisation de la mémoire et d'accélérer l'inférence, ce qui est important pour les environnements à ressources limitées. Voici les performances de chaque moteur :
TensorRT-LLM prend en charge FP8, FP4, INT4 avec Activation-aware Weight Quantization (AWQ), et INT8 avec SmoothQuant, offrant ainsi des options robustes pour optimiser les performances des GPU NVIDIA.
vLLM offre une grande flexibilité avec GPTQ, AWQ, INT4, INT8 et FP8, s'adaptant ainsi aux différents besoins en matière de matériel et de précision.
L'IGC Hugging Face intègre bitsandbytes pour la quantification 8 bits et 4 bits et GPT-Q pour la quantification par poids uniquement, adaptée aux déploiements en production.
LMDeploy offre une quantification AWQ 4 bits, une quantification 8 bits et une quantification en ligne du cache KV INT8/INT4, ce qui améliore l'efficacité des modèles volumineux sur un matériel limité.
Le support matériel détermine l'endroit où vous pouvez déployer ces moteurs, ce qui a un impact sur l'évolutivité et les performances :
TensorRT-LLM est exclusif à NVIDIA CUDA et exploite les accélérateurs GPU pour obtenir de hautes performances.
vLLM prend en charge NVIDIA CUDA, AMD ROCm, AWS Neuron et CPU, offrant ainsi une large compatibilité pour diverses configurations.
L'IGC Hugging Face fonctionne avec NVIDIA CUDA, AMD ROCm, Intel Gaudi et AWS Inferentia, ce qui lui permet de s'adapter à divers environnements matériels.
LMDeploy est optimisé pour NVIDIA CUDA, ce qui garantit des performances optimales sur les GPU NVIDIA, mais avec une prise en charge limitée pour les autres plates-formes.
Le processus de configuration et d'intégration peut avoir une incidence sur les délais de développement. Voici comment chaque moteur se comporte :
TensorRT-LLM nécessite de convertir les points de contrôle, de construire le moteur TensorRT et de configurer les paramètres, ce qui représente un défi et une perte de temps pour les ingénieurs.
vLLM est facile à utiliser grâce à une documentation complète, une installation aisée et une intégration transparente de la bibliothèque Python.
Hugging Face TGI bénéficie de l'écosystème de Hugging Face, offrant des images Docker pré-construites et une documentation complète pour un déploiement rapide.
LMDeploy se caractérise par une configuration simple, avec une seule commande pour lancer le serveur, et par des API Python pour la personnalisation, ce qui permet de concilier facilité et souplesse.
Le choix du bon moteur dépend de votre cas d'utilisation, de votre matériel et de vos compétences.
TensorRT-LLM est le moteur d'inférence qu'il vous faut si vous exécutez de gros modèles sur des GPU NVIDIA et que vous avez besoin de toute la vitesse possible (pensez aux applications à faible latence comme les chatbots en temps réel ou les assistants d'IA où les réponses doivent être générées en quelques millisecondes). Ce moteur est parfait pour les entreprises déjà bien implantées dans l'univers de NVIDIA, mais il peut s'avérer excessif si vous recherchez la simplicité.
vLLM est un excellent compromis entre rapidité et simplicité. Il fonctionne très bien pour les startups ou les chercheurs qui veulent quelque chose de flexible et de rapide à mettre en place.
L'IGC de Hugging Face est équivalente à vLLM en termes de rapidité et de simplicité. Elle est facile à déployer, évolue en douceur et s'intègre dans le hub de Hugging Face, ce qui en fait une solution idéale pour les équipes qui souhaitent une solution simple.
LMDeploy brille par ses performances, tout comme TensorRT-LLM. Il convient aux utilisateurs de GPU NVIDIA qui souhaitent une configuration simple et des performances optimales, mais il est moins pratique si vos modèles ne sont pas compatibles avec TurboMind.
Si vous ne pouvez ou ne voulez pas déployer vous-même votre propre modèle GenAI, vous pouvez utiliser NLP Cloud et exploiter des modèles d'IA générative rapides à l'échelle de la production. Essayez l'inférence rapide sur NLP Cloud dès maintenant !
Si vous avez des questions sur les moteurs d'inférence en général, n'hésitez pas à nous les poser, c'est toujours un plaisir de vous conseiller !
Julien
Directeur technique de NLP Cloud