한 줄 정의

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 캐시 양자화가 항상 나쁜 것도 아니야. 챗봇처럼 짧게 묻고 답하는 워크로드에서는 메모리 절감 효과가 더 중요할 수 있어. 반대로 긴 문맥을 계속 쌓는 작업이라면 짧은 점수표 대신 실제 워크로드로 회귀 테스트를 돌려 보는 게 맞아.