Polydesk-logotype
Polydesk.ai — Header

TGI (Text Generation Inference)

TGI (Text Generation Inference) est un toolkit de déploiement et de serving de LLM développé par Hugging Face, écrit en Rust et Python, qui a été le premier moteur d’inférence production-grade à implémenter des optimisations comme Flash Attention et PagedAttention pour les LLM open source. TGI est aujourd’hui en mode maintenance : Hugging Face recommande d’utiliser vLLM, SGLang, llama.cpp ou MLX pour les nouveaux projets.

TGI a joué un rôle fondateur dans l’écosystème d’inférence LLM. C’est lui qui alimente Hugging Chat, l’API Inference de Hugging Face, et les Inference Endpoints. Il a initié le mouvement des moteurs d’inférence optimisés reposant sur les architectures de modèles Transformers. Cette approche a ensuite été adoptée par vLLM, SGLang et d’autres. Mais l’écosystème a mûri, et Hugging Face a fait le choix stratégique de contribuer aux moteurs en aval plutôt que de maintenir TGI comme solution principale.

TGI en bref
Type
Serveur d’inférence pour LLM
Développeur
Hugging Face
Langages
Rust (serveur HTTP, scheduler) + Python (modèles)
Statut
Mode maintenance Correctifs mineurs uniquement, pas de nouvelles fonctionnalités
Dernière version
v3.3.5 (version active, mise à jour vers Torch 2.7 / CUDA 12.8)
Licence
HFOIL v1.0 (usage commercial autorisé comme outil auxiliaire)
Alternatives recommandées
vLLM, SGLang, llama.cpp, MLX
Quantifications
AWQ, GPTQ, Marlin, bitsandbytes (NF4/FP4), EETQ, FP8
Matériel
NVIDIA (CUDA), AMD (ROCm), Intel, Intel Gaudi, AWS Inferentia/Trainium, Google TPU

TGI est en mode maintenance Hugging Face a annoncé que TGI est désormais en mode maintenance. Seuls les correctifs mineurs, les améliorations de documentation et les tâches de maintenance légères sont acceptés. Pour les nouveaux projets, Hugging Face recommande vLLM, SGLang, llama.cpp ou MLX. Les Inference Endpoints Hugging Face proposent désormais vLLM comme moteur d’inférence alternatif avec un guide de migration.

Histoire et impact

TGI a été initialement publié en 2022, devenant l’une des premières solutions production-grade pour le serving de LLM. À une époque où faire tourner un modèle Llama ou BLOOM en production nécessitait du code custom et beaucoup de bricolage, TGI offrait une solution presque clé en main : vous pointiez vers un modèle sur le Hub Hugging Face, et TGI s’occupait des optimisations.

TGI a introduit ou popularisé plusieurs concepts qui sont devenus standard dans l’industrie : le continuous batching (regroupement dynamique des requêtes), le streaming de tokens via Server-Sent Events (SSE), l’intégration de Flash Attention et PagedAttention, et la quantification à la volée. Ces innovations ont posé les fondations pour les moteurs suivants.

Le projet a attiré des utilisateurs majeurs : IBM, Grammarly, l’initiative Open-Assistant, et bien sûr Hugging Face lui-même pour Hugging Chat et ses services d’inférence cloud. TGI a aussi été le premier moteur à proposer une architecture multi-backend, avec l’annonce fin 2024 de backends TensorRT-LLM, vLLM, llama.cpp, et AWS Neuron, le tout derrière une interface unifiée Rust.

Cependant, l’écosystème a évolué rapidement. vLLM, avec son écosystème communautaire massif et ses optimisations continues (PagedAttention v2, V1 engine, kernels Marlin), a pris une avance significative en termes de fonctionnalités et de performances. Plutôt que de dupliquer les efforts, Hugging Face a choisi de contribuer directement à vLLM et SGLang, et de placer TGI en mode maintenance.

Architecture

TGI est composé de trois éléments principaux :

Le Router (serveur web). Écrit en Rust, il reçoit les requêtes HTTP des clients, les met en buffer, crée des batches, et prépare les appels gRPC vers le model server. Rust assure la robustesse du serving via l’analyse statique et la sécurité mémoire au niveau du compilateur, permettant de scaler sur plusieurs cœurs CPU sans les overhead du garbage collector Python.

Le Launcher. Un composant helper qui lance un ou plusieurs model servers (si le modèle est distribué sur plusieurs GPU) et démarre le router avec les arguments compatibles.

