グループドクエリアテンション(グループドクエリアテンション)
グループドクエリアテンション(Grouped-Query Attention, GQA)とは、複数のQueryヘッドが1組のKey-Valueヘッドを共有するアテンション機構であり、Multi-Head Attention(MHA)の品質とMulti-Query Attention(MQA)のメモリ効率を両立する手法である。Google Researchが2023年の論文「GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints」で提案し、Llama 3.1、Gemma 2、Mistral、Qwen 2.5など2024-2026年の主要LLMの標準構成となった。
グループドクエリアテンション(GQA)とは
GQA(Grouped-Query Attention)は、MHA(Multi-Head Attention)のQueryヘッドを複数のグループに分け、各グループ内のQueryヘッドが1組のKey-Valueヘッドを共有するアテンション手法である。MHAではh個のQヘッドに対しh個のKVヘッドが必要だが、GQAではg個(1 < g < h)のKVヘッドに削減することで、推論時のKVキャッシュメモリをh/g分の1に圧縮する。
MHA・MQA・GQAの関係
GQAはMHAとMQAを両端とするスペクトラムの中間に位置する:
| 手法 | Queryヘッド数 | KVヘッド数 | KVキャッシュ比 | 品質 | 提案年 |
|---|---|---|---|---|---|
| MHA | h | h | 1.0x | 最高 | 2017 |
| GQA | h | g (例: 8) | g/h (例: 1/8) | MHAとほぼ同等 | 2023 |
| MQA | h | 1 | 1/h | やや劣化 | 2019 |
- MQA: g=1(全Queryヘッドが1つのKVヘッドを共有)
- MHA: g=h(各Queryヘッドが独自のKVヘッドを持つ)
- GQA: 1 < g < h の任意の値
主要モデルのGQA構成
| モデル | パラメータ | Qヘッド | KVヘッド | グループサイズ | KVキャッシュ削減率 |
|---|---|---|---|---|---|
| Llama 2 70B | 70B | 64 | 8 | 8Q/1KV | 87.5% |
| Llama 3.1 8B | 8B | 32 | 8 | 4Q/1KV | 75% |
| Llama 3.1 70B | 70B | 64 | 8 | 8Q/1KV | 87.5% |
| Llama 3.1 405B | 405B | 128 | 8 | 16Q/1KV | 93.75% |
| Mistral 7B | 7.3B | 32 | 8 | 4Q/1KV | 75% |
| Gemma 2 27B | 27B | 32 | 16 | 2Q/1KV | 50% |
| Qwen 2.5 72B | 72B | 64 | 8 | 8Q/1KV | 87.5% |
| DeepSeek-V3 | 671B MoE | 128 | MLA | 圧縮 | ~95% |
KVキャッシュメモリの具体的削減量
128Kトークンの文脈長における各手法のKVキャッシュ使用量(Llama 3.1 70B相当構成):
- MHA(64Q/64KV): 64 x 2 x 128 x 128K x 2bytes (fp16) = 約4.1GB/リクエスト
- GQA(64Q/8KV): 8 x 2 x 128 x 128K x 2bytes (fp16) = 約512MB/リクエスト
- MQA(64Q/1KV): 1 x 2 x 128 x 128K x 2bytes (fp16) = 約64MB/リクエスト
- 削減効果: GQAでMHA比87.5%削減、同時処理可能バッチサイズが約8倍に
MHAからGQAへの変換方法
Google Researchの論文では、事前学習済みMHAモデルをGQAに変換する「uptraining」手法を提案している:
- MHAモデルのKVヘッドをグループごとに平均プーリング(mean pooling)で集約
- 元の学習データの5〜10%で追加学習(uptraining)
- 追加学習後の品質はMHAの99%以上を維持
Llama 2 70BはMHAで学習後にGQA(8 KVヘッド)へ変換され、MMLU等のベンチマークでMHA版とほぼ同等の性能を達成した。
GQAの実装例
PyTorchでのGQA実装の要点:
- Queryの出力次元: h x d_k(例: 64 x 128 = 8,192)
- Key/Valueの出力次元: g x d_k(例: 8 x 128 = 1,024)
- Queryテンソルをreshapeしてグループ次元を追加: (batch, seq, h, d_k) → (batch, seq, g, h/g, d_k)
- Key/Valueをグループ次元でbroadcast拡張: (batch, seq, g, d_k) → (batch, seq, g, h/g, d_k)
- 以降は標準のScaled Dot-Product Attentionと同一
よくある質問(FAQ)
Q1: GQAのKVヘッド数はいくつが最適ですか? A: 経験的にはKVヘッド数8が最も広く採用されている(Llama 3.1全サイズ、Mistral、Qwen 2.5)。これはQヘッド数の1/4〜1/16の範囲に収まり、品質と効率のバランスが良い。Gemma 2 27Bは16 KVヘッドとやや多めで、品質重視の設計。
Q2: GQAとMLA(Multi-Latent Attention)の違いは何ですか? A: GQAはKVヘッドをグループ単位で共有するのに対し、MLA(DeepSeek-V2/V3)はKV表現を低ランク圧縮した潜在ベクトルとして保持する。MLAはGQA以上のKVキャッシュ圧縮率を達成しつつ、品質はMHA以上とされる。ただし実装の複雑さが増す。
Q3: 推論だけでなく学習時もGQAは効率的ですか? A: 学習時のメモリ効率向上は推論時ほど大きくない。学習ではKVキャッシュが不要なため、GQAの主な恩恵はKV射影行列のパラメータ削減(全体の数%)に限られる。GQAの真価は推論時のKVキャッシュ圧縮にある。
まとめ
- GQAは複数のQueryヘッドで1組のKVヘッドを共有し、KVキャッシュを75〜93%削減する
- Llama 3.1、Mistral、Qwen 2.5など2024-2026年の主要LLMの標準アテンション構成
- KVヘッド数8がデファクトスタンダード、品質劣化はMHA比で1%未満
- MHAモデルからのuptraining変換も可能(学習データ5-10%で追加学習)