Grouped-Query Attention (GQA)
La Grouped-Query Attention (GQA) est une optimisation du Multi-Head Attention qui regroupe les têtes de Query en G groupes, chaque groupe partageant une seule paire de clés (K) et valeurs (V), réduisant la taille du KV cache d’un facteur proportionnel au nombre de groupes tout en conservant une qualité de modélisation quasi identique au MHA standard.
- Auteurs
- Joshua Ainslie, James Lee-Thorp, Michiel de Jong et al. (Google)
- Publication
- EMNLP 2023 (papier : mai 2023)
- Principe
- G groupes de têtes Query partagent chacun une paire K/V dédiée (1 < G < H)
- Réduction KV cache
- G/H par rapport à MHA (ex. : 8/32 = 4x de réduction)
- Qualité
- ≈ MHA standard d’après les études d’ablation
- Uptraining
- Conversion MHA → GQA possible avec ~5% du compute de pré-entraînement
- Modèles notables
- Llama 2/3.x, Mistral 7B, Mixtral, Qwen 2/3, Gemma 3, IBM Granite
Le problème : le KV cache explose avec MHA
Le Multi-Head Attention standard donne à chaque tête d’attention ses propres matrices de projection pour les Queries (Q), les Keys (K) et les Values (V). Pour un modèle avec H = 32 têtes et 80 couches, le KV cache doit stocker 32 vecteurs K et 32 vecteurs V par couche, pour chaque token de la séquence. Sur un contexte de 128K tokens en FP16, cela peut atteindre des dizaines de gigaoctets.
Ce KV cache massif crée un double goulot d’étranglement. En mémoire : le cache occupe souvent plus de place que les poids du modèle eux-même, limitant le nombre de requêtes simultanées et la longueur de contexte maximale. En bande passante : lors du décodage autorégressif, le GPU doit relire l’intégralité du KV cache à chaque nouveau token généré. Avec des dizaines de Go de cache, cette relecture devient le facteur limitant de la vitesse de génération.
Deux solutions existaient avant GQA. La première, MQA (Multi-Query Attention), partage un seul set de K/V entre toutes les têtes. C’est drastiquement efficace (réduction de H×), mais la qualité en souffre, surtout pour les gros modèles, car toutes les têtes voient exactement la même information contextuelle. La seconde, garder le MHA standard et accepter le coût. GQA offre un troisième chemin.
Fonctionnement de GQA
Le principe : partager les K/V par groupes
GQA divise les H têtes de Query en G groupes (où 1 < G < H). Chaque groupe de H/G têtes partage une seule paire K/V dédiée. Prenons l’exemple concret d’un modèle avec 32 têtes de Query et G = 8 groupes :
Les têtes Q₁ à Q₄ partagent K₁/V₁. Les têtes Q₅ à Q₈ partagent K₂/V₂. Et ainsi de suite, jusqu’aux têtes Q₂₉ à Q₃₂ qui partagent K₈/V₈.
Le nombre de projections K/V passe de 32 (MHA) à 8 (GQA), soit une réduction de 4x du KV cache. Les projections Q restent distinctes pour chaque tête, préservant la diversité des perspectives d’attention.
Ce mécanisme est un spectre continu. À une extrémité, G = H revient au MHA standard (chaque tête a son propre K/V). À l’autre extrémité, G = 1 revient à MQA (toutes les têtes partagent un seul K/V). GQA avec une valeur intermédiaire de G offre un compromis réglable entre expressivité et efficacité.
Implémentation technique
En pratique, l’implémentation de GQA est simple. Par rapport à MHA, seules deux modifications sont nécessaires :
1. Projections K/V réduites. Les matrices de projection WK et WV passent de [d_model, H × d_k] à [d_model, G × d_k]. Avec moins de paramètres de projection, le calcul est plus léger et les K/V résultants sont plus compacts.
2. Répétition ou broadcasting des K/V. Lors du calcul d’attention, les K et V de chaque groupe sont dupliqués (via repeat_interleave ou broadcasting) pour être appariés avec toutes les têtes Q du groupe. Cela garantit que le calcul d’attention produit bien H sorties distinctes malgré le nombre réduit de K/V.
Le reste du pipeline (attention scalée, concaténation, projection de sortie) reste strictement identique à MHA. C’est cette simplicité d’intégration qui a contribué à l’adoption massive de GQA.
repeat_interleave(n_rep) sur les K/V avant le calcul d’attention, où n_rep = n_heads // n_kv_heads. C’est un changement de quelques lignes seulement.
Uptraining : convertir un modèle MHA en GQA
Un avantage majeur de GQA est la possibilité de convertir des modèles MHA existants sans repartir de zéro. Le papier original propose une recette d’uptraining qui consomme environ 5% du compute de pré-entraînement original :
Étape 1 : Initialisation par mean-pooling. Les H matrices de projection K (et V) du modèle MHA sont regroupées par G groupes, et les matrices de chaque groupe sont moyennées pour produire la matrice K (et V) partagée du groupe.
Étape 2 : Uptraining. Le modèle ainsi initialisé est entraîné sur un petit pourcentage des données originales (environ 5% du budget de pré-entraînement) pour s’adapter au partage des K/V.
Les expériences originales sur T5-XXL montrent que GQA uptrained avec G = 8 atteint une qualité très proche du MHA original tout en réduisant le temps de génération de plus de 3x. Le même type de conversion a été validé plus récemment : MoH-LLaMA3-8B montre qu’on peut convertir un modèle MHA vers des architectures d’attention encore plus avancées via du continue-tuning.
Impact sur les performances
Réduction du KV cache
La formule de la taille du KV cache avec GQA est :
KV cache (bytes) ≈ batch_size × seq_len × (d_model / n_heads) × n_layers × 2 × bytes_per_elem × n_kv_heads
Avec n_kv_heads = G au lieu de H (MHA), la réduction est directement proportionnelle à G/H. Pour Llama 3.x 70B avec 64 têtes Q et 8 têtes KV (G = 8), le KV cache est 8x plus petit qu’en MHA standard. Cela signifie 8x plus de requêtes simultanées possibles, ou des contextes 8x plus longs pour la même mémoire GPU.
Gains de throughput et latence
Les benchmarks comparatifs entre Llama 2 7B (MHA) et Mistral 7B (GQA) sur un même GPU NVIDIA A10G, avec des modèles de taille identique (7B paramètres), montrent des résultats clairs. À faible charge, les temps par token de sortie (TPOT) sont similaires. Mais à mesure que la charge augmente, le modèle GQA (Mistral) surpasse consistement le modèle MHA (Llama 2). À la charge la plus élevée testée, le modèle MHA échoue à répondre dans le temps imparti, tandis que le modèle GQA continue de fonctionner.
Les gains sont particulièrement prononcés pour les gros modèles (70B+) et les longues séquences, car c’est dans ces configurations que le KV cache domine la consommation mémoire et la bande passante.
Impact sur la qualité du modèle
Les études d’ablation, menées dans le papier original GQA et confirmées dans le papier Llama 2, montrent que GQA avec un nombre judicieux de groupes performe au même niveau que MHA en termes de qualité de modélisation. Le choix du nombre de groupes G est important : trop peu de groupes (proche de MQA) dégrade la qualité ; trop de groupes (proche de MHA) réduit l’avantage en mémoire.
En pratique, les configurations les plus courantes sont G = 8 pour les modèles 70B+ (ratio 8x) et G = 4 à 8 pour les modèles 7-13B. Ces configurations offrent un sweet spot validé empiriquement entre qualité et efficacité.
Adoption dans l’industrie
GQA est devenu le standard de facto pour les LLM modernes. Voici les principaux modèles qui l’utilisent :
| Modèle | Têtes Q | Têtes K/V (G) | Ratio (réduction KV cache) |
|---|---|---|---|
| Llama 3.x 70B | 64 | 8 | 8x |
| Llama 3.x 8B | 32 | 8 | 4x |
| Mistral 7B | 32 | 8 | 4x |
| Mixtral 8x7B | 32 | 8 | 4x |
| Qwen 3 | Variable | Variable | 4x à 8x selon la taille |
| Gemma 3 (Google) | Variable | Variable | GQA natif |
| IBM Granite 3.0 | Variable | Variable | GQA natif |
L’adoption a été rapide : Meta a intégré GQA dès Llama 2 (juillet 2023), soit seulement deux mois après la publication du papier. Mistral AI l’a utilisé dès son premier modèle (septembre 2023). Aujourd’hui, il est difficile de trouver un LLM open-weight majeur qui n’utilise pas GQA.
GQA vs MQA vs MHA vs MLA
| Variante | Têtes K/V | KV cache (relatif) | Qualité | Cas d’usage |
|---|---|---|---|---|
| MHA | H (= têtes Q) | 1x (max) | Référence | Obsolète pour les nouveaux modèles |
| MQA | 1 | 1/H (min) | Dégradée sur gros modèles | Inférence ultra-rapide, qualité tolérable |
| GQA | G (intermédiaire) | G/H | ≈ MHA | Standard industriel, meilleur compromis |
| MLA | Compression latente | Très réduit | ≥ MHA | Ultra-efficacité long-contexte (DeepSeek) |
GQA vs MQA : GQA est strictement supérieur pour les modèles de taille moyenne à grande. MQA ne conserve un avantage que dans les cas extrêmes où chaque microseconde de latence compte et où une légère baisse de qualité est acceptable. En pratique, GQA a remplacé MQA dans la quasi-totalité des architectures récentes.
GQA vs MLA : Le papier TransMLA (2025) démontre formellement que MLA (dans sa forme factorisée) est théoriquement plus expressif que GQA pour la partie non-positionnelle. Les ablations de DeepSeek V2 confirment que MLA surpasse GQA en qualité tout en offrant un KV cache encore plus compact. Cependant, GQA bénéficie d’un écosystème plus mature (support FlashAttention-4 natif, intégration dans tous les frameworks) et d’une simplicité d’implémentation qui explique sa domination actuelle. MLA est plus complexe à implémenter et nécessite des kernels spécialisés (FlashMLA). Pour les nouveaux modèles, le choix entre GQA et MLA dépend du budget d’ingénierie et de la priorité donnée à l’efficacité mémoire.
GQA et le reste de la stack d’optimisation
GQA et FlashAttention
FlashAttention supporte nativement GQA dans toutes ses versions (FA2, FA3, FA4). Le support inclut le broadcasting automatique des K/V partagées vers les têtes Q du groupe pendant le calcul d’attention en SRAM. FA4 (mars 2026) ajoute le support pack-GQA pour les patterns d’attention personnalisés via FlexAttention.
GQA et décodage spéculatif
GQA améliore le décodage spéculatif de deux manières. Le KV cache plus petit accélère le rollback en cas de rejet de tokens candidats (moins de données à tronquer). Et la mémoire libérée permet de maintenir un batch size plus grand, même avec le surcoût du draft model.
GQA et encodages positionnels
RoPE est l’encodage positionnel le plus utilisé avec GQA. La rotation s’applique aux Q et K individuellement, ce qui fonctionne naturellement avec le partage de K par groupe. Les K partagées d’un groupe reçoivent la même rotation positionnelle, et chaque tête Q du groupe interroge ces K avec son propre vecteur Q roté. La combinaison GQA + RoPE est le couple standard de l’industrie (Llama 3.x, Mistral, Qwen).
GQA et attention sparse dynamique
Des travaux récents étendent l’attention sparse dynamique aux architectures GQA. L’idée est de partager non seulement les K/V entre têtes d’un groupe, mais aussi les décisions de sélection de tokens. Cela réduit encore le coût de l’attention pour les contextes très longs en ne calculant l’attention que sur un sous-ensemble de tokens pertinents, tout en maintenant la structure GQA.
Conseils pratiques de déploiement
Vérifiez le nombre de têtes KV de votre modèle. Tous les LLM modernes n’ont pas le même ratio GQA. Llama 3.x 8B utilise 8 têtes KV sur 32 (4x de réduction), tandis que Llama 3.x 70B utilise 8 sur 64 (8x). Ce ratio impacte directement la mémoire disponible pour le batch size et la longueur de contexte. Consultez le fichier config.json du modèle et cherchez le champ num_key_value_heads.
Tenez compte de GQA dans vos calculs de mémoire. Quand vous dimensionnez votre infrastructure, la formule du KV cache avec GQA doit utiliser le nombre de têtes K/V (G), pas le nombre total de têtes (H). Une erreur courante est de surestimer la mémoire nécessaire en utilisant H au lieu de G, ce qui mène à un surdimensionnement inutile du cluster.
La combinaison GQA + quantization du KV cache est puissante. Un modèle GQA avec un KV cache quantifié en FP8 cumule les réductions : 4x (GQA) × 2x (FP8) = 8x de réduction totale par rapport à MHA en FP16. TensorRT-LLM et vLLM supportent tous deux cette combinaison.
Au-delà de GQA : l’avenir de l’attention
Bien que GQA domine aujourd’hui, plusieurs directions de recherche pourraient le supplanter à terme :
MLA (Multi-head Latent Attention), utilisé par DeepSeek V3/R1, offre un KV cache encore plus compact avec une expressivité supérieure. Si les kernels spécialisés (FlashMLA) se démocratisent, MLA pourrait devenir le nouveau standard.
Attention hybride (Qwen3-Next), qui mélange couches d’attention linéaire (DeltaNet) et attention standard, repousse les limites du throughput pour les contextes très longs.
Mixture-of-Head (MoH) permet à chaque token de sélectionner dynamiquement les têtes pertinentes, n’activant que 50 à 90% des têtes tout en surpassant le MHA standard.
Multi-matrix Factorization Attention (MFA) (ACL 2025) unifie MHA, GQA et MLA dans un cadre théorique commun basé sur la factorisation de rang faible, ouvrant la voie à des architectures encore plus efficaces.
Verdict : GQA reste le choix le plus sûr et le mieux supporté pour les déploiements production. Son écosystème (support FlashAttention, intégration native dans tous les frameworks, large base de modèles disponibles) lui confère un avantage pratique considérable. Pour les équipes disposant de ressources d’ingénierie avancées et visant une efficacité mémoire maximale, MLA mérite une évaluation sérieuse.
Questions fréquentes sur la Grouped-Query Attention
Quelle est la différence entre GQA et MHA classique ?
En MHA standard, chaque tête d’attention possède ses propres matrices Key (K) et Value (V), ce qui maximise l’expressivité mais crée un KV cache volumineux. En GQA, les têtes de Query sont regroupées et chaque groupe partage un seul set de K/V. Par exemple, avec 32 têtes Q et 8 groupes K/V, le KV cache est 4x plus petit qu’en MHA, avec une qualité de modélisation quasi identique d’après les études d’ablation.
Pourquoi GQA est-il meilleur que MQA ?
MQA (Multi-Query Attention) utilise un seul set K/V pour toutes les têtes, ce qui réduit massivement le cache mais force toutes les têtes à voir la même information contextuelle. Cela dégrade la qualité, surtout pour les gros modèles. GQA offre un compromis en utilisant plusieurs groupes K/V (par exemple 8), ce qui préserve une diversité de perspectives attentionnelles tout en réduisant significativement le cache. Les tests montrent que GQA atteint la qualité de MHA avec la vitesse proche de MQA.
Peut-on convertir un modèle MHA existant en GQA ?
Oui. Le papier original GQA propose une recette d’uptraining qui nécessite environ 5% du budget de pré-entraînement. Les K/V des têtes d’un même groupe sont moyennées pour initialiser les K/V partagées, puis le modèle est entraîné brièvement pour s’adapter. Meta a utilisé cette technique pour Llama 2 70B. Pour les nouveaux modèles, GQA est configuré directement dès le départ, sans besoin de conversion.
Combien de groupes K/V (G) choisir ?
Les configurations les plus validées sont G = 8 pour les gros modèles (64 têtes Q → ratio 8x) et G = 4 à 8 pour les modèles moyens (32 têtes Q → ratio 4x à 8x). Llama 3.x et Mistral utilisent tous G = 8. Trop peu de groupes (G ≤ 2) se rapproche de MQA et risque de dégrader la qualité. Trop de groupes (G > 16) réduit l’avantage en mémoire sans gain de qualité. G = 8 est le point d’équilibre le plus couramment retenu.
GQA ralentit-il l’entraînement ?
Non. GQA utilise moins de paramètres pour les projections K/V, ce qui rend chaque forward pass légèrement plus rapide qu’en MHA (moins de calcul de projection, moins de mémoire à gérer). Le coût de l’entraînement est donc inférieur ou égal à celui du MHA standard. L’avantage principal de GQA est à l’inférence (KV cache réduit), mais l’entraînement n’est jamais plus lent.