KV 캐시 (KV Cache)
Transformer inference에서 각 레이어·각 토큰의 Key·Value 행렬을 저장해두는 캐시. Decode 단계에서 앞선 context를 매번 재계산하지 않아도 되도록 한다.
생성 원리
Prefill 단계에서 입력 토큰 전체를 병렬 처리하며 각 transformer 레이어마다 K·V를 생성·저장:
- Query(Q): 한 번 쓰고 버림
- Key(K), Value(V): 뒤 토큰의 attention에서 재사용 → 캐시 유지
Decode에서는 직전 output 토큰 1개만 입력으로 들어가지만, 앞선 전체 context의 K·V는 캐시에서 불러온다.
메모리 규모
KV 캐시 크기 ≈ 레이어 수 × 토큰 수 × 2(K,V) × head 수 × head_dim × bytes
DeepSeek V3 기준(61레이어): 100만 토큰 context → 수십 GB 규모
HBM 배분 (20TB HBM 기준, 5T FP8 모델 가정)
| 용도 | 크기 |
|---|---|
| 모델 가중치 | ~5TB |
| KV 캐시 | ~13-14TB |
| activation 변수 | ~2TB |
→ KV 캐시가 HBM의 가장 큰 비중 차지
PagedAttention 혁신
vLLM이 개발한 포인터 기반 KV 캐시 관리:
- 기존: 유저별로 고정 크기 tensor 할당 → padding 낭비 심각
- 개선: OS의 virtual memory처럼 page 단위로 분할 → 포인터로 연결 → 메모리 낭비 최소화
Eviction 계층
HBM → CPU DRAM → Flash SSD → (삭제) → 재prefill 필요