트랜스포머 모델의 어텐션 계산에서 Key와 Value 벡터를 저장해두는 메모리 공간입니다.
어텐션 메커니즘에서는 세 가지 벡터를 사용합니다:
KV 캐시 없이 생성한다면:
토큰 1 생성: Q₁과 K₁, V₁ 계산
토큰 2 생성: Q₂와 K₁,K₂, V₁,V₂ 다시 계산 (중복!)
토큰 3 생성: Q₃와 K₁,K₂,K₃, V₁,V₂,V₃ 다시 계산 (더 많은 중복!)
KV 캐시를 사용하면:
토큰 1 생성: K₁, V₁ 계산 → 캐시 저장
토큰 2 생성: K₂, V₂만 계산 → 캐시에 추가, K₁,V₁은 재사용
토큰 3 생성: K₃, V₃만 계산 → 캐시에 추가, 이전 것들 재사용
입력: "AI의 미래는"
→ 모든 입력 토큰의 K, V 계산
→ KV 캐시에 저장: [K_AI, V_AI], [K_의, V_의], [K_미래, V_미래], [K_는, V_는]
생성 토큰 1: "매우"
→ K_매우, V_매우만 계산하여 캐시에 추가
→ 기존 캐시 재사용
생성 토큰 2: "밝습니다"
→ K_밝습니다, V_밝습니다만 계산하여 캐시에 추가
→ 기존 캐시 재사용
KV 캐시 크기 예시 (대략적 계산):
모델: 7B 파라미터, 32개 레이어, 32개 헤드
시퀀스 길이: 2048 토큰
정밀도: FP16 (2바이트)
KV 캐시 = 2 (K+V) × 레이어 × 헤드 × 시퀀스 × 차원 × 바이트
≈ 2 × 32 × 32 × 2048 × 128 × 2
≈ 1GB per request
긴 대화나 큰 배치에서는 수십 GB가 필요할 수 있습니다!
1. Quantization (양자화)
2. PagedAttention (vLLM)
3. Multi-Query Attention (MQA)
4. Grouped-Query Attention (GQA)
장점:
단점:
KV 캐시는 현대 LLM 서비스의 핵심 기술이며, 이를 효율적으로 관리하는 것이 서비스 성능을 결정하는 중요한 요소입니다!