한 줄 정의
KV 캐시는 LLM이 앞에서 읽은 토큰의 key/value 값을 저장해 두었다가 다음 토큰을 만들 때 다시 쓰는 내부 메모리야. 쉽게 말해 모델이 같은 문맥을 매번 처음부터 다시 계산하지 않도록 붙잡아 두는 작업용 메모리라고 보면 돼.
어떻게 작동하나
Transformer 계열 모델은 다음 토큰을 만들 때 이전 토큰들과의 관계를 계속 계산해. 이때 이전 토큰의 key와 value를 캐시에 저장해 두면, 새 토큰이 들어올 때 이미 계산한 부분을 다시 만들 필요가 줄어들어 추론 런타임이 빨라져.
문제는 긴 문맥일수록 KV 캐시도 같이 커진다는 점이야. 짧은 질문 하나라면 부담이 작지만, 100k 토큰 문서나 여러 턴을 이어 가는 에이전트 작업에서는 컨텍스트가 길어지고 캐시가 VRAM과 메모리를 크게 잡아먹을 수 있어.
여기서 컨텍스트 윈도우는 모델이 볼 수 있는 범위이고, KV 캐시는 그 범위를 빠르게 다시 쓰려고 실제로 들고 있는 계산 결과야. 숫자는 같은 방향으로 커지지만, 하나는 입력 한도이고 다른 하나는 실행 중 메모리 부담이라는 점이 달라.
왜 중요한가
로컬 LLM에서 VRAM이 부족하면 모델 가중치뿐 아니라 KV 캐시도 병목이 돼. 그래서 vLLM이나 Transformers 같은 일부 런타임은 KV 캐시를 FP16 대신 FP8이나 INT8처럼 더 작은 형식으로 저장하는 옵션을 제공해. 이게 양자화된 KV 캐시야.
다만 KV 캐시는 다음 토큰 계산에 계속 다시 쓰이는 값이라, 저장 형식을 바꿨을 때 긴 문맥에서 결과가 그대로 유지되는지 따로 봐야 해. 단발 벤치에서는 멀쩡해 보여도 긴 코딩 에이전트나 멀티턴 RAG에서는 실제 워크로드로 품질 회귀가 없는지 확인하는 게 안전하다는 운영 경고가 여기서 나와.
주의해서 볼 점
KV 캐시는 영구 기억이 아니야. 세션이나 요청의 문맥을 처리하는 동안 쓰는 내부 상태에 가깝고, 모델이 사용자의 정보를 장기 저장한다는 뜻은 아니야.
또 KV 캐시 양자화가 항상 나쁜 것도 아니야. 챗봇처럼 짧게 묻고 답하는 워크로드에서는 메모리 절감 효과가 더 중요할 수 있어. 반대로 긴 문맥을 계속 쌓는 작업이라면 짧은 점수표 대신 실제 워크로드로 회귀 테스트를 돌려 보는 게 맞아.