Draft-Verify 패러다임으로 자기회귀 디코딩을 가속하는 Speculative Decoding의 원리, 수학적 보장, 그리고 Medusa, Eagle 등 변형 기법을 분석합니다.
1장에서 자기회귀 생성의 순차적 특성이 LLM 추론의 근본적인 병목이라고 설명했습니다. 500토큰을 생성하려면 모델을 500번 실행해야 하며, 각 실행은 이전 실행의 결과에 의존합니다.
4장의 Continuous Batching은 여러 요청을 묶어 GPU 활용률을 높이지만, 단일 요청의 지연시간 자체를 줄이지는 못합니다. 과연 자기회귀의 순차적 의존성을 깨뜨릴 수 있을까요?
Speculative Decoding은 이 의존성을 "우회"합니다. 정확히 말하면, 의존성 자체를 제거하는 것이 아니라, **추측(Speculation)**과 **검증(Verification)**을 분리해 여러 토큰을 한 번에 처리하는 전략입니다.
Speculative Decoding의 핵심 아이디어는 단순합니다.
타겟 모델은 K개의 토큰을 한 번의 Forward Pass로 검증할 수 있습니다. Prefill과 마찬가지로, 이미 주어진 토큰 시퀀스에 대한 확률을 병렬로 계산하는 것은 자기회귀 제약에 해당하지 않기 때문입니다.
1. Draft 모델이 5개 토큰을 빠르게 생성:
["오늘", "날씨", "가", "좋", "습니다"]
2. Target 모델이 5개 토큰을 한 번에 검증:
위치 1: "오늘" → 수락 (Target도 "오늘" 생성)
위치 2: "날씨" → 수락
위치 3: "가" → 수락
위치 4: "좋" → 거부 (Target은 "화창"을 선호)
위치 5: 검증 불필요 (위치 4에서 거부됨)
3. 결과: 3개 토큰 수락 + 1개 토큰 재샘플링 = 4개 토큰 확정
(Target 모델 1회 실행으로 4개 토큰 생성)Speculative Decoding의 가장 놀라운 특성은, 최종 출력의 확률 분포가 타겟 모델만 사용했을 때와 수학적으로 동일하다는 점입니다. 이것은 근사(Approximation)가 아닌 정확한(Exact) 보장입니다.
이 보장은 수정된 거부 샘플링(Modified Rejection Sampling) 알고리즘에 의해 이루어집니다.
각 위치에서 드래프트 모델의 확률 q(x)와 타겟 모델의 확률 p(x)를 비교합니다.
p(x) >= q(x)이면: 항상 수락합니다. 타겟 모델이 해당 토큰을 더 선호하므로 문제없습니다.p(x) < q(x)이면: p(x)/q(x)의 확률로 수락합니다. 거부될 경우, 수정된 분포 p'(x) = norm(max(0, p(x) - q(x)))에서 새 토큰을 샘플링합니다.이 알고리즘은 드래프트 토큰이 거부되었을 때도, 재샘플링된 토큰이 타겟 모델의 원래 분포를 따르도록 보장합니다. 따라서 최종 결과는 타겟 모델만 사용했을 때와 통계적으로 구분할 수 없습니다.
**Acceptance Rate(수락률)**은 드래프트 모델이 추측한 토큰이 수락되는 비율입니다. 이 값이 속도 향상의 핵심 결정 요인입니다.
K개의 토큰을 추측했을 때, 평균적으로 수락되는 토큰 수는 다음과 같습니다.
여기서 alpha는 Acceptance Rate입니다.
| Acceptance Rate | K=4일 때 평균 수락 | K=8일 때 평균 수락 | 속도 향상 (이론) |
|---|---|---|---|
| 0.5 | 1.94 | 1.99 | ~2x |
| 0.7 | 3.08 | 3.32 | ~3x |
| 0.8 | 3.69 | 4.33 | ~3.5x |
| 0.9 | 4.10 | 5.70 | ~4x |
Acceptance Rate를 높이려면 드래프트 모델이 타겟 모델의 출력 분포를 잘 근사해야 합니다. 동시에 드래프트 모델 자체의 실행 속도가 충분히 빨라야 합니다.
너무 작은 드래프트: 빠르지만 Acceptance Rate 낮음 → 잦은 거부
너무 큰 드래프트: Acceptance Rate 높지만 드래프트 자체가 느림 → 이점 감소
최적점: 타겟 모델 대비 10-20배 빠르면서 70%+ Acceptance Rate일반적으로 타겟 모델의 10-20% 크기 모델이 좋은 드래프트 모델이 됩니다. 예를 들어 Llama 70B가 타겟이라면, Llama 7B나 8B가 드래프트 모델로 적합합니다.
Speculative Decoding의 효과는 배치 크기에 크게 의존합니다.
단일 또는 소수의 요청을 처리할 때, Decode 단계는 극도로 메모리 바운드입니다. GPU의 연산 자원이 대부분 유휴 상태이므로, 드래프트 모델 실행과 검증의 추가 연산이 "공짜"에 가깝습니다.
이 구간에서 2-3배의 속도 향상을 기대할 수 있습니다.
배치 크기가 커지면 GPU 활용률이 높아지면서, Speculative Decoding의 추가 연산이 "공짜"가 아니게 됩니다. 드래프트 모델 실행과 검증에 소비되는 GPU 시간이 실질적인 비용이 됩니다.
이 구간에서는 1.3-1.6배의 속도 향상으로 효과가 줄어듭니다.
큰 배치에서는 GPU가 이미 충분히 활용되고 있어, Speculative Decoding의 추가 연산이 오히려 전체 처리량을 낮출 수 있습니다. 드래프트 토큰이 거부될 때의 낭비가 큰 배치에서는 더 큰 비용이 됩니다.
Speculative Decoding은 지연시간(Latency) 최적화 기법입니다. 처리량(Throughput) 최적화에는 Continuous Batching이 더 효과적입니다. 높은 처리량이 필요한 배치 처리 워크로드에서는 Speculative Decoding의 이점이 미미합니다.
배치 크기 | 속도 향상 | 주요 이유
1 | 2-3x | GPU 유휴 자원으로 추측/검증 "무료"
4 | 1.8-2.5x | 여전히 메모리 바운드
8 | 1.3-1.6x | 컴퓨트 바운드로 전환 시작
16 | 1.1-1.3x | 추가 연산 비용이 커짐
32+ | ~1.0x | 이점 거의 없음, 오히려 역효과 가능별도의 드래프트 모델 없이, 타겟 모델 자체의 일부 레이어만 사용해 드래프트를 생성하는 방식입니다. 일부 레이어를 건너뛰거나(Layer Skipping), 초기 레이어의 출력으로 직접 예측하는 Early Exit 방식이 있습니다.
장점은 별도의 드래프트 모델을 로드할 필요가 없어 메모리를 절약하고, 타겟 모델과의 분포 일치도가 높다는 것입니다.
Medusa는 타겟 모델의 마지막 Hidden State에 여러 개의 경량 **예측 헤드(Prediction Head)**를 추가합니다. 각 헤드는 서로 다른 미래 위치의 토큰을 동시에 예측합니다.
Hidden State → Head 1: 다음 토큰 예측
→ Head 2: 2번째 이후 토큰 예측
→ Head 3: 3번째 이후 토큰 예측
→ Head 4: 4번째 이후 토큰 예측
Tree Attention으로 여러 후보 조합을 동시 검증Medusa의 핵심 특징은 Tree Attention을 사용한다는 점입니다. 각 헤드의 Top-k 후보들로 트리를 구성하고, 트리의 모든 경로를 한 번의 Forward Pass로 동시에 검증합니다.
**Eagle(Extrapolation Algorithm for Greater Language-model Efficiency)**은 타겟 모델의 Feature 레벨에서 외삽(Extrapolation)을 수행합니다. Medusa가 각 위치를 독립적으로 예측하는 반면, Eagle은 이전 위치의 Feature를 활용해 더 정확한 순차적 예측을 합니다.
Eagle-2는 동적으로 드래프트 길이를 조절하는 기능을 추가해, 컨텍스트에 따라 최적의 추측 길이를 자동으로 결정합니다.
**OSD(Online Speculative Decoding)**는 드래프트 모델을 온라인으로 미세 조정하는 방식입니다. 서빙 중에 타겟 모델이 생성한 토큰을 학습 데이터로 사용해 드래프트 모델을 지속적으로 업데이트합니다.
이 접근법은 도메인 특화 워크로드에서 특히 효과적입니다. 특정 도메인의 텍스트를 지속적으로 서빙하면, 드래프트 모델이 해당 도메인의 패턴을 학습해 Acceptance Rate가 점점 향상됩니다.
Speculative Decoding은 이제 실험 단계를 넘어 프로덕션 표준 기능이 되었습니다.
| 추론 엔진 | 지원 방식 |
|---|---|
| vLLM | Draft 모델, Medusa, Eagle 지원 |
| SGLang | Draft 모델, Eagle, RadixAttention 연동 |
| TensorRT-LLM | Draft 모델, Medusa 지원, FP8 검증 최적화 |
프로덕션에서 Speculative Decoding을 적용할 때의 주요 고려사항은 다음과 같습니다.
Speculative Decoding은 대화형 AI 서비스에서 TPOT를 줄이는 데 가장 효과적입니다. 특히 단일 사용자와의 1:1 대화에서 배치 크기가 작을 때, 체감 속도를 2-3배 높일 수 있습니다.
이 장에서는 Speculative Decoding의 원리와 다양한 변형을 살펴보았습니다.
다음 장에서는 반복되는 프롬프트의 연산을 제거하는 Prefix Caching을 다룹니다. 시스템 프롬프트, 멀티턴 대화, 평가 워크플로우에서 어떻게 60% 이상의 시간을 절감하는지 알아보겠습니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
시스템 프롬프트 캐싱, Prefix-aware 스케줄링, RadixAttention의 원리를 분석하고, 멀티턴 대화와 평가 워크플로우에서의 성능 개선을 다룹니다.
정적 배칭의 한계를 분석하고, Continuous Batching의 iteration-level 스케줄링 원리와 vLLM, TGI, TensorRT-LLM의 구현 차이를 비교합니다.
양자화의 기초 개념부터 FP8의 부상, W8A8/W4A16 전략, GPTQ/AWQ/SmoothQuant 기법, KV 캐시 양자화까지 정확도와 성능의 트레이드오프를 분석합니다.