Le Model Server. Écrit en Python, il reçoit les appels gRPC du router et exécute l’inférence sur le modèle. Si le modèle est distribué (tensor parallelism), les shards du model server se synchronisent via NCCL. Le model server intègre les optimisations Transformers optimisées : Flash Attention, PagedAttention, et les kernels de quantification.

Fonctionnalités principales

Continuous batching + streaming. Les requêtes entrantes sont dynamiquement regroupées et les tokens sont streamés via SSE. Pas besoin d’attendre la fin d’une génération pour commencer la suivante.

Quantification. TGI supporte les modèles pré-quantifiés (AWQ, GPTQ, Marlin) et la quantification à la volée via bitsandbytes (NF4, FP4, INT8), EETQ, ou FP8. La quantification se configure avec --quantize :

# Modèle pré-quantifié AWQ text-generation-launcher --model-id TheBloke/Llama-2-7b-Chat-AWQ # Quantification à la volée en 4 bits text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2 --quantize bitsandbytes-nf4 # FP8 text-generation-launcher --model-id meta-llama/Llama-3.1-8B-Instruct --quantize fp8

Guided generation (structured outputs). TGI peut forcer le modèle à produire des sorties conformes à un schéma JSON ou une grammaire, ce qui active le function calling et l’appel d’outils.

Zero-config (TGI v3). Introduit dans TGI v3, le mode zero-config analyse automatiquement le matériel au démarrage et sélectionne les valeurs optimales pour la longueur de contexte maximale, le nombre de tokens par batch, et les tokens de prefill. Cela élimine le trial-and-error habituel de la configuration manuelle.

Tensor Parallelism. TGI distribue automatiquement les modèles sur plusieurs GPU. Le nombre de GPU est détecté via CUDA_VISIBLE_DEVICES ou configuré explicitement.

Support multimodal. TGI supporte les modèles vision-language (Qwen 2.5 VL, etc.) avec prefill chunking pour les entrées multimodales.

Utilisation

La méthode la plus simple pour démarrer TGI est via Docker :

model=meta-llama/Llama-3.1-8B-Instruct volume=$PWD/data docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data -e HF_TOKEN=$HF_TOKEN ghcr.io/huggingface/text-generation-inference:3.3.5 --model-id $model

TGI expose des endpoints compatibles OpenAI et un Swagger UI documenté sur /docs. L’interaction peut se faire via curl, les SDKs Hugging Face (InferenceClient), ou tout client compatible OpenAI.

Matériel supporté

TGI a été porté sur une gamme de matériel plus large que la plupart des moteurs d’inférence :

Plateforme Backend Notes
NVIDIA (CUDA) Principal (repo principal) Le backend le plus mature. Flash Attention, PagedAttention, FP8
AMD (ROCm) Repo principal Support MI210/MI250. Image Docker séparée (:3.3.5-rocm)
Intel GPU Repo principal Certaines fonctionnalités diffèrent du backend NVIDIA
Intel Gaudi (HPU) Fork synchronisé Maintenu sur un dépôt séparé, resynchronisé régulièrement
AWS Inferentia2 / Trainium Repo principal (Neuron) Via AWS Neuron SDK
Google TPU Optimum TPU Maintenu dans le projet Optimum

Tous les backends n’offrent pas les mêmes fonctionnalités. Le backend NVIDIA CUDA est le plus complet, les autres ont des limitations spécifiques documentées.

Configuration et tuning

TGI expose plusieurs paramètres critiques pour ajuster les performances à votre cas d’usage. L’enjeu principal est le compromis entre longueur de contexte et concurrence : plus le contexte maximal est élevé, moins vous pouvez servir de requêtes simultanées avec la même VRAM.

Max Input Tokens / Max Total Tokens. Ces paramètres contrôlent la longueur maximale du prompt et la longueur totale (prompt + génération). Un modèle avec 128K tokens de contexte natif sur un GPU où il ne tient que 3 fois en mémoire ne peut servir que 3 requêtes concurrentes à plein contexte. Réduire le contexte max à 64K double la concurrence à 6 requêtes.

Quantification. Le choix de quantification impacte directement la VRAM et le throughput. FP8 (sur Hopper) et bitsandbytes NF4 sont les options les plus simples. Pour les modèles pré-quantifiés en AWQ ou GPTQ, TGI les détecte automatiquement au chargement.

Sharded deployment. Pour les modèles trop gros pour un seul GPU, TGI gère automatiquement le tensor parallelism. Configurez CUDA_VISIBLE_DEVICES ou utilisez --num-shard pour spécifier le nombre de GPU. La communication inter-GPU utilise NCCL, et NVLink est fortement recommandé pour les performances.

