← 모든 글

긴 컨텍스트 LLM이 메모리에서 터지는 이유

2026-05-06

컨텍스트를 128k로 올렸을 때 GPU가 터지는 진짜 이유, KV 캐시. 무엇이고 어떻게 계산하는지.

긴 컨텍스트 설정하고 처음 써보는데 GPU가 터지면 답은 KV 캐시.

정체

트랜스포머는 모든 이전 토큰에 어텐션. 매번 재계산하지 않으려고 키·값을 저장. 그게 KV 캐시. 레이어별, 토큰별 한 블록씩.

공식

KV 캐시 바이트:

``` 2 × 레이어수 × KV 헤드수 × 헤드 차원 × 시퀀스 × 배치 × 원소당 바이트 ```

FP16이면 원소당 2바이트.

Llama 3.1 70B(80 레이어, 8 KV 헤드, 128 차원) × 32k × 배치 1 × FP16:

``` 2 × 80 × 8 × 128 × 32768 × 1 × 2 = 10.7GB ```

KV만이에요. 가중치 별도.

GQA가 중요한 이유

Grouped Query Attention은 KV 헤드 수를 줄임. Llama 3.1은 8 KV 헤드, Llama 2는 64. 모델 크기 같은데 KV 캐시는 약 8배 작음. 긴 컨텍스트 Llama가 실용 가능해진 결정적 트릭.

옛날 멀티헤드 모델(Mistral 7B v0.1)은 KV 캐시 빨리 빠짐. 최신 GQA 모델(Llama 3.x, Qwen 2.5, DeepSeek)은 훨씬 쌈.

KV 캐시 양자화

KV 캐시는 기본 FP16. INT8 = 절반, INT4 = 1/4. 채팅 손실 작고, 추론은 좀 더 보임. vLLM, llama.cpp, TensorRT-LLM 모두 FP8 KV 캐시 지원.

신경 쓸 때

8k 미만이면 KV 캐시는 반올림 오차. 32k에선 진짜 덩어리. 128k+면 지배적. 긴 문서 QA, 레포 규모 코드, 다턴 에이전트 히스토리는 KV 캐시를 강하게 두드림.

제대로 사이징

실제 사용할 가장 긴 워크로드로 컨텍스트 설정 → 가중치 메모리에 KV 캐시 더함 → 20% 헤드룸. 계산기가 다 해줘요. 가중치만 보고 나머지 작다고 가정하지 말 것.