Workstation fiche technique : comment dynamiser le service et les agents LLM avec PagedAttention, vLLM, Self-Debugging, PowerInfer, et EG-MLA. Compagnon: bloguer · amorce : Article LLM sur Kubernetes · laboratoire : Laboratoire d'IA d'entreprise.
- Goulot: Croissance et fragmentation du cache KV, et non « le modèle est lent » dans l'abstrait.
- PagedAttention : Pagination de style système d'exploitation des blocs KV ; Ajustez la taille des blocs et la hiérarchie du cache.
- vLLM : moteur de service avec des déchets KV proches de zéro + dosage continu ; regardez TTFT contre jetons/s.
- Self-Debugging : La réparation de programmes en quelques coups bat d'énormes ensembles de candidats ; bouchons ronds en prod.
- PowerInfer : répartition chaud/froid ; 13,20 tok/s en moyenne / 29,08 en pointe sur RTX 4090 (chiffres papier/repo).
- EG-MLA : compression KV au niveau de l'architecture (~ 91,6 % par rapport à MHA) ; réévaluation avant échange.
1. Pourquoi servir, et non former, est la crise
Les grands modèles de langage ont modifié le NLP : chat, génération, outils. La formation coûte cher une fois ; servir coûte cher chaque seconde. Le décodage est autorégressif. Chaque nouveau jeton a besoin des clés et valeurs précédentes. La mémoire pour ce cache KV est proportionnelle aux couches × têtes × cachées × séquence × lot. Le pré-remplissage nécessite beaucoup de calcul ; le décodage est gourmand en bande passante mémoire. Si vous allouez un tenseur KV contigu de longueur maximale par requête, la majeure partie est vide jusqu'à ce que la séquence grandisse réellement – fragmentation interne classique. Les requêtes simultanées ne peuvent pas voler ces trous. La taille du lot diminue. Jetons par seconde. Les GPU semblent occupés et toujours inactifs.
C’est le problème que PagedAttention et vLLM ont attaqué en 2023, et le problème que PowerInfer et les variantes ultérieures attaquent toujours sous des angles différents.
Regarder : modèle mental LLM
Vidéo contextuelle : Introduction aux grands modèles de langage. Explication Workstation : comment fonctionnent les LLM et comment les exécuter sur Kubernetes.
2. PagedAttention : pagination du cache KV
Kwon, Li, Zhuang, Sheng, Zheng, Yu, Gonzalez, Zhang et Stoica ont présenté PagedAttention en tant qu'algorithme d'attention inspiré de la mémoire virtuelle et de la pagination du système d'exploitation, et ont construit vLLM par-dessus. [arXiv:2309.06180]. L'idée :
- Diviser KV en blocs de taille fixe (un petit nombre de jetons par bloc).
- Gardez un table de blocs des positions de jetons logiques aux blocs physiques GPU (éventuellement non contigus).
- Allouez/libérez des blocs à mesure que les séquences grandissent ou se terminent – comme l'allocation de pages, pas comme la malloc d'un tableau géant.
- Partagez des blocs (copie sur écriture) pour la réutilisation des préfixes, la recherche de faisceaux et l'échantillonnage parallèle afin de ne pas dupliquer des préfixes identiques.
La mise en œuvre ne consiste pas à « mettre un drapeau sur BERT ». Le noyau d’attention doit rassembler des blocs dispersés. Le planificateur doit savoir quels blocs sont libres. La hiérarchie du cache est importante : blocs résidents HBM, déchargement CPU et homologues NVLink. La taille du tampon (bloc) est un véritable bouton. Trop petit : plus de recherches dans les tables et surcharge du noyau. Trop grand : emplacements gaspillés à l'intérieur du dernier bloc partiel. Associez la taille du bloc avec max_model_len et le mélange réel d'invite et d'achèvement de votre trafic.
Pratique: fragmentation du profil (octets KV inutilisés / octets KV réservés) et jetons/s ensemble. Les graphiques de mémoire sans débit sont une vanité.
3. vLLM : le système de desserte autour du pager
L’affirmation de vLLM est un gaspillage proche de zéro dans la mémoire cache KV ainsi qu’un partage flexible au sein et entre les requêtes. Les évaluations contenues dans le document ont montré à peu près Débit 2 à 4× par rapport aux systèmes SOTA d'alors (FasterTransformer, Orca) avec une latence similaire, avec des gains plus importants sur les séquences longues et un décodage plus sophistiqué. Aujourd'hui, le moteur propose également un traitement par lots continu, un pré-remplissage fragmenté, une mise en cache des préfixes et un tenseur/pipeline parallèle pour multi-GPU.
Liste de contrôle opérationnel :
- Ensemble
gpu_memory_utilizationsuffisamment haut pour supporter des poids + KV, suffisamment bas pour quitter l'espace de travail CUDA. - Activez la mise en cache des préfixes uniquement après avoir confirmé les scores d'évaluation et p95 TTFT activé ton invite.
- Séparez les pools de pré-remplissage et de décodage si le trafic mixte détruit le SLO (service désagrégé).
- Exposez les points de terminaison compatibles OpenAI derrière votre passerelle (les domaines Workstation mettent souvent cela derrière Passerelle WSL Proxy / API motifs).
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
gpu_memory_utilization=0.90,
max_model_len=8192,
enable_prefix_caching=True,
)
params = SamplingParams(temperature=0.2, max_tokens=256)
outs = llm.generate(["Summarise PagedAttention for a platform engineer."], params)
print(outs[0].outputs[0].text)
Anti-modèle (c'est pas PagedAttention) :
# Classifier forward pass — logits, not paged KV serving
import torch
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
out = model(torch.tensor([[1, 2, 3]]), attention_mask=torch.tensor([[1, 1, 1]]))
print(out.logits)
Regarder : servir les systèmes à l'état sauvage
Discussion de service contextuelle. Rédaction canonique : Blogue vLLM (PagedAttention) · moteur: projet-vllm/vllm.
4. Self-Debugging : plus de qualité par candidat, pas plus de candidats
Chen, Lin, Klein et coll. a montré qu'apprendre à un LLM à déboguer son programme prédit avec quelques démonstrations peut correspondre ou battre les lignes de base qui génèrent plus de 10 fois plus de candidats [arXiv:2304.05128]. La boucle est la suivante : générer → exécuter ou tester unitaire → renvoyer les traces → réparer.
Compromis de production : chaque message de retour est un autre pré-remplissage + décodage (ou un long ajout de contexte). La précision augmente souvent avec le nombre de tours ; il en va de même pour la latence et le coût. Conseils Workstation pour les agents (voir également Muse Glimmer / agents locaux):
- Limite stricte des cycles de débogage (par exemple 2 à 4) par appel d'outil.
- Jetons budgétaires séparément du chat visible par l'utilisateur.
- Passez à un modèle humain ou spécialisé au lieu de réessayer à l'infini.
- Enregistrez les traces pour l'évaluation - Self-Debugging sans télémétrie est du folklore.
5. PowerInfer : génération de jetons tenant compte de la localité
PowerInfer (SJTU IPADS / dépôts associés) est un système de génération de jetons qui exploite la localité d'activation : un petit neurone « chaud » défini sur GPU, des poids plus froids diffusés ou exécutés sur CPU. Les points de fonctionnement publiés incluent 13,20 jetons/s en moyenne et 29,08 jetons/s en pointe sur un seul NVIDIA RTX 4090, et jusqu'à 11,69× par rapport au llama.cpp avec une précision conservée [PowerInfer GitHub]. (Les forks orientés utilisateur tels que Tiiny-AI/PowerInfer suivent le même type de travail.)
La mise à l’échelle est la partie la plus difficile. Un seul profil de localité 4090 ne devient pas automatiquement un déploiement Kubernetes sain. Il vous faut :
- Requêtes/limites GPU honnêtes et épinglage CPU compatible NUMA si les experts CPU s'exécutent.
- Un plan distribué si le modèle ne convient plus : tenseur parallèle vs pipeline vs parallèle expert.
- Répartition SLO : chat interactif, achèvement des lots et boucles d'outils d'agent.
Utilisez PowerInfer (ou llama.cpp ou MLX) sur les postes de travail et les boîtiers périphériques ; utilisez vLLM (ou TensorRT-LLM ou SGLang) lorsque vous remplissez les GPU du centre de données avec du trafic simultané de style OpenAI. Mesurez les deux. Notre Laboratoire d'IA d'entreprise la position est la même que celle de Polyglot Benchmarks : preuves, puis ADR.
6. EG-MLA : concentrez l’attention sur l’architecture
Les astuces de service ne peuvent pas réparer un modèle dont le KV est intrinsèquement énorme. Rapports EG-MLA (attention latente multi-têtes intégrée) Réduction de la taille du cache de plus de 91,6 % KV par rapport à l'attention multi-têtes (MHA) avec une dégradation négligeable, des économies supplémentaires par rapport au MLA (jusqu'à 59,9 %) et une précision améliorée du raisonnement. Les auteurs soutiennent que l’intégration du déclenchement induit des interactions implicites d’ordre élevé et montrent une mise à l’échelle au-delà des paramètres 1B. [EG-MLA, arXiv].
Implication technique : il s'agit d'un formation / architecture décision. Vous ne pouvez pas retourner EG-MLA sur un vLLM aléatoire tous les soirs de Llama-3 et vous attendre aux pourcentages du papier. Si vous contrôlez le pré-entraînement ou la poursuite du pré-entraînement, EG-MLA est un candidat pour couper HBM avant d'acheter un autre GPU. Si vous ne servez que des poids publics, restez sur les variantes PagedAttention + quantification + MLA que le moteur prend déjà en charge et suivez les points de contrôle EG-MLA à mesure qu'ils atterrissent.
7. Combiner la pile sans cultiver la cargaison
| Couche | Utiliser quand | Attention |
|---|---|---|
| PagedAttention/vLLM | Service API simultané, contexte long, préfixes partagés | Cache de préfixe vs exactitude ; MOO à haute utilité |
| PowerInfer | Taux de jeton GPU / poste de travail unique | Inadéquation des localités ; une évolution désordonnée |
| Self-Debugging | Boucles de code/agent pouvant exécuter des tests | Tours illimités ; coût de pré-remplissage supplémentaire |
| EG-MLA | Vous entraînez ou peaufinez la colonne vertébrale | Pas un drapeau de service ; relancer l'évaluation complète |
8. Évolutivité sur Kubernetes
Une architecture distribuée bien conçue augmente le débit ainsi que les modes de défaillance : retardateurs, transfert de cache KV, biais du tokenizer et autoscalers qui tuent les préfixes chauds. Modèle pratique (aligné avec notre Ollama / vLLM sur Kubernetes rédaction) :
- Pools de nœuds GPU dédiés ; n'emballez jamais les modules de décodage avec des tâches CPU aléatoires.
- Séparez le pré-remplissage et le décodage si les SLO TTFT et les SLO de jetons/s se battent.
- HPA sur la profondeur de la file d'attente ou l'occupation GPU KV, pas seulement CPU.
- Promouvez les piles de portions à travers des anneaux (Ring Promoter) donc une mauvaise construction de moteur ne peut pas sauter le test.
9. Conclusion
La turbocompression des LLM n’est pas un seul algorithme. Il s'agit de la pagination du cache KV (PagedAttention), d'un moteur de service qui ne gaspille pas ces pages (vLLM), d'une génération sensible à la localité lorsque le matériel est un poste de travail GPU (PowerInfer), de boucles d'agent qui déboguent au lieu de pulvériser les candidats (Self-Debugging) et, lorsque vous possédez les poids, d'une attention qui stocke simplement moins (EG-MLA). Chaque couche échange de mémoire, de latence et de précision. Mesurez votre trafic. Publier l'ADR. Bateau.
Références
- Kwon et coll. — Gestion efficace de la mémoire pour la diffusion de modèles de langage étendus avec PagedAttention (arXiv :2309.06180, 14 septembre 2023).
- Chen et coll. — Enseigner à de grands modèles de langage l'auto-débogage (arXiv :2304.05128, 12 avril 2023).
- PowerInfer — SJTU-IPADS/PowerInfer (et les fourches Tiiny-AI associées).
- EG-MLA — Attention latente multi-têtes intégrées (arXiv, 20 septembre 2025).
- Blogue vLLM — Service LLM facile, rapide et bon marché avec PagedAttention.
Publié par Workstation. Chiffres papier cités tels que publiés par les auteurs originaux ; les numéros de production sur votre cluster seront différents.