sy/dev
Paper Review
10 min read

[논문 리뷰] 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은 시퀀스의 모든 토큰이 다른 모든 토큰을 참조할 수 있게 설계됐다.

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \cdot V

이것은 완벽하지만, 문제가 있다:

  • 계산 복잡도: 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개 토큰만 참조.

SlideWindow(Qt,K,V)=softmax(QtK[tn,t]Tdk)V[tn,t]\text{SlideWindow}(Q_t, K, V) = \text{softmax}\left(\frac{Q_t K_{[t-n, t]}^T}{\sqrt{d_k}}\right) \cdot V_{[t-n, t]}

  • 장점: 로컬 구조, 문법·코어참조 등 가까운 의존성 포착
  • 비용: 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을 다시 보자:

headi=Attention(QWiQ, KWiK, VWiV)\text{head}_i = \text{Attention}(QW_i^Q,\ KW_i^K,\ VW_i^V)

각 헤드는 같은 입력에서 다른 부분공간으로 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.2V4
Parameters671B1.6T
Activated per token~37B~49B (약 33% 증가)
KV Cache (1M seq)~100GB~10GB (90% 감축)
Context128K1M (8배)
Inference cost기준27% (상당히 저렴)

핵심: 파라미터는 2.4배 늘었지만, 추론 비용은 27% 선이라는 것은 Attention 최적화 덕분.

마치며

DeepSeek-V4의 Attention 설계는:

  1. 기초를 존경: Q/K/V, Multi-Head의 원칙을 그대로 유지
  2. 문제에 답함: Full Attention의 비효율을 Hybrid로 해결
  3. 엔지니어링의 정수: Sliding-Window + CSA + HCA의 조합, Shared KV, Partial RoPE — 단순한 개선들의 시너지
  4. 스케일의 새 기준: 1M token을 현실적으로 처리 (KV cache 90% 감축)

시리즈 5부(FFN)에서 언급했던 "단순함이 Transformer를 강력하게 만든다" 는 말이 여기서도 통한다. DeepSeek-V4는 새로운 메커니즘을 발명한 게 아니라, 기존 아이디어(Attention 압축, shared KV, MoE)를 정교하게 조합해 한 단계 높은 효율을 얻었다.

참고자료

Comments