Profiling. TGI inclut un outil de benchmarking intégré qui mesure non seulement le throughput mais aussi la latence (TTFT, inter-token latency), le P50/P95/P99, et les effets du batching. C’est un outil précieux pour comprendre les compromis de votre déploiement et ajuster les paramètres en conséquence.

Conseil de déploiement En mode zero-config (TGI v3), laissez tous les paramètres par défaut au premier lancement. TGI détectera votre matériel et maximisera l’utilisation. Ajustez ensuite manuellement uniquement si vos métriques montrent un problème (latence trop élevée, concurrence insuffisante, OOM). C’est plus efficace que de deviner les bonnes valeurs.

TGI vs vLLM : pourquoi migrer

Hugging Face recommande désormais de migrer vers vLLM pour les déploiements production. Voici les raisons principales :

Critère TGI vLLM
Statut Mode maintenance Développement actif
Releases Correctifs uniquement Releases mensuelles (v0.14 → v0.17.1 en 3 mois)
Chunked prefill Non Oui (réduit les pics de latence)
Disaggregated serving Non Oui (sépare prefill et decode)
Kernels Marlin Support basique Support complet (10× accélération AWQ)
Formats de quantification AWQ, GPTQ, bitsandbytes, FP8 AWQ, GPTQ, FP8, INT8 W8A8, INT4, GGUF, bitsandbytes, TorchAO
Async scheduling Non Oui (30 %+ throughput)
gRPC Interne (router→model server) Oui (endpoint client)
Structured outputs + speculative decoding Séparément Combinés ensemble
Communauté Équipe HF Communauté massive (203 contributeurs sur la dernière release)
Guide de migration TGI → vLLM Les Inference Endpoints Hugging Face proposent un guide de migration intégré. Les étapes : créer un nouvel Endpoint avec le même modèle en sélectionnant vLLM comme moteur, tester, basculer le trafic, puis supprimer l’ancien Endpoint TGI. L’API est compatible OpenAI dans les deux cas, donc les clients n’ont pas besoin de modification.

TGI v3 : les dernières innovations avant le mode maintenance

TGI v3 a introduit plusieurs fonctionnalités notables avant le passage en mode maintenance :

Performance sur longs contextes. TGI v3 revendiquait une accélération de 13× par rapport à vLLM sur les prompts très longs (200K+ tokens), grâce au caching intelligent des tours de conversation précédents. Les temps de réponse descendaient à environ 2 secondes pour des prompts de 200K+ tokens, contre 27,5 secondes avec vLLM à l’époque. Depuis, vLLM a rattrapé une grande partie de cet écart avec le chunked prefill et l’async scheduling.

Capacité en tokens 3× supérieure. Les optimisations mémoire agressives de TGI v3 permettaient de traiter 3× plus de tokens que vLLM sur le même matériel, ouvrant la voie à des applications long-contexte sur du matériel limité.

Zero-config automatique. Au démarrage, TGI v3 analyse le GPU disponible et configure automatiquement les paramètres optimaux. Si vous laissez les valeurs par défaut, TGI utilise votre matériel à pleine capacité. Vous pouvez ajuster manuellement si nécessaire (par exemple, réduire le contexte max pour augmenter la concurrence).

Architecture multi-backend. Le trait Rust Backend permettait d’intégrer différents moteurs d’inférence (TensorRT-LLM, vLLM, llama.cpp) derrière la même interface TGI. Cette vision d’un « frontend unifié » reste pertinente, même si son développement est suspendu.

Quand utiliser TGI malgré le mode maintenance

Bien que TGI soit en mode maintenance, il reste un choix valide dans certains scénarios :

Déploiements existants stables. Si vous avez un déploiement TGI en production qui fonctionne bien, il n’y a pas d’urgence à migrer. TGI continue de recevoir des correctifs de sécurité et des mises à jour de dépendances (Torch 2.7, CUDA 12.8 dans la dernière release).

Hugging Face Inference Endpoints. TGI reste disponible et supporté comme moteur dans les Inference Endpoints. Le zero-config v3 simplifie le déploiement pour les utilisateurs qui ne veulent pas configurer manuellement.

Matériel non-NVIDIA spécialisé. TGI dispose de backends pour Intel Gaudi, AWS Neuron, et Google TPU qui ne sont pas tous disponibles nativement dans vLLM. Si vous ciblez ces plateformes, vérifiez si le backend TGI correspondant offre le support dont vous avez besoin.

