본문으로 건너뛰기

추론 최적화 (기술 심화)

:::note 전제 어텐션 문서에서 본 O(n²) 비용과 KV 캐시를 더 깊이 다룹니다. "모델을 빠르고 싸게 돌리는" 서빙 단계의 기술입니다. :::

1. 추론의 두 단계​

Prefill : 입력 프롬프트 전체를 한 번에 처리(병렬) → 첫 토큰까지 시간(TTFT) 결정
Decode : 토큰을 1개씩 순차 생성 → 토큰당 시간(TPOT), 여기가 대부분의 시간

지표: TTFT(첫 토큰 지연), TPOT/throughput(토큰 생성 속도).

2. KV 캐시 — 가장 중요한 최적화​

생성은 토큰을 하나씩 늘려가며 어텐션을 반복합니다. 이미 만든 토큰의 Key·Value는 변하지 않으므로 저장해두고 재사용합니다.

캐시 없음 : 새 토큰마다 지금까지 모든 토큰의 K·V 재계산 → O(n²) 중복
KV 캐시 : 과거 K·V를 메모리에 저장, 새 토큰의 K·V만 계산 → 스텝당 O(n)
  • 대가: 메모리 사용. 컨텍스트가 길수록 KV 캐시가 커짐(긴 컨텍스트의 메모리 병목)
  • 관리 기법: PagedAttention(vLLM) — KV 캐시를 페이지 단위로 관리해 낭비 감소

3. 양자화(Quantization) — 정밀도 낮추기​

가중치를 낮은 비트로 표현해 메모리·대역폭을 줄입니다.

FP16/BF16(16비트) → INT8(8비트) → INT4/NF4(4비트)
방식특징
PTQ (학습 후 양자화)추가 학습 없이 변환(GPTQ, AWQ 등)
QAT (양자화 인지 학습)학습 중 반영, 정확도 손실 최소
  • 효과: 모델 크기·메모리 대폭 ↓ → 더 작은 GPU·엣지에서 구동
  • 대가: 약간의 정확도 손실(4비트에서도 실용 수준인 경우 많음)

4. 어텐션·구조 최적화​

기법핵심
FlashAttention어텐션을 블록 단위로 계산해 메모리 I/O↓, 속도↑ (결과는 동일)
GQA / MQA여러 Query head가 K·V head를 공유 → KV 캐시 축소
MoE (전문가 혼합)토큰마다 일부 전문가만 활성화 → 파라미터는 크지만 연산은 적게
Speculative Decoding작은 모델이 여러 토큰을 "초안"으로 빠르게 뽑고 큰 모델이 검증 → 속도↑

5. 처리량 — 배칭​

Static batching : 요청을 모아 한 번에(대기 발생)
Continuous batching: 끝난 요청 자리에 새 요청을 즉시 채움 → GPU 활용률·처리량 ↑

vLLM·TGI 같은 서빙 엔진이 continuous batching + PagedAttention으로 처리량을 크게 올립니다.

6. 트레이드오프 정리​

빠름·쌈 ◀───────────────▶ 정확·고품질
양자화↑, 캐시공유↑, 작은모델 정밀도↑, 큰모델

실무는 지연(TTFT/TPOT)·처리량·비용·품질 사이에서 균형점을 찾는 일입니다.

7. 요약​

기법노리는 것
KV 캐시중복 계산 제거(필수)
PagedAttentionKV 메모리 효율
양자화메모리·크기 ↓
FlashAttention어텐션 속도·메모리
GQA/MQAKV 캐시 축소
Speculative생성 속도
Continuous batching처리량