LLM 내부 해부: Prefill, Decoding과 QKV의 진짜 작동 원리

Bean·2025년 11월 18일

인공지능

목록 보기
138/184

🧠 LLM의 추론 구조: Prefill, Decoding, QKV의 역할

대규모 언어 모델(LLM)이 문장을 생성하는 과정은 겉으로 볼 때 단순해 보이지만, 내부에서는 정교한 계산 절차가 단계적으로 진행됩니다.
여기서는 “바다 색깔은 → 파랗다.”라는 간단한 예시를 통해 LLM의 추론 과정(Prefill·Decoding), 그리고 핵심 요소인 Q, K, V가 각각 어떤 역할을 수행하는지 명확하게 정리해보겠습니다.


1. LLM 추론은 두 단계로 구성된다

1) Prefill: 입력 전체를 한 번에 처리하는 단계

모델은 먼저 사용자가 입력한 모든 토큰을 병렬 처리합니다.
예를 들어 프롬프트가 다음과 같다면:

[바다], [색깔], [은]

각 토큰에서 다음을 계산합니다.

  • K(Key)
  • V(Value)

이렇게 3개의 토큰에서 계산한 (K, V)를 KV 캐시라는 메모리에 저장합니다.

이 단계에서 중요한 점:

  • 프롬프트 전체를 한 번에 처리한다
  • 이때 계산된 K, V는 이후 출력 생성 과정에서 계속 사용된다
  • 즉, 입력 비용(Input Cost)은 이 단계에서 발생한다

2) Decoding: 출력 토큰을 하나씩 생성하는 단계

이제 모델은 첫 번째 출력 단어를 생성해야 합니다.

(1) 먼저 Q(쿼리)를 만든다

이 Q는 “지금 위치에서 다음 단어를 예측하려면 무엇이 필요한가?”라는 질문지 역할을 합니다.

예를 들어 [은] 다음 토큰을 만들기 위한 Q4[은] 토큰의 내부 상태를 기반으로 생성됩니다.

(2) Q4가 KV 캐시를 참조한다

Q4는 캐시에 저장된
(K1,V1), (K2,V2), (K3,V3)
[바다], [색깔], [은]을 모두 비교해 “무엇이 중요한가?”를 계산합니다.

(3) 조합된 결과로 토큰 생성

그 결과를 바탕으로 모델은 [파랗다]를 예측합니다.

(4) 새 토큰의 K, V를 캐시에 추가

새로 생성한 토큰 [파랗다]로부터
K4, V4를 계산하여 캐시에 추가합니다.

(5) 다음 토큰도 같은 방식으로 반복

이번엔 [파랗다]를 기반으로 Q5를 생성해
KV 캐시 전체를 다시 참고하여 [.]을 생성합니다.

이 방식으로 [END]가 나올 때까지 반복합니다.

이 단계에서 발생하는 비용이 출력 비용(Output Cost)입니다.


2. 왜 KV 캐시가 필요한가?

LLM은 오토회귀 모델입니다.
즉, "이전의 모든 토큰"을 참고해서 다음 단어를 예측합니다.

만약 캐시가 없다면?

  • 50번째 단어를 생성하려면
    이전 49개의 K, V를 매번 처음부터 다시 계산해야 합니다
  • 연산량은 토큰 수에 따라 선형 누적이 아니라 계단식 폭발

따라서 캐시가 없다면 속도는 수십 배 이상 느려지고,
모델 추론은 사실상 불가능하게 됩니다.

KV 캐시는 과거 계산 결과를 저장해두는 ‘메모리’입니다.
덕분에 매 스텝마다 새로운 토큰 1개에 대한 K, V만 계산하면 됩니다.


3. 왜 Q는 캐시하지 않을까?

이 부분은 많은 분들이 헷갈리는 주제입니다.

결론은 간단합니다:
Q는 일회용 질문지이기 때문입니다.

  • Q는 “현재 위치”에서 다음 토큰을 예측하기 위해 만들어지는 질문
  • Q4는 4번째 토큰을 예측하기 위한 질문
  • Q5는 5번째 토큰을 예측하기 위한 질문

Q4는 토큰 4를 생성하면 다시는 필요하지 않습니다.
계속 보관할 이유가 없죠.

반대로 K와 V는
“과거의 기록”이자 “참조해야 할 정보”이기 때문에
계속 저장됩니다.


4. Q, K, V는 어떻게 만들어질까?

세 벡터는 모두 “토큰의 표현 벡터”에서 만들어집니다.

  • Q = 선형 변환(Weight_Q × token_embedding)
  • K = 선형 변환(Weight_K × token_embedding)
  • V = 선형 변환(Weight_V × token_embedding)

여기서 사용하는 변환은 독립된 선형 레이어(Projection)입니다.
일반적인 MLP처럼 여러 층을 쌓진 않습니다.
세 벡터를 서로 다르게 만드는 이유는 역할이 다르기 때문입니다.


5. 요약: 한 장으로 이해하는 전체 과정

  1. Prefill 단계

    • 입력 토큰 전체를 한 번에 처리
    • 각 토큰의 K, V를 계산해 KV 캐시에 저장
    • 입력 가격은 이 단계에서 발생
  2. Decoding 단계

    • 출력 토큰을 하나씩 생성
    • 새 토큰이 생길 때마다 K, V를 캐시에 추가
    • 매 스텝마다 Q는 새로 생성되고 바로 폐기
    • 출력 가격은 여기서 발생
  3. KV 캐시가 핵심

    • 과거 토큰의 정보를 저장해
    • 매 스텝마다 빠르게 접근
  4. Q는 왜 저장하지 않는가?

    • 질문지 역할
    • 매번 새로 만들어지기 때문에 캐시할 필요 없음

profile
AI developer

1개의 댓글

comment-user-thumbnail
2026년 2월 15일

이해가 아주 잘 됩니다 개추드리겠습니다

답글 달기