Prefill과 Decoding

김동준·2025년 10월 20일

Prefill과 Decoding은 언어 모델이 텍스트를 생성하는 과정의 두 단계입니다.

Prefill (Prompt Processing)

입력 프롬프트를 한 번에 처리하는 단계입니다.

특징:

  • 병렬 처리 가능: 입력 토큰들을 동시에 처리할 수 있습니다
  • 컴퓨트 집약적(Compute-bound): GPU의 연산 능력을 최대한 활용
  • KV 캐시 생성: 입력 토큰들의 Key-Value 쌍을 계산하고 캐시에 저장
  • 빠른 처리: 병렬화 덕분에 상대적으로 빠릅니다

예시:

입력: "AI의 미래에 대해 설명해줘"
→ 모든 토큰을 한 번에 처리하여 KV 캐시 구축

Decoding/Generation

응답을 한 토큰씩 순차적으로 생성하는 단계입니다.

특징:

  • 순차 처리: Autoregressive 방식으로 한 번에 하나씩 생성
  • 메모리 집약적(Memory-bound): KV 캐시를 읽고 쓰는 작업이 병목
  • 반복적: 각 토큰마다 모델 전체를 실행
  • 느린 처리: 순차적이라 병렬화가 제한적

예시:

생성: "AI" → "의" → "미래" → "는" → ...
각 토큰을 생성할 때마다 이전 토큰들을 참조

비교표

구분PrefillDecoding
처리 방식병렬 (parallel)순차 (sequential)
병목Compute-boundMemory-bound
속도빠름상대적으로 느림
배치 효율높음낮음
GPU 활용높은 활용률낮은 활용률

최적화 전략

Prefill 최적화:

  • 큰 배치 크기 사용
  • GPU 코어 최대 활용

Decoding 최적화:

  • KV 캐시 압축 (quantization)
  • Speculative decoding (추측 디코딩)
  • Continuous batching (연속 배칭)

실제 체감

사용자 관점에서:

  • Prefill: 긴 문서를 업로드하면 처음 응답이 시작되기까지의 대기 시간
  • Decoding: 텍스트가 한 글자씩 나타나는 속도

서비스 설계 시 두 단계의 특성을 고려하여 최적화하는 것이 중요합니다!

profile
Story Engineer

0개의 댓글