추측 디코딩
추측 디코딩(Speculative Decoding)은 작고 빠른 '드래프트' 모델이 다음 여러 토큰을 미리 예측하고, 큰 타깃 모델이 한 번의 병렬 forward pass로 그 토큰들을 검증해 — 자신이 생성했을 것과 일치하면 수용하고 아니면 기각하는 — 추론 최적화 기법입니다. 사용자는 일반 디코딩과 완전히 동일한 출력을 얻되 2~4배 빠르게 받습니다.
추측 디코딩(Speculative Decoding)은 작고 빠른 '드래프트' 모델이 다음 여러 토큰을 미리 예측하고, 큰 타깃 모델이 한 번의 병렬 forward pass로 그 토큰들을 검증해 — 자신이 생성했을 것과 일치하면 수용하고 아니면 기각하는 — 추론 최적화 기법입니다. 사용자는 일반 디코딩과 완전히 동일한 출력을 얻되 2~4배 빠르게 받습니다.
왜 중요한가
LLM 생성은 순차 의존성에 묶여 있습니다: 각 토큰이 이전 토큰을 기다려야 합니다. 큰 모델의 병목은 연산이 아니라 메모리 대역폭입니다 — 토큰마다 거대한 가중치를 GPU 연산 유닛으로 옮기는 비용. 추측 디코딩은 여러 추측 토큰을 하나의 forward pass로 묶어 이 순차 사슬을 끊고, 비싼 큰 모델 호출 수를 극적으로 줄입니다. Google이 2022년에 처음 발표했고, 20242025년엔 모든 주요 추론 엔진(vLLM·TensorRT-LLM·llama.cpp·together.ai)이 표준 최적화로 탑재해 동일 출력 품질에서 서빙 비용을 3070% 줄입니다.
작동 원리
1. 드래프트 모델이 제안: 작고 저렴한 모델(예: 70B 타깃의 1B 쌍둥이)이 다음 k 토큰을 자기회귀적으로 생성합니다. 드래프트 가중치가 작아 빠릅니다.
2. 타깃 모델이 검증: 타깃 모델이 k 드래프트 토큰에 대해 한 번의 forward pass를 병렬로 돌려, 각 위치에서 자신이 생성했을 것을 계산합니다.
3. 수용 또는 기각: 첫 드래프트 토큰부터, 타깃의 최상위 선택(또는 확률 매칭 샘플)이 일치하면 수용, 불일치하면 거기서 멈춥니다.
4. 수정 후 재개: 첫 불일치 지점에서 타깃의 토큰이 드래프트를 대체합니다. 그 지점부터 재시작.
5. 순효과: 드래프트가 평균 70% 맞으면 타깃 모델이 forward pass당 약 3배 많은 토큰을 생성해, 지연이 그만큼 줄어듭니다.
왜 손실이 없는가
제대로 구현하면 추측 디코딩은 일반 디코딩과 정확히 같은 출력 분포를 만듭니다. 타깃 모델이 검증자로 작동하므로, 드래프트가 제안한 모든 토큰은 타깃의 수용 테스트를 통과해야 하고, 최종 시퀀스는 타깃이 혼자 생성했을 것과 동일합니다. 품질 트레이드오프가 없습니다 — 속도 이득만 있습니다.
변형
바닐라 추측 디코딩(Google 2022): 드래프트 모델 하나, 타깃 하나. 원조 공식화.
Medusa: 타깃 모델 자체에 여러 '헤드'를 추가해 별도 드래프트 모델 없이 미리 예측합니다. 배포가 단순합니다.
EAGLE: 타깃 모델 자체의 내부 표현을 드래프트로 사용해 외부 드래프트보다 높은 수용률을 달성하는 정확한 변형.
트리 추측 디코딩: 여러 후보 토큰 트리를 병렬로 드래프트. 높은 수용 확률, 더 많은 검증 연산.
Self-Speculative: 같은 가중치에서 타깃 모델의 층을 스킵해 저렴한 '드래프트'를 만듭니다.
가장 잘 드는 경우
1인 추론(배치 1): 단일 사용자 인터랙티브 챗은 메모리 바운드. 여기서 빛납니다.
긴 출력: 토큰 수가 많을수록 누적 절약이 커집니다.
반복 구조: 출력이 예측 가능한 패턴(코드·JSON)이면 드래프트 수용률이 매우 높습니다.
콜드한 하드웨어 활용: 메모리를 기다리며 놀고 있던 GPU가 추측으로 연산 공백을 메웁니다.
덜 드는 경우
대규모 배치 서빙: 고처리량 워크로드는 이미 연산 바운드라 메모리 바운드가 아닙니다. 추측이 오버헤드만 더하고 이득이 작습니다.
매우 창의적·무작위 출력: 낮은 드래프트 수용률로 스피드업이 제한됩니다.
작은 모델: 3B 타깃 아래 1B 드래프트는 타깃 자체가 이미 싸서 절약이 적습니다.
짧은 프롬프트·짧은 답변: 추측 셋업 오버헤드가 이득을 삼킵니다.
트레이드오프
메모리 내 추가 모델: 이제 타깃과 드래프트를 함께 서빙. 메모리 풋프린트가 증가(self-speculative 제외).
구현 복잡도: 검증 루프·기각 샘플링·KV 캐시 롤백 관리가 까다롭습니다. 라이브러리를 쓰세요.
수용률 민감성: 잘못 매칭된 드래프트는 기각이 지배하면 오히려 느려질 수 있습니다.
콜드 스타트: 드래프트가 워밍업하는 처음 몇 토큰은 추측 이득이 적습니다.
흔한 실수
다른 계열의 드래프트 모델 사용: Mistral 타깃에 Llama 드래프트는 거의 수용되지 않습니다. 드래프트는 타깃과 정렬돼야 합니다.
너무 큰 드래프트: 70B 타깃 아래 7B 드래프트는 수용률은 좋지만 운영 비용이 너무 높습니다. 드래프트는 타깃의 5~20% 크기가 적절.
KV 캐시 롤백 무시: 기각된 토큰은 타깃의 KV 캐시를 롤백해야 합니다. 빠뜨리면 상태가 오염됩니다.
이미 빠른 모델에 적용: Haiku·Flash급 모델은 메모리 가벼움. 추측 절약이 적습니다.
엔드투엔드 미측정: 전체 요청 경로를 벤치마크. 단순 tokens/sec 이득이 부하나 네트워크 지연에 묻히는 경우가 있습니다.
Sources:
- Fast Inference from Transformers via Speculative Decoding - Google Research
- Medusa Paper - Together.AI
- Speculative Decoding in vLLM - vLLM Docs
관련 인블로그 게시물
inblog에서 활용하기
inblog의 AI 초안 생성은 뒷단에서 추측 디코딩이 적용된 추론 엔진(vLLM·TensorRT-LLM 등)을 사용해 같은 품질의 초안을 더 낮은 지연과 비용으로 제공합니다. 사용자는 눈치채지 못하지만, 긴 블로그 포스트 초안이 절반의 시간에 생성되며 절약된 비용이 더 많은 생성 요청으로 돌아갑니다.