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 필요

관련 개념

참고