LLM 디코딩의 근본적인 병목은 이거예요.
"토큰을 한 번에 하나씩만 생성할 수 있다."
매 스텝마다 전체 모델을 한 번 돌려야 해요. 70B 모델이면 매 토큰마다 140GB 가중치를 전부 읽어야 해요. GPU가 아무리 빨라도 메모리 대역폭이 병목이에요.
Speculative Decoding은 이 문제를 투기(추측) 로 해결해요.
핵심 아이디어
기존 방식:
[큰 모델] → 토큰1 → [큰 모델] → 토큰2 → [큰 모델] → 토큰3
(매번 느린 큰 모델 호출)
Speculative Decoding:
[작은 드래프트 모델] → 토큰1,2,3,4,5 빠르게 예측
[큰 검증 모델] → 5개 토큰을 한 번에 검증
→ 맞으면 5개 한꺼번에 채택
→ 틀린 것부터 버리고 큰 모델이 수정
핵심은 검증이 생성보다 훨씬 빠르다는 점이에요. 큰 모델로 5개 토큰 검증하는 건 5개 생성하는 것보다 훨씬 빠르고, 병렬로 처리할 수 있어요.
왜 품질 손실이 없는가
드래프트가 틀려도 큰 모델이 수정하기 때문에 최종 출력은 큰 모델 단독과 수학적으로 동일해요. 빠르지만 품질은 그대로예요.
드래프트 토큰 수락률:
- 텍스트 생성, 번역: 80~90% (빠름)
- 코드 생성: 70~85%
- 추론 문제: 60~75%
수락률이 높을수록 속도 향상이 커요.
3가지 방식
1. 별도 드래프트 모델 (EAGLE/EAGLE2/EAGLE3)
작은 모델이 드래프트 토큰을 생성하고 큰 모델이 검증해요.
EAGLE 구조:
드래프트 모델 (1~3B) → 토큰 5개 예측
타겟 모델 (70B) → 한 번에 검증
속도: 2~3배 향상
조건: 드래프트 모델 필요 (타겟 모델에 맞는 드래프트 필요)
SGLang에서:
python -m sglang.launch_server \
--model-path meta-llama/Llama-3.1-8B-Instruct \
--speculative-algorithm EAGLE3 \
--speculative-num-draft-tokens 5
2. N-gram / NEXTN (드래프트 모델 없음)
이미 생성된 텍스트에서 패턴을 찾아 다음 토큰을 예측해요. 코드, 반복 패턴 많은 텍스트에서 효과적이에요.
python -m sglang.launch_server \
--model-path meta-llama/Llama-3.1-8B-Instruct \
--speculative-algorithm NEXTN \
--speculative-num-draft-tokens 3
드래프트 모델이 필요 없어서 추가 메모리 없이 바로 쓸 수 있어요.
3. Medusa (멀티 헤드)
타겟 모델에 추가 헤드를 붙여서 여러 토큰을 동시에 예측해요. 파인튜닝이 필요하지만 드래프트 모델 메모리가 없어요.
실측 속도 향상
Llama-3.1-8B 기준:
방식 속도 향상 추가 메모리 조건
| EAGLE3 | 2.4~3x | 드래프트 모델 크기 | EAGLE 드래프트 모델 |
| EAGLE2 | 1.6~2x | 드래프트 모델 크기 | EAGLE 드래프트 모델 |
| NEXTN | 1.2~1.5x | 없음 | 없음 |
언제 쓰면 좋은가
✅ 레이턴시가 중요한 실시간 서비스
✅ 긴 응답을 생성하는 경우
✅ 코드 생성 (반복 패턴 많아서 수락률 높음)
✅ GPU가 메모리 대역폭 병목인 환경
❌ 짧은 응답 (투기적 디코딩 오버헤드가 이득보다 클 수 있음)
❌ 배치 크기가 매우 큰 고처리량 환경 (GPU가 이미 포화 상태)
❌ 드래프트 모델 메모리가 부족한 환경
배치 크기가 크면 GPU가 이미 바빠서 투기적 디코딩 효과가 줄어들어요. 저레이턴시 단일 요청 환경에서 효과가 가장 커요.
마무리
Speculative Decoding을 한 줄로 요약하면 이래요.
"작은 모델이 빠르게 추측하고, 큰 모델이 한 번에 검증한다."
품질 손실 없이 2~3배 빠른 응답을 얻을 수 있어요. SGLang에서는 --speculative-algorithm EAGLE3 한 줄로 바로 활성화돼요. 😄
'LLM' 카테고리의 다른 글
| Anthropic이 가장 강력한 모델을 공개하지 않은 이유 — Mythos Preview 완전 분석 (0) | 2026.04.10 |
|---|---|
| Meta Muse Spark 발표 — Llama 이후 독자 모델 (0) | 2026.04.10 |
| KV Cache 완전 정리 — PagedAttention vs RadixAttention, SGLang이 빠른 이유 (1) | 2026.04.09 |
| LLM 지식 증류(Knowledge Distillation) 완전 정리 — 큰 모델의 지식을 작은 모델에 이식하는 법 (0) | 2026.04.09 |
| LoRA / QLoRA 완전 가이드 — LLM 파인튜닝을 저렴하게 하는 법 (0) | 2026.04.09 |