Pour tout nouveau projet ou toute migration planifiée, vLLM est le choix recommandé par Hugging Face.

L’héritage de TGI dans l’écosystème

Même en mode maintenance, l’influence de TGI sur l’écosystème reste considérable. Plusieurs concepts qu’il a popularisés sont désormais des standards de l’industrie :

Continuous batching comme norme. Avant TGI, la plupart des serveurs d’inférence utilisaient le static batching (attendre qu’un batch soit complet avant de le traiter). TGI a démontré en production que le continuous batching, où les requêtes sont ajoutées et retirées dynamiquement du batch en cours, offre un throughput bien supérieur. Tous les moteurs modernes (vLLM, SGLang, TensorRT-LLM) utilisent désormais cette approche.

Architectures Transformers optimisées comme base. L’approche de TGI consistait à prendre les implémentations de modèles de la bibliothèque Transformers de Hugging Face et à les optimiser pour l’inférence (remplacement des couches d’attention par Flash Attention, ajout de PagedAttention, optimisation des kernels). Cette stratégie est désormais la norme dans vLLM et SGLang, qui s’appuient aussi sur les architectures Transformers comme point de départ.

Serveur Rust + modèles Python. L’architecture hybride de TGI (serveur HTTP robuste en Rust, flexibilité des modèles en Python, communication gRPC entre les deux) a influencé le design de plusieurs moteurs. La séparation des responsabilités entre la couche réseau (qui bénéficie de la sécurité mémoire de Rust) et la couche modèle (qui bénéficie de la flexibilité de Python/PyTorch) est un pattern architectural qui a fait ses preuves.

Quantification intégrée au serving. TGI a été l’un des premiers moteurs à proposer la quantification à la volée (--quantize bitsandbytes-nf4) directement au démarrage, sans étape de pré-quantification séparée. Cette simplicité d’accès à la quantification a contribué à sa démocratisation.


Questions fréquentes sur TGI

TGI va-t-il être supprimé ?

Non, TGI n’est pas supprimé. Il passe en mode maintenance, ce qui signifie qu’il continue de recevoir des correctifs de bugs et des mises à jour de sécurité, mais pas de nouvelles fonctionnalités. Le dépôt GitHub reste actif et les images Docker continuent d’être publiées. Si vous avez un déploiement TGI stable en production, il n’y a pas de raison de paniquer, mais planifiez une migration vers vLLM à moyen terme.

Pourquoi Hugging Face recommande-t-il vLLM plutôt que TGI ?

L’écosystème d’inférence LLM a mûri. vLLM offre maintenant un throughput supérieur (avec async scheduling, Marlin, chunked prefill), un écosystème communautaire bien plus large (200+ contributeurs par release), un support de quantification plus étendu, et des releases mensuelles. Plutôt que de dupliquer ces efforts dans TGI, Hugging Face a choisi de contribuer directement à vLLM et SGLang, ce qui bénéficie à l’ensemble de la communauté.

Comment migrer de TGI vers vLLM ?

L’API est compatible OpenAI dans les deux cas, donc les clients n’ont généralement pas besoin de modification. Côté serveur : remplacez text-generation-launcher --model-id MODEL par vllm serve MODEL. Les modèles pré-quantifiés (AWQ, GPTQ) sont compatibles avec les deux. Pour les Inference Endpoints Hugging Face, créez un nouvel Endpoint en sélectionnant vLLM comme moteur, testez, et basculez le trafic.

TGI est-il plus rapide que vLLM ?

Sur les prompts très longs (200K+ tokens) avec caching des tours de conversation, TGI v3 revendiquait une avance significative (13× dans certains benchmarks). Cependant, vLLM a rattrapé une grande partie de cet écart avec le chunked prefill, l’async scheduling, et le disaggregated serving. Pour le throughput multi-utilisateurs standard, vLLM est généralement plus rapide, surtout avec les kernels Marlin sur les modèles quantifiés.

Quelle est la licence de TGI ?

TGI utilise la licence HFOIL v1.0 (Hugging Face Optimized Inference License). Elle permet l’usage commercial à condition que TGI serve d’outil auxiliaire dans votre produit ou service, et non comme offre principale. En pratique, cela signifie que vous pouvez utiliser TGI pour servir un modèle qui alimente votre application, mais vous ne pouvez pas revendre TGI comme un service d’inférence en tant que tel. vLLM, en comparaison, utilise la licence Apache 2.0, sans cette restriction.

Polydesk.ai — Footer