[논문 리뷰] DeepSeek-V4 — 1M Context에서 KV Cache 10% 수준으로 압축한 Hybrid Attention
DeepSeek-V4는 기존 Multi-Head Attention의 개념을 바탕으로, Compressed Sparse Attention(CSA)와 Heavily Compressed Attention(HCA)을 결합한 Hybrid Attention으로 1M token context를 지원하면서도 KV cache를 90% 감축했다. 이전 Attention 이해하기 시리즈의 Q/K/V와 Multi-Head Attention 개념을 이어 DeepSeek-V4가 어떻게 구현했는지 살펴본다.
한 줄 요약 — DeepSeek-V4는 기존 Transformer의 완전한 주의(full attention)를 세 가지 주의 메커니즘으로 분리하고, Key-Value를 지능적으로 압축해 1M token context를 KV cache 90% 감축으로 구현했다.
지난 5편의 Attention 이해하기 시리즈에서 우리는 Transformer의 기초를 정리했다 — Q/K/V의 역할, Scaled Dot-Product Attention의 수식, Multi-Head Attention이 여러 관점을 동시에 학습하는 메커니즘. 이번 글은 그 기초 위에서 DeepSeek-V4가 어떻게 Attention을 재설계했는지 살펴본다.
문제: Full Attention의 한계
Attention 기초에서 다뤘던 Scaled Dot-Product Attention은 시퀀스의 모든 토큰이 다른 모든 토큰을 참조할 수 있게 설계됐다.
이것은 완벽하지만, 문제가 있다:
- 계산 복잡도: O(N²) — 시퀀스 길이 N에 대해 이차 복잡도
- 메모리 (KV cache): 각 토큰의 K와 V를 저장해야 함 — 1M token context면 메모리가 폭증
- 추론 지연: 길어진 시퀀스에서 각 쿼리가 모든 키와 계산해야 하므로 느려짐
DeepSeek-V4는 이 문제를 다르게 접근했다: 모든 토큰을 다 볼 필요는 없고, 지능적으로 필요한 정보만 압축해서 보자.
아이디어: Hybrid Attention — 세 가지 주의 조합
DeepSeek-V4는 Full Attention을 세 가지 주의 메커니즘으로 분리했다.
1. Sliding-Window Attention (로컬 컨텍스트)
기존 Multi-Head Attention과 거의 동일하지만, 최근 n개 토큰만 참조.
- 장점: 로컬 구조, 문법·코어참조 등 가까운 의존성 포착
- 비용: O(N·w) — w는 윈도우 크기 (보통 128)
- 예: 현재 위치에서 지난 128 토큰까지만 본다
2. Compressed Sparse Attention (CSA) — 저압축
더 먼 과거 정보를 압축해서 간추린다.
핵심 아이디어: 각 "블록(m개 토큰)"을 하나의 토큰으로 압축한 후, 압축된 토큰들 중 관련성 높은 것만 선택.
원본: [토큰1 토큰2 토큰3 토큰4 | 토큰5 토큰6 토큰7 토큰8 | ... ] (m=4 블록)
↓ 압축
블록: [블록표현1 | 블록표현2 | ... ] (m배 압축)
↓ Lightning Indexer (top-k 선택)
선택: [블록표현1 블록표현2 ... ]의 상위 k개만 Attention
Lightning Indexer (논문 §2.3.1):
- 각 쿼리 토큰에 대해 "어느 블록과 가장 관련 있을까?"를 빠르게 계산
- 상위 k개 블록만 full attention에 참여
- 비용: 선택적(sparse) — 필요한 정보만 계산
3. Heavily Compressed Attention (HCA) — 고압축
더 오래된 정보를 극도로 압축.
- 압축률: m' = 128 (m=4인 CSA보다 32배 더 압축)
- Lightning Indexer 없음 — 모든 압축된 블록이 참여 (하지만 창 크기 조건)
- 역할: 매우 긴 의존성(1M token 이전의 단편적 정보) 포착
기존 Attention 시리즈와의 연결
우리가 이전 글에서 배운 Multi-Head Attention을 다시 보자:
각 헤드는 같은 입력에서 다른 부분공간으로 Q/K/V를 투영해서 여러 관점(의미, 문법, 위치 등)을 동시에 학습한다.
DeepSeek-V4도 이 Multi-Head 개념을 유지하지만, 여기에 세 가지 Attention 타입을 계층별로 배정.
| 레이어 | Attention 타입 | 역할 | 계산 복잡도 |
|---|---|---|---|
| 초기(1~2) | Sliding-Window | 로컬 문맥 | O(N) |
| 중간(3~40) | CSA ↔ HCA 교대 | 멀티 스케일 의존성 | O(N·log N) |
| 후기(40~43) | CSA / HCA | 문서 전체 관점 | O(N·log N) |
Key Innovation: KV Cache 압축
가장 주목할 점은 Multi-Query Attention (MQA) 변형이다.
기존 Multi-Head Attention의 KV Cache
Attention 시리즈 2편에서 본 Multi-Head Attention:
# 표준: num_heads개의 독립적 K, V
Q = X @ W_q # shape: (batch, seq, d_model)
K = X @ W_k # 각 헤드마다 K, V 저장 필요
V = X @ W_v추론 때 KV cache 크기:
- batch=1, seq=1M, heads=64, head_dim=64
- K 캐시: 1×1M×64×64 bytes = 4GB (대략)
DeepSeek-V4: Shared KV Multi-Query Attention
# DeepSeek-V4: 모든 헤드가 같은 K, V를 공유
K = X @ W_k # 단 하나의 K (모든 헤드가 이것을 재사용)
V = X @ W_v # 단 하나의 V
# 각 헤드: Attention(Q_head, K_shared, V_shared)KV cache는 1/64 → 약 64MB! (KV cache가 전체 캐시의 10%)
이것이 가능한 이유:
- Q는 여러 관점 필요 (각 헤드가 다른 표현 학습)
- 하지만 K와 V는 "입력 정보를 어디에 담을까" 하는 저수준 구조
- 입력은 모든 헤드에서 동일하므로 K/V를 공유해도 충분
Partial RoPE (Rotary Positional Embedding)
또 다른 최적화:
# 전체 head_dim 중 일부만 RoPE 적용
qk_rope_head_dim = head_dim * 0.5 # head_dim의 50%
# [Q_rope | Q_static]
# RoPE는 상대 위치 정보만 필요 → 부분만으로 충분왜 작동하는가?
- RoPE는 토큰 간 상대 거리를 인코딩 (절대 위치 아님)
- 전체 head_dim을 모두 회전할 필요 없음 — 일부만으로 충분
- 나머지는 내용(content) 학습용
Manifold-Constrained Hyper-Connections (mHC)
하나의 기술 더: Residual Connection의 진화.
기존 Transformer:
x → Attention → + (residual) → LayerNorm → FFN → + (residual) → out
DeepSeek-V4:
x → [Attention Branch 1]
[Attention Branch 2] → mHC (4개 평행 경로)
[Attention Branch 3]
[Attention Branch 4]
→ 신호 믹싱 (Sinkhorn-Knopp projection)
이점:
- 4개 평행 경로가 정보를 다중으로 전달
- Manifold 제약으로 깊은 네트워크에서도 신호 폭증 제어
- 결과: 더 깊고 안정적인 모델 (깊이 43)
MoE (Mixture of Experts) 개선
FFN 시리즈의 MoE 개념을 이어받아:
Hash-MoE Bootstrap (초기 3 레이어)
# 학습 가능한 라우팅이 아닌, 고정된 매핑
tid2eid = {input_id → expert_id} # 미리 정해진 매핑
# 모든 데이터에서 expert 활성화가 균형을 이룸이점:
- 로드 밸런싱 자동 해결
- 초기 레이어에서 안정적인 학습
Top-k Routed MoE (나머지 40 레이어)
# 표준 MoE: 각 토큰마다 top-6개 expert 선택
experts_score = softmax(x @ W_router)
top_6_experts = argtop(experts_score, k=6)- Routed experts: 256개 (각각 전문화)
- Shared expert: 1개 (모든 토큰에 적용 — 안정성)
- Activation: 토큰당 6개 + 1개 = 7개 전문가 활용 (sparse)
결과: 1M Context에서 충분한 성능
| 지표 | V3.2 | V4 |
|---|---|---|
| Parameters | 671B | 1.6T |
| Activated per token | ~37B | ~49B (약 33% 증가) |
| KV Cache (1M seq) | ~100GB | ~10GB (90% 감축) |
| Context | 128K | 1M (8배) |
| Inference cost | 기준 | 27% (상당히 저렴) |
핵심: 파라미터는 2.4배 늘었지만, 추론 비용은 27% 선이라는 것은 Attention 최적화 덕분.
마치며
DeepSeek-V4의 Attention 설계는:
- 기초를 존경: Q/K/V, Multi-Head의 원칙을 그대로 유지
- 문제에 답함: Full Attention의 비효율을 Hybrid로 해결
- 엔지니어링의 정수: Sliding-Window + CSA + HCA의 조합, Shared KV, Partial RoPE — 단순한 개선들의 시너지
- 스케일의 새 기준: 1M token을 현실적으로 처리 (KV cache 90% 감축)
시리즈 5부(FFN)에서 언급했던 "단순함이 Transformer를 강력하게 만든다" 는 말이 여기서도 통한다. DeepSeek-V4는 새로운 메커니즘을 발명한 게 아니라, 기존 아이디어(Attention 압축, shared KV, MoE)를 정교하게 조합해 한 단계 높은 효율을 얻었다.