06. MHA, MQA, GQA, MLA
핵심 질문
- attention의 표현 방식이 KV 캐시 크기와 커널을 어떻게 바꾸는가?
- "KV를 줄이면 무조건 좋다"는 성립하는가, 어떤 절충이 숨어 있는가?
목표
- MHA·MQA·GQA·MLA를 05장의 KV 식(특히 H_kv)에 연결한다.
- 각 방식의 메모리·품질·구현 절충을 정직하게 정리한다.
여정에서의 위치
05장의 KV 하한 식 2 × L × H_kv × d_h × T × b에서, 대부분의 값은 모델 크기로 정해집니다. 그런데 H_kv(KV head 수)는 attention을 어떻게 설계했느냐로 달라집니다. 이 장은 그 설계 선택지들입니다 — 즉 "KV 식의 H_kv를 줄이는" 아키텍처 수준의 방법입니다.
🔎 약어 풀이
- head(어텐션 헤드): attention을 여러 갈래로 나눠 각기 다른 관계를 보게 한 단위. query·key·value 각각에 head가 있습니다.
- MHA = Multi-Head Attention, MQA = Multi-Query Attention, GQA = Grouped-Query Attention, MLA = Multi-head Latent Attention.
- RoPE(Rotary Position Embedding): 위치 정보를 회전으로 주입하는 방식. MLA에서 KV 압축과의 상호작용이 미묘해집니다(아래).
네 가지 방식 — 직관
MHA (기본)
query head마다 자기 key/value head가 하나씩 있습니다. 표현력이 가장 풍부하지만, KV head 수 H_kv가 query head 수와 같아 KV 캐시가 가장 큽니다.
MQA (극단적 공유)
모든 query head가 하나의 key/value head를 공유합니다. H_kv=1이 되어 KV가 극적으로 줄지만, 표현이 거칠어져 품질이 떨어질 수 있습니다.
GQA (중간 지점)
query head들을 몇 개 그룹으로 나누고, 그룹마다 key/value head를 공유합니다. MHA와 MQA 사이를 매끄럽게 보간합니다. 그룹 수 G로 KV를 조절하며, 여러 자료에서 MHA에 근접한 품질을 유지하면서 속도 이점을 얻는 방식으로 설명됩니다.
MLA (압축)
head를 공유하는 대신, key/value를 저차원 잠재 벡터(latent vector)로 압축해 저장하고, 쓸 때 다시 펼칩니다. 저장하는 것 자체를 작게 만드는 접근으로, DeepSeek 계열(V2/V3/R1)의 특징으로 알려져 있습니다(확인일 2026-07-20).
flowchart TB
MHA[MHA<br/>head마다 K,V]:::mem -->|H_kv 줄이기| GQA[GQA<br/>그룹이 K,V 공유]:::comp
GQA -->|극단| MQA[MQA<br/>모두 1개 K,V 공유]:::comp
MHA -.다른 축: 압축.-> MLA[MLA<br/>K,V를 잠재벡터로 압축]:::result
classDef mem fill:#e5dbff,stroke:#7048e8,color:#000;
classDef comp fill:#d0ebff,stroke:#1971c2,color:#000;
classDef result fill:#d3f9d8,stroke:#2f9e44,color:#000;
핵심 통찰: GQA/MQA는 "H_kv를 줄이는" 축이고, MLA는 "저장 표현을 압축하는" 다른 축입니다. 그래서 MLA의 KV 크기는 05장 식의 H_kv·d_h 자리 대신 대략 잠재 차원(latent_dim)으로 대체돼 계산됩니다.
표로 정리 — 절충
| 방식 | KV 크기 축 | 품질 경향 | 구현 복잡도 | 비고 |
|---|---|---|---|---|
| MHA | H_kv = query head 수 (최대) | 기준(높음) | 단순 | KV 가장 큼 |
| MQA | H_kv = 1 | 떨어질 수 있음 | 단순 | KV 최소, 품질 리스크 |
| GQA | H_kv = 그룹 수 G | MHA에 근접 가능 | 단순 | MHA↔MQA 보간, 현재 널리 채택 |
| MLA | ≈ 잠재 차원 | 자료에 따라 MHA 수준 유지·소폭 상회 보고 | 높음 | 압축·복원 커널, RoPE 상호작용 주의 |
🔬 증거 읽기 (주장 유형·조건)
- "GQA는 MHA에 필적하는 품질"이라는 서술은 GQA·Llama 2 논문 등의 ablation(measured, 특정 모델·과제 조건)에 근거합니다. "모든 모델에서 항상"이 아니라 그 실험 조건에서입니다.
- "MLA가 MHA보다 품질이 좋았다"는 주장은 주로 DeepSeek-V2 ablation(PRIMARY이되 owner 보고)에서 옵니다. owner의 유리한 조건일 수 있으므로, 독립 재현(REPRODUCTION)과 구분해 읽으세요.
- "MLA가 GQA 대비 KV를 몇 배 줄인다"는 수치(예: 토큰당 70KB vs 192–328KB, 05장)는 모델·구현 조건이 붙은 measured/vendor 값입니다. 조건 없이 "MLA가 무조건 우월"로 옮기지 마세요.
⚖️ 절충(tradeoff)
- MQA: 메모리↓↓, 품질 리스크↑.
- GQA: 메모리↓, 품질 유지 가능, 구현 단순 — 그래서 널리 쓰임.
- MLA: 메모리↓↓(압축), 품질 유지·상회 보고 있으나 구현·서빙 복잡도↑(압축/복원 연산 추가, RoPE 처리, 최적화된 커널 필요). 여러 자료가 "실제 이점을 내려면 최적화된 서빙 구현이 필요하다"고 지적합니다(확인일 2026-07-20).
⚠️ 흔한 오해
- "KV를 줄이면 항상 빨라진다" — 아닙니다. KV를 줄이면 memory 병목은 완화되지만(03장), MLA처럼 압축·복원 연산이 추가되면 compute 쪽 부담이나 커널 복잡도가 늘 수 있습니다. 순이득은 조건부입니다.
- "MLA는 KV 양자화와 같다" — 아닙니다. MLA는 아키텍처 수준의 저차원 압축(모델이 그렇게 학습됨)이고, KV 양자화(11장)는 저장 시 정밀도(bit)를 낮추는 별개의 축입니다. 둘은 겹쳐 쓸 수도 있는 다른 방법입니다.
📌 핵심
- attention 표현 방식은 05장 KV 식의 H_kv(또는 저장 표현)를 바꾼다.
- GQA/MQA는 KV head 수를 줄이는 축, MLA는 저장을 압축하는 다른 축.
- MHA(품질↑·KV↑) ↔ MQA(KV↓·품질 리스크) 사이를 GQA가 보간, MLA는 압축으로 별도 경로.
- KV 축소는 공짜가 아니다 — 품질·구현 복잡도·커널이라는 절충이 따른다.
🔎 이 장의 '지지하지 않는 결론'
- "MLA가 GQA보다 항상 낫다"고 말할 수 없습니다 — owner ablation은 특정 조건이며, 구현 복잡도·서빙 성숙도라는 비용이 있습니다.
- 특정 모델의 품질 우열을 이 장의 개념만으로 판정할 수 없습니다 — 과제·조건이 명시된 measured 근거가 필요합니다.
✍️ 확인 문제
- MHA·MQA·GQA를 05장의 H_kv로 연결해 설명하세요. GQA의 그룹 수 G를 1로 하면 무엇이 됩니까?
- MLA가 GQA와 "다른 축"이라는 말의 의미를, 05장 KV 식에서 무엇이 바뀌는지로 설명하세요.
- (조건 유형) "MLA가 MHA보다 품질이 좋고 KV도 작다"는 주장을 신뢰하려면, 출처 등급과 조건 측면에서 무엇을 확인해야 합니까?
다음 묶음(3부): 07 · batch 효율 → 08 · continuous batching → 09 · PagedAttention → 10 · prefix caching. 스케줄링과 메모리 관리의 세계로.