대규모 언어 모델(LLM)은 문장을 한 토큰씩 생성합니다. 예를 들어 “오늘 날씨는”이라는 문장을 입력받아 다음 토큰을 예측하고, 그 결과를 다시 입력으로 사용해 다음 토큰을 생성하는 방식입니다. 이 과정에서 모델은 매번 이전 문맥을 다시 읽고 계산해야 합니다.
오늘날의 언어 모델들은 대부분 트랜스포머(Transformer) 구조를 사용하는데, 이러한 모델은 문장을 구성하는 각 토큰에 대해 쿼리(query), 키(key), 값(value)을 생성합니다. 쿼리는 “무엇을 찾고 싶은가”에 해당하고, 키는 “어떤 정보인가”, 값은 “실제 전달할 정보”라고 볼 수 있습니다.
이것을 매번 계산하면 비효율적입니다. 그래서 이전 토큰의 키와 값을 저장해 둡니다. 이것이 KV 캐시(cache)입니다. K는 키, V는 값을 의미합니다.
이 방식 덕분에 추론(inference) 속도가 크게 향상됩니다. 특히 긴 문장을 생성할 때 효과가 매우 큽니다. 만약 KV 캐시가 없다면 문장이 길어질수록 계산량이 급격히 증가합니다.
KV 캐시는 속도를 높여 주지만, 대신 메모리를 많이 사용합니다. 왜냐하면 이전 토큰들의 키와 값을 모두 저장해야 하기 때문입니다.