KV-Cache

김동준·2025년 10월 20일

KV 캐시란?

트랜스포머 모델의 어텐션 계산에서 Key와 Value 벡터를 저장해두는 메모리 공간입니다.

왜 필요한가?

어텐션 메커니즘에서는 세 가지 벡터를 사용합니다:

  • Query (Q): 현재 토큰이 "무엇을 찾고 있는가"
  • Key (K): 각 토큰이 "무엇에 대한 것인가"
  • Value (V): 각 토큰의 "실제 정보"

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₃만 계산 → 캐시에 추가, 이전 것들 재사용

단계별 동작

1. Prefill 단계

입력: "AI의 미래는"
→ 모든 입력 토큰의 K, V 계산
→ KV 캐시에 저장: [K_AI, V_AI], [K_의, V_의], [K_미래, V_미래], [K_는, V_는]

2. Decoding 단계

생성 토큰 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 (양자화)

  • FP16 → INT8/INT4로 압축
  • 메모리 사용량 50~75% 감소

2. PagedAttention (vLLM)

  • 메모리를 페이지 단위로 관리
  • 단편화 감소, 효율적인 메모리 사용

3. Multi-Query Attention (MQA)

  • 여러 Query 헤드가 하나의 K, V를 공유
  • KV 캐시 크기 대폭 감소

4. Grouped-Query Attention (GQA)

  • MQA와 일반 어텐션의 중간
  • 품질과 효율성의 균형

실제 영향

장점:

  • 생성 속도 10~100배 향상
  • 긴 문맥 처리 가능

단점:

  • GPU 메모리의 대부분 차지
  • 배치 크기 제한의 주요 원인
  • 긴 대화에서 메모리 부족 발생 가능

KV 캐시는 현대 LLM 서비스의 핵심 기술이며, 이를 효율적으로 관리하는 것이 서비스 성능을 결정하는 중요한 요소입니다!

profile
Story Engineer

0개의 댓글