대규모 언어 모델(LLM)이 문장을 생성하는 과정은 겉으로 볼 때 단순해 보이지만, 내부에서는 정교한 계산 절차가 단계적으로 진행됩니다.
여기서는 “바다 색깔은 → 파랗다.”라는 간단한 예시를 통해 LLM의 추론 과정(Prefill·Decoding), 그리고 핵심 요소인 Q, K, V가 각각 어떤 역할을 수행하는지 명확하게 정리해보겠습니다.
모델은 먼저 사용자가 입력한 모든 토큰을 병렬 처리합니다.
예를 들어 프롬프트가 다음과 같다면:
[바다], [색깔], [은]
각 토큰에서 다음을 계산합니다.
이렇게 3개의 토큰에서 계산한 (K, V)를 KV 캐시라는 메모리에 저장합니다.
이 단계에서 중요한 점:

이제 모델은 첫 번째 출력 단어를 생성해야 합니다.
이 Q는 “지금 위치에서 다음 단어를 예측하려면 무엇이 필요한가?”라는 질문지 역할을 합니다.
예를 들어 [은] 다음 토큰을 만들기 위한 Q4는 [은] 토큰의 내부 상태를 기반으로 생성됩니다.
Q4는 캐시에 저장된
(K1,V1), (K2,V2), (K3,V3)
즉 [바다], [색깔], [은]을 모두 비교해 “무엇이 중요한가?”를 계산합니다.
그 결과를 바탕으로 모델은 [파랗다]를 예측합니다.
새로 생성한 토큰 [파랗다]로부터
K4, V4를 계산하여 캐시에 추가합니다.
이번엔 [파랗다]를 기반으로 Q5를 생성해
KV 캐시 전체를 다시 참고하여 [.]을 생성합니다.
이 방식으로 [END]가 나올 때까지 반복합니다.
이 단계에서 발생하는 비용이 출력 비용(Output Cost)입니다.
LLM은 오토회귀 모델입니다.
즉, "이전의 모든 토큰"을 참고해서 다음 단어를 예측합니다.
만약 캐시가 없다면?
따라서 캐시가 없다면 속도는 수십 배 이상 느려지고,
모델 추론은 사실상 불가능하게 됩니다.
KV 캐시는 과거 계산 결과를 저장해두는 ‘메모리’입니다.
덕분에 매 스텝마다 새로운 토큰 1개에 대한 K, V만 계산하면 됩니다.
이 부분은 많은 분들이 헷갈리는 주제입니다.
결론은 간단합니다:
Q는 일회용 질문지이기 때문입니다.
Q4는 토큰 4를 생성하면 다시는 필요하지 않습니다.
계속 보관할 이유가 없죠.
반대로 K와 V는
“과거의 기록”이자 “참조해야 할 정보”이기 때문에
계속 저장됩니다.
세 벡터는 모두 “토큰의 표현 벡터”에서 만들어집니다.
여기서 사용하는 변환은 독립된 선형 레이어(Projection)입니다.
일반적인 MLP처럼 여러 층을 쌓진 않습니다.
세 벡터를 서로 다르게 만드는 이유는 역할이 다르기 때문입니다.
Prefill 단계
Decoding 단계
KV 캐시가 핵심
Q는 왜 저장하지 않는가?
이해가 아주 잘 됩니다 개추드리겠습니다