Speculative Decoding
Speculative Decoding은 빠른 proposer가 여러 미래 토큰을 먼저 제안하고, target model이 그 후보를 병렬로 검증해 한 번의 verification step에서 여러 토큰을 확정할 수 있게 하는 추론 가속 방법입니다. 초기에는 작은 draft model을 사용하는 방식이 대표적이었지만, 오늘날에는 EAGLE, MTP, n-gram, suffix decoding처럼 후보 토큰을 만드는 방법이 여러 갈래로 확장됐습니다.
핵심은 작은 모델의 출력을 그대로 복사하는 것이 아닙니다. 고전적인 speculative sampling은 rejection과 resampling 절차를 통해 최종 token이 target model 단독 sampling과 같은 분포를 따르도록 설계됐습니다. 현재 vLLM 계열의 speculative decoding도 이러한 lossless decoding을 전제로 하며, proposer가 틀린 후보를 내더라도 verification 과정에서 이를 걸러냅니다.
하지만 speculative decoding을 켠다고 항상 빨라지는 것은 아닙니다. 실제 이득은 proposer를 실행하는 비용, 한 번에 제안하는 token 수, acceptance rate, target model의 verification 비용, batch와 QPS, hardware와 sampling 설정에 따라 달라집니다. 특히 memory-bound decode와 낮거나 중간 수준의 QPS에서는 latency 감소가 크게 나타날 수 있지만, workload와 proposer 방식에 따라 높은 부하에서도 이득을 얻거나 반대로 추가 비용 때문에 효과가 작아질 수 있습니다.
이 글에서는 speculative sampling의 수용과 기각 과정이 target distribution을 어떻게 보존하는지부터 살펴보고, draft model, EAGLE, MTP, n-gram, suffix decoding이 후보를 만드는 방식의 차이를 봅니다. 이어서 acceptance rate와 speculation length가 실제 latency와 throughput에 어떤 영향을 주는지 연결하고, 마지막에는 실제 serving 환경에서 speculative decoding의 효과를 측정하는 기준까지 정리합니다.
1장. autoregressive decode의 직렬 병목
자기회귀 생성의 구조적 한계. LLM은 토큰을 하나씩 만듭니다. 토큰 1을 만들어야 토큰 2의 입력이 완성되고, 토큰 2를 만들어야 토큰 3의 입력이 완성됩니다. K개 토큰을 만들려면 모델을 K번 순차 실행해야 합니다.
병렬화할 수 없다는 것이 문제입니다. GPU가 아무리 많은 코어를 갖고 있어도 순서를 건너뛸 수 없습니다.
메모리 대역폭에 묶인 decode. 여기가 Speculative Decoding이 성립하는 물리적 근거입니다.
decode 단계에서 한 토큰을 만들 때 모델 가중치 전체를 HBM에서 읽어 오는데, 그것으로 하는 계산은 토큰 1개분뿐입니다. 70B 모델이면 수십 GB를 읽고 행렬과 벡터 곱 몇 번을 합니다. 읽는 데 걸리는 시간이 계산하는 시간보다 훨씬 깁니다.
작은 batch의 decode는 산술 강도가 낮아 memory-bandwidth-bound가 되기 쉽고, 이때 target weight를 한 번 읽을 때 여러 candidate position을 검증하는 것이 유리할 수 있습니다. batch가 커지거나 kernel/hardware 조건이 달라지면 이 전제는 약해집니다.
memory-bound 구간에서는 여러 candidate를 함께 검증해 weight reuse와 병렬성을 높일 여지가 있습니다. 다만 candidate 수를 늘리면 attention·activation 계산과 verification 비용도 늘어나므로 추가 비용이 거의 0이라고 일반화할 수는 없습니다.
문제는 그 5개가 뭔지 모른다는 것입니다. 토큰 2를 알아야 토큰 3을 계산할 수 있기 때문입니다. Speculative Decoding은 이 지점을 공략합니다. 모르면 추측하고 틀렸으면 버립니다.
CPU 분기 예측과 같은 발상. CPU의 투기적 실행은 분기 결과를 모르지만 한쪽을 미리 실행해 두고, 맞았으면 이득이고 틀렸으면 되돌립니다. 놀고 있는 파이프라인을 쓰는 것입니다.
Speculative Decoding도 다음 토큰들을 모르지만 draft 모델로 추측하고, 맞았으면 이득이고 틀렸으면 버립니다. 놀고 있는 연산 유닛을 쓰는 것이고, 이름이 여기서 나왔습니다.
2장. propose와 verify가 한 round를 만드는 방식
모델이 둘 필요합니다.
draft 모델 (초안)
작고 빠르다. 예: 1B
같은 토크나이저를 써야 한다
target 모델 (검증)
크고 정확하다. 예: 70B
최종 출력의 품질을 책임진다한 라운드는 이렇게 돕니다.
① draft 가 감마(γ) 개 토큰을 자기회귀로 생성한다
γ = 5 라면 draft 를 5 번 순차 실행
│
▼
② target 이 그 γ 개를 한 번의 forward 로 채점한다
γ 개 위치의 확률분포를 동시에 얻는다
여기가 핵심이다. target 호출이 1 회다
│
▼
③ 앞에서부터 순서대로 수용 여부를 판정한다
수용되면 확정
기각되면 그 자리에서 멈추고 그 토큰을 교체한다
│
▼
④ 다음 라운드로한 라운드에서 얻는 토큰 수. γ개 중 k개가 수용되면 수용된 k개가 확정되고, k+1번째는 기각되었으므로 교체 토큰 1개가 나와 총 k+1개를 얻습니다.
γ개 proposal이 모두 수용되면 verification에서 이미 계산한 다음 위치의 target distribution을 이용해 보너스 토큰 하나를 추가로 샘플링할 수 있습니다. 별도 target forward를 하나 더 하지 않는다는 의미에서 추가 verification round를 아끼는 것입니다.
원 알고리즘의 한 verification round는 최소 한 개의 target-distributed token을 전진시킵니다. 하지만 wall-clock 성능은 proposer 비용 때문에 target-only보다 느려질 수 있으므로 항상 성능상 손해가 없다는 뜻은 아닙니다.
예시로 따라가 보겠습니다.
프롬프트 "대한민국의 수도는"
draft 가 γ=5 로 생성
서울 이 다 . 인구 는
target 이 한 번에 채점하고 판정
위치 1 "서울" 수용
위치 2 "이" 수용
위치 3 "다" 수용
위치 4 "." 기각 ──► target 분포에서 "이" 로 교체
위치 5 "인구" 버림 (뒤는 전부 폐기)
이 라운드의 확정 출력
서울 이 다 이 4 개draft를 5번, target을 1번 돌려 4토큰을 얻었습니다. 원래대로면 target을 4번 돌려야 했습니다.
기각 이후를 전부 버리는 이유는 위치 5의 draft 예측이 위치 4가 마침표라는 것을 전제로 만들어졌기 때문입니다. 그 전제가 무너졌으니 뒤는 의미가 없습니다.
3장. target distribution을 보존하는 acceptance rule
문제 설정. draft 모델이 이 자리에서 토큰 x를 낼 확률을 q(x), target 모델의 확률을 p(x)라 하면, draft가 뽑은 토큰을 그대로 쓸 때 결과가 q 분포를 따르게 됩니다. 우리가 원하는 것은 p 분포입니다.
판정에는 수정된 기각 샘플링을 씁니다.
draft 가 토큰 x 를 제안했을 때
① 0 과 1 사이 난수 r 을 뽑는다
② r < min(1, p(x)/q(x)) 이면 수용
③ 아니면 기각하고 잔차 분포에서 새로 샘플링한다
잔차 분포 = normalize( max(0, p - q) )직관으로 읽으면 이렇습니다. p가 q 이상이면 acceptance probability가 1이 되어 수용하고, p가 q보다 작으면 draft가 과하게 좋아하는 토큰이라 비율만큼만 수용합니다. 기각했을 때는 target이 draft보다 더 좋아하는 부분에서 다시 뽑습니다.
정확히 p가 나오는 이유. 토큰 x가 최종 출력이 되는 경로는 둘입니다.
경로 A draft 가 x 를 제안했고 수용됐다
P(A) = q(x) x min(1, p(x)/q(x)) = min(q(x), p(x))
경로 B 기각이 일어났고 잔차 분포에서 x 가 뽑혔다
전체 기각 확률 = 1 - Σ min(q, p)
잔차 분포의 정규화 상수도 Σ max(0, p-q) = 1 - Σ min(q, p)
두 값이 같으므로 서로 상쇄된다
P(B) = max(0, p(x) - q(x))합치면 p가 q 이상인 경우 q에 p 빼기 q를 더해 p가 되고, p가 q보다 작은 경우 p에 0을 더해 p가 됩니다. 어느 쪽이든 정확히 p(x)입니다.
draft 모델이 아무리 나빠도 출력 분포는 target과 같고, draft 품질은 속도에만 영향을 줍니다.
하드웨어 수치 범위 안에서. 논문의 표현이 정확합니다. 하드웨어 수치 범위 안에서 분포를 보존한다고 합니다. 부동소수점 연산 순서와 커널 구현이 달라지므로 비트 단위로 완전히 같지는 않습니다. greedy 디코딩에서는 대체로 동일한 문자열이 나오지만 경계 케이스에서 갈릴 수 있습니다.
그래서 출력이 같다는 것을 회귀 테스트로 검증할 때 완전 일치가 아니라 허용 범위를 두는 편이 안전합니다.
greedy 디코딩일 때. temperature가 0이면 판정이 단순해집니다. target의 argmax와 draft의 제안이 같으면 수용하고 다르면 기각한 뒤 target의 argmax를 씁니다. 난수도 잔차 분포도 필요 없습니다.
4장. acceptance만으로 속도를 설명할 수 없는 이유
draft가 제안한 토큰이 수용되는 비율이고, draft와 target의 분포가 비슷할수록 높습니다.
한 라운드 기대 토큰 수. 논문이 유도한 식입니다.
E[한 라운드 토큰 수] = (1 - α^(γ+1)) / (1 - α)
α 수용률
γ draft 가 미리 쓰는 토큰 수계산해 보면 이렇습니다.
| 수용률 α | γ=2 | γ=4 | γ=7 | γ=10 |
|---|---|---|---|---|
| 0.5 | 1.75 | 1.94 | 1.99 | 2.00 |
| 0.6 | 1.96 | 2.31 | 2.46 | 2.49 |
| 0.7 | 2.19 | 2.77 | 3.14 | 3.27 |
| 0.8 | 2.44 | 3.36 | 4.16 | 4.57 |
| 0.9 | 2.71 | 4.10 | 5.70 | 6.86 |
표에서 읽히는 것. 수용률이 낮으면 γ를 늘려도 소용없습니다. 0.5에서 γ를 2에서 10으로 다섯 배 늘려도 1.75에서 2.00으로 거의 안 움직입니다. 기각이 앞쪽에서 일어나므로 뒤쪽은 어차피 버려집니다.
수용률이 높으면 γ를 늘리는 것이 크게 이득입니다. 0.9에서는 γ 10까지 계속 오릅니다.
수용률이 곱해지며 감쇠합니다. k개 연속 수용될 확률이 α의 k제곱이라, 0.8이라도 5개 연속은 0.33입니다. 그래서 이론 상한이 1 나누기 1 빼기 α이고, 0.8이면 아무리 γ를 키워도 5배를 못 넘습니다.
draft 비용을 반영하면. draft 실행에도 비용이 듭니다. draft 한 번 비용을 target 한 번 비용으로 나눈 값을 c라 하면 개선 배수는 기대 토큰 수를 γ 곱하기 c 더하기 1로 나눈 값입니다.
draft가 target의 5퍼센트 비용이라고 두고 계산하면 이렇습니다.
| 수용률 α | γ=2 | γ=4 | γ=7 | γ=10 |
|---|---|---|---|---|
| 0.6 | 1.78 | 1.92 | 1.82 | 1.66 |
| 0.7 | 1.99 | 2.31 | 2.33 | 2.18 |
| 0.8 | 2.22 | 2.80 | 3.08 | 3.05 |
| 0.9 | 2.46 | 3.41 | 4.22 | 4.57 |
여기서 최적 γ가 드러납니다. 0.6에서는 γ 4 근처가 정점이고 그 뒤로는 오히려 나빠집니다. 0.7에서는 7 근처, 0.9에서는 10 이상도 계속 오릅니다. 즉 γ를 고정값으로 박아두면 안 되고 수용률에 맞춰 정해야 합니다. 구현체들이 γ를 동적으로 조절하는 이유입니다.
수용률을 결정하는 것들입니다.
draft 와 target 의 유사성
같은 계열, 같은 학습 데이터일수록 높다
과제의 예측 가능성
코드, 정형 문서, 반복 패턴 ──► 높다
창작, 자유 대화 ──► 낮다
temperature
낮을수록 분포가 뾰족해져 draft 가 맞히기 쉽다
컨텍스트의 위치
틀에 박힌 도입부는 잘 맞고 핵심 주장은 잘 안 맞는다acceptance는 model pair, prompt distribution, temperature와 decoding 설정에 크게 의존하므로 자기 workload에서 재야 합니다. 0.5 미만이면 무조건 실패 같은 고정 임계값보다 acceptance length와 proposer/verification latency를 함께 보고 end-to-end 이득을 판단해야 합니다.
5장. draft model에서 EAGLE·MTP·n-gram까지
별도 소형 모델. 가장 기본이고 원논문의 방식입니다. 같은 계열의 작은 모델을 씁니다. 구현이 단순하고 학습이 필요 없지만, 모델 두 개를 메모리에 올려야 하고 같은 토크나이저를 쓰는 소형 모델이 없으면 못 씁니다.
Medusa, 추가 디코딩 헤드. 별도 draft 모델을 구하고 유지하는 부담을 없애려는 접근입니다. target 모델의 마지막 은닉 상태에 추가 디코딩 헤드를 여러 개 붙여, 헤드 1이 다음 토큰을 헤드 2가 그다음 토큰을 병렬로 예측합니다.
트리 어텐션을 씁니다. 헤드마다 상위 후보를 몇 개씩 내면 조합이 트리가 되는데, 그 트리를 어텐션 마스크로 한 번에 검증해 여러 후보 경로를 동시에 시험합니다.
학습 단계가 둘입니다. Medusa-1은 백본을 얼린 채 헤드만 학습해 손실이 없고, Medusa-2는 백본까지 함께 학습해 더 높은 수용률을 냅니다.
모델 하나만 올리면 되는 것이 장점이고, 헤드 학습이 필요하며 헤드끼리 독립 예측이라 일관성이 떨어질 수 있는 것이 단점입니다.
EAGLE 계열, 특징 수준 자기회귀. Medusa의 약점을 겨냥합니다. 토큰 수준이 아니라 특징 수준에서 자기회귀하고 target 모델의 상위층 특징을 재사용합니다. 다음 토큰의 임베딩을 예측하고 그것을 다시 입력으로 넣어 이어가므로, 헤드끼리 독립이 아니라 사슬로 이어져 일관성이 높습니다.
EAGLE-2는 정적 draft 트리를 컨텍스트 인지 동적 트리로 바꿨습니다. draft 모델의 신뢰도가 수용률을 잘 근사한다는 관찰을 이용해 유망한 가지에 예산을 더 줍니다. 저자 보고로 3.05배에서 4.26배이고 EAGLE-1 대비 20에서 40퍼센트 빠릅니다.
EAGLE-3는 특징 예측을 버리고 직접 토큰 예측으로 돌아갔습니다. 상위층 하나가 아니라 다층 특징 융합을 씁니다. 이유가 흥미로운데, 학습 데이터를 늘려도 성능이 잘 안 올랐고 그 병목이 특징 예측 제약이었다는 것입니다.
self-speculative, 자기 층 재사용. 별도 모델도 추가 헤드도 없이 target 모델의 일부 층만 건너뛰어 실행해 draft를 만들고 전체 층으로 검증합니다. 같은 가중치를 쓰므로 추가 메모리가 없고 학습도 없습니다. 대신 층을 건너뛰면 품질이 떨어져 수용률이 낮을 수 있고 어느 층을 건너뛸지 탐색이 필요합니다.
prompt lookup, 모델 없이. 가장 단순하고 가장 저평가된 방법입니다. 모델을 전혀 쓰지 않고, 지금까지의 컨텍스트에서 현재 접미사와 같은 문자열을 찾아 그 다음에 나왔던 토큰들을 draft로 씁니다. n-gram 매칭이 전부입니다.
요약, 편집, RAG처럼 입력 텍스트가 출력에 많이 재등장할 때 강력합니다. 문서를 요약해 달라는 요청에서는 출력의 상당 부분이 입력의 구절이라 그런 구간에서 수용률이 매우 높습니다. 반대로 출력이 입력과 겹치지 않는 창작 과제에서는 무력합니다.
n-gram/prompt lookup은 별도 neural draft model이 없어 proposer overhead가 작다는 장점이 있습니다. 그래도 matching, candidate construction, verification 비용은 존재하며 입력 반복도가 낮으면 이득이 제한적입니다.
방식을 나란히 놓으면 이렇습니다.
| 방식 | 추가 메모리 | 학습 필요 | 수용률 | 적용 난이도 |
|---|---|---|---|---|
| 별도 소형 모델 | 있음 (모델 하나) | 없음 | 중간 | 낮음 |
| Medusa | 작음 (헤드) | 있음 | 중간에서 높음 | 중간 |
| EAGLE 계열 | 작음 | 있음 | 높음 | 중간 |
| self-speculative | 없음 | 없음 | 낮음에서 중간 | 중간 |
| prompt lookup | 없음 | 없음 | 과제 의존, 편차 큼 | 매우 낮음 |
6장. high QPS와 low acceptance에서 이득이 줄어든다
배치가 커지면. 가장 중요한 제약입니다. Speculative Decoding의 전제는 연산 유닛이 놀고 있다는 것이었습니다. 배치 크기가 커지면 같은 가중치 로드로 여러 요청을 동시에 처리하게 되어 산술 강도가 올라가고 이미 연산에 묶이기 시작합니다. 놀고 있는 자원이 없어집니다.
그러면 검증 forward에도 대가가 붙습니다. γ개 위치를 채점하는 것이 실제 비용이 되고 기각된 토큰의 계산이 순수 낭비가 되어, 배치가 충분히 크면 오히려 느려질 수도 있습니다.
그래서 부하가 낮을 때만 켜고 높으면 끄는 동적 전환, 지연시간이 중요한 단건 요청에 켜고 처리량이 중요한 배치 작업에는 끄는 운영 패턴이 나옵니다.
처리량과 지연시간의 구분. Speculative Decoding이 개선하는 것은 단일 요청의 지연시간입니다. 시스템 전체 처리량은 반드시 개선되지 않습니다. 단건 응답이 빨라진다고 초당 처리 토큰 수가 반드시 늘지는 않습니다. 2배 빠르다는 말을 어느 지표로 하는지 확인해야 하는 이유입니다.
메모리 압박. 별도 draft 모델은 VRAM을 먹고 그만큼 KV 캐시에 쓸 공간이 줄어 동시 처리 가능한 요청 수가 줄어듭니다. 지연시간을 사고 처리량을 파는 거래가 될 수 있습니다.
acceptance가 낮으면 proposal 깊이를 늘려도 버려지는 후보가 많아지고 proposer overhead가 상대적으로 커집니다. 정확한 손익분기점은 draft cost와 batch/QPS에 따라 달라지므로 benchmark로 결정해야 합니다.
7장. target-only와 같은 traffic에서 벤치한다
엔진별 지원 현황입니다.
| 엔진 | 지원 |
|---|---|
| vLLM | n-gram(prompt lookup), draft 모델, EAGLE, Medusa 계열 지원 |
| TensorRT-LLM | draft-target, Medusa, EAGLE, ReDrafter 등 |
| llama.cpp | draft 모델 지정 옵션 제공 |
| SGLang | EAGLE 계열 지원 |
구현마다 지원 방식과 옵션 이름이 다르므로 쓰는 런타임의 문서를 확인해야 합니다.
켜기 전에 이 순서로 확인합니다.
① 토크나이저가 같은가
draft 와 target 의 어휘가 다르면 그대로는 못 쓴다
② 수용률을 실측한다
대표 프롬프트 세트로 재본다. 0.5 미만이면 조합을 바꾼다
③ γ 를 수용률에 맞춰 정한다
④ 배치 크기별로 재본다
부하가 높은 구간에서 역전되는지 확인한다
⑤ 출력 동등성을 회귀 테스트한다
수치 오차를 감안한다draft 선택 순서. 입력이 출력에 많이 재등장하는 요약, 편집, 번역, RAG 응답에는 prompt lookup을 먼저 시도합니다. 비용이 0이고 설정이 가장 쉽습니다.
일반적인 선택은 target에 맞는 작은 draft model, EAGLE/MTP 같은 model-based proposer, n-gram/suffix 같은 가벼운 proposer 사이에서 이뤄집니다. 현재 vLLM도 여러 방법을 지원하고, 어떤 방식이 좋은지는 QPS·VRAM·모델 family·training 여력에 따라 달라집니다.
다른 최적화와의 관계. KV 캐시와 PagedAttention, FlashAttention은 직교해서 함께 씁니다.
양자화는 함께 쓸 수 있고 draft 모델을 양자화하면 c가 더 내려가 유리합니다. 다만 target을 양자화하면 그것은 품질을 파는 것이라 성격이 다릅니다.
Continuous Batching은 배치가 커지는 방향이라 Speculative Decoding의 이득을 깎습니다.
이 기법의 미덕. 대부분의 추론 최적화는 무언가를 팝니다. 양자화는 정밀도를, Pruning은 파라미터를, 증류는 모델 크기를, 캐시 축출은 컨텍스트를 팝니다.
Speculative Decoding은 품질을 팔지 않고 놀고 있던 연산 자원을 쓸 뿐입니다. 그래서 언제 켜도 되는지의 판단이 훨씬 단순합니다.
8장. proposer를 싸고 정확하게 만드는 흐름
발전 흐름입니다.
| 시기 | 무엇 | 핵심 |
|---|---|---|
| 2022-11 | Fast Inference from Transformers via Speculative Decoding | 기법 제안. 분포 보존 증명. T5-XXL에서 2배에서 3배 |
| 2023-02 | Accelerating LLM Decoding with Speculative Sampling | Chinchilla 70B에서 2배에서 2.5배. 분산 환경 검증 |
| 2023-09 | Draft & Verify (self-speculative) | 별도 모델 없이 자기 층을 건너뛰어 draft 생성 |
| 2024-01 | Medusa | 추가 디코딩 헤드와 트리 어텐션. draft 모델 불필요 |
| 2024-01 | EAGLE | 특징 수준 자기회귀로 수용률 향상 |
| 2024-04 | Multi-token Prediction | 사전학습 단계에서 다중 토큰 예측을 학습 |
| 2024-06 | EAGLE-2 | 컨텍스트 인지 동적 draft 트리. 3.05배에서 4.26배 (저자 보고) |
| 2025-03 | EAGLE-3 | 특징 예측을 버리고 다층 특징 융합과 직접 토큰 예측 |
별도 모델에서 모델에 붙인 헤드로, 특징 수준 예측으로, 학습에 내재화하는 방향으로 흐릅니다. draft를 얻는 비용을 계속 낮추면서 수용률을 계속 올리는 방향입니다.
9장. latency 최적화로 읽는 Speculative Decoding
Speculative Decoding은 proposer가 만든 미래 token 후보를 target이 병렬 검증해 한 round에서 여러 token을 확정하려는 방법입니다. lossless rejection/resampling 계열은 target distribution을 유지하도록 설계되지만, 실제 가속은 acceptance뿐 아니라 proposer cost, verification cost, batch/QPS와 hardware가 함께 결정합니다.
latency 중심의 낮은 QPS workload에서는 speculative decoding을 우선 검토할 가치가 큽니다. 반대로 이미 큰 batch로 throughput을 충분히 끌어올린 서버에서는 proposer가 추가 compute와 memory를 소비하므로 이득이 줄 수 있습니다. 고정 acceptance threshold로 켜고 끄기보다 target-only와 동일 traffic에서 TTFT·ITL·throughput·GPU memory를 함께 비교합니다.
2배에서 3배 빠르다는 숫자는 특정 모델과 특정 과제와 특정 배치에서 나온 값입니다. 수용률이 과제마다 다르고 배치 크기에 따라 뒤집히기도 하므로, 자기 워크로드에서 실측하지 않은 채로 이 배수를 용량 계획에 넣으면 안 됩니다.
용어 정리
| 용어 | 한 줄 뜻 |
|---|---|
| Speculative Decoding | draft 모델이 여러 토큰을 미리 쓰고 target 모델이 한 번에 검증하는 가속 기법 |
| draft 모델 | 작고 빠른 초안 생성 모델. 품질이 아니라 속도에만 영향을 줌 |
| target 모델 | 크고 정확한 검증 모델. 최종 출력 품질을 책임짐 |
| 감마 (γ) | 한 라운드에서 draft가 미리 생성하는 토큰 수 |
| 수용률 (acceptance rate, α) | draft 제안이 수용되는 비율. 성능을 사실상 결정 |
| 수정된 기각 샘플링 | 수용 확률과 잔차 분포를 조합해 target 분포를 정확히 재현하는 샘플링 |
| 잔차 분포 | normalize(max(0, p - q)). 기각 시 다시 뽑는 분포 |
| 보너스 토큰 | γ개가 모두 수용됐을 때 target의 다음 위치 분포에서 추가로 확정할 수 있는 토큰 |
| 트리 어텐션 | 여러 후보 경로를 어텐션 마스크로 한 번에 검증하는 기법 |
| Medusa | target 모델에 추가 디코딩 헤드를 붙여 draft를 만드는 방식 |
| EAGLE | 특징 수준 자기회귀로 draft를 만드는 계열 |
| self-speculative | 자기 모델의 일부 층만 건너뛰어 draft를 만드는 방식 |
| prompt lookup (n-gram) decoding | 모델 없이 컨텍스트 문자열 매칭으로 draft를 만드는 방식 |
| 산술 강도 (arithmetic intensity) | 메모리에서 읽은 바이트당 수행하는 연산 수. decode는 낮음 |
| TPOT | 토큰당 출력 시간. Speculative Decoding이 직접 개선하는 지표 |
| 처리량 (throughput) | 단위 시간당 처리 토큰 수. 배치가 크면 개선되지 않을 수 있음 |
| Continuous Batching | 요청을 동적으로 배치에 넣고 빼는 서빙 기법 |
참고자료
- Fast Inference from Transformers via Speculative Decoding (arXiv 2211.17192, 원논문과 분포 보존 증명). Figure 1 이 수용, 거부, 교정을 색으로 구분한 실제 생성 예시이고 Figure 2 가 수용률에 따른 기대 토큰 수 곡선이다. Equation 1 이 그 식이다. ar5iv
- Accelerating Large Language Model Decoding with Speculative Sampling (arXiv 2302.01318, Chinchilla 70B 검증)
- Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads (arXiv 2401.10774)
- EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty (arXiv 2401.15077)
- EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees (arXiv 2406.16858)
- EAGLE-3: Scaling up Inference Acceleration via Training-Time Test (arXiv 2503.01840)
- Draft & Verify: Lossless LLM Acceleration via Self-Speculative Decoding (arXiv 2309.08168)
- Better & Faster Large Language Models via Multi-token Prediction (arXiv 2404.19737)
- vLLM 공식 문서, Speculative Decoding
- vLLM, Speculative Decoding
'Inference > Optimization' 카테고리의 다른 글
| MTP (Multi-Token Prediction) (0) | 2025.12.03 |
|---|---|
| FlashAttention (0) | 2024.08.27 |
| KV Cache 란 ? (0) | 2024.07.02 |
| prefill vs decode (0) | 2024.03.11 |
댓글