Domino: Decoupling Causal Modeling from Autoregressive Drafting in Speculative Decoding Review
0. Introduction
Domino는 speculative decoding 논문이지만, 단순히 draft model을 하나 더 빠르게 만든 논문으로 읽으면 핵심을 놓치기 쉽다. 이 논문이 실제로 겨냥하는 문제는 speculative decoding의 오래된 trade-off다. 좋은 draft를 만들려면 draft token들 사이의 causal dependency를 잘 모델링해야 하는데, 그걸 autoregressive하게 실행하면 draft 자체가 다시 sequential bottleneck이 된다.
즉 문제는 아래 질문에 가깝다.
“causal dependency는 살리되, draft execution은 병렬로 유지할 수 있는가?”
Domino의 핵심은 causal modeling과 autoregressive execution을 분리하는 것이다.
저자들은 parallel draft backbone으로 block 전체의 base logits를 한 번에 만든 뒤, 그 위에 가벼운 Domino head를 얹어 prefix-dependent causal correction을 넣는다. 중요한 점은 이 correction branch가 token을 다시 autoregressive하게 생성하는 것이 아니라, 이미 병렬로 계산된 logits를 residual하게 보정한다는 것이다.
한 줄 요약: Domino는 speculative decoding에서 parallel drafting의 낮은 비용은 유지하면서, GRU 기반 causal encoder와 low-rank logit correction으로 draft token 간 dependency를 다시 주입하는 inference acceleration 논문이다.
이 논문을 지금 볼 가치가 있는 이유는 다음과 같음.
- speculative decoding의 병목을 acceptance length만이 아니라 draft cost 관점에서 분해한다.
- autoregressive drafter와 parallel drafter의 장단점을 하나의 구조 안에서 절충한다.
- Qwen3-4B와 Qwen3-8B에서 Transformers backend와 SGLang serving을 모두 실험한다.
이 논문은 speculative decoding을 “좋은 작은 모델을 하나 더 붙이는 문제”에서 “draft distribution을 어떤 경로로 싸게 보정할 것인가”로 바꿔 읽게 만든다. 특히 serving 관점에서는 이 차이가 꽤 크다. draft model이 똑똑해져도 그 자체가 비싸지면 전체 latency가 줄지 않기 때문이다.
1. Problem Setting
1-1. Problem definition
- 이 논문이 겨냥하는 핵심 문제는 LLM decoding을 빠르게 하면서도 target model의 출력 품질을 유지하는 것이다.
- speculative decoding은 draft model이 여러 future token을 제안하고, target model이 이를 한 번의 forward pass로 검증한다.
- 최종 speedup은 크게 두 항목에 의해 결정된다.
- accepted prefix length가 얼마나 긴가
- draft를 만드는 비용이 얼마나 작은가
- autoregressive drafter는 draft token 사이의 dependency를 잘 반영하지만, draft token을 순차적으로 만들기 때문에 cost가 커진다.
- parallel drafter는 block 전체를 한 번에 만들 수 있어 cost가 낮지만, block 내부의 causal dependency modeling이 약해진다.
이 trade-off를 식으로 아주 단순화하면 다음처럼 볼 수 있다.
\[Speedup \approx T_{AR} / ((T_{draft} + T_{verify}) / A)\]여기서 $A$는 한 cycle에서 전진하는 평균 token 수다. $A$가 커져도 $T_{draft}$가 함께 커지면 실제 speedup은 제한된다.
1-2. Why previous approaches are insufficient
- EAGLE 계열 같은 autoregressive drafting은 acceptance length가 강한 편이다.
- 하지만 draft token을 하나씩 만들고, 각 step마다 draft forward와 LM head projection을 수행하면 draft budget이 길어질수록 비용이 선형적으로 증가한다.
- DFlash나 DART 같은 parallel drafting은 반복 draft execution을 줄이지만, block 내부의 left-to-right dependency가 약해진다.
- FR-Spec이나 SpecVocab처럼 vocabulary projection cost를 줄이는 접근도 있지만, autoregressive draft execution 자체를 완전히 없애는 것은 아니다.
- 따라서 기존 접근은 대체로 둘 중 하나를 선택했다.
- 더 좋은 draft를 위해 sequential cost를 감수한다.
- 더 싼 draft를 위해 causal dependency modeling을 약하게 둔다.
Domino는 이 선택지를 다시 나눈다. token을 순차적으로 생성하지 않아도, causal information만 별도 correction branch로 넣을 수 있다는 주장이다.
2. Core Idea
2-1. Main contribution
Domino의 핵심 기여는 block-parallel draft generation 위에 lightweight causal correction을 붙인 것이다.
구성은 크게 세 부분이다.
- Parallel draft backbone
- draft block 전체의 hidden states와 base logits를 병렬로 계산한다.
- 논문은 DFlash architecture를 backbone으로 사용한다.
- Domino head
- 이전 draft token embedding을 GRU causal encoder로 요약한다.
- 그 causal state를 base representation과 합쳐 low-rank correction logits를 만든다.
- Base-anchored curriculum
- 처음에는 parallel backbone의 base logits를 강하게 학습시킨다.
- 이후 점진적으로 final corrected logits 쪽으로 optimization weight를 옮긴다.
이 설계는 causal dependency를 포기하지 않지만, 비싼 full draft-model forward를 token마다 반복하지 않는다.
2-2. Design intuition
이 논문의 설계 직관은 꽤 명확하다. speculative decoding에서 중요한 것은 draft token을 실제로 순차 생성하는 것이 아니라, 나중 position의 distribution이 이전 draft token을 조건으로 조금 더 정확해지는 것이다.
그래서 Domino는 아래처럼 역할을 나눈다.
- parallel backbone은 cheap base distribution을 만든다.
- Domino head는 prefix-dependent correction만 담당한다.
- target model verification은 기존 speculative decoding처럼 distribution correctness를 보장한다.
“autoregressive draft model”이 아니라 “causal correction module”로 충분한가를 실험으로 묻는 셈이다.
이 분리가 Domino의 가장 재사용 가치가 높은 부분이다.
3. Architecture / Method
3-1. Overview
| Item | Description |
|---|---|
| Goal | speculative decoding에서 draft quality와 draft cost의 trade-off를 줄이는 것 |
| Target models | Qwen3-4B, Qwen3-8B |
| Draft budget | block size 16 |
| Key module | parallel draft backbone + Domino head |
| Domino head | GRU causal encoder + low-rank logit correction |
| Training idea | teacher-forced causal encoding + base-anchored curriculum |
| Serving path | Transformers backend and SGLang benchmark |
3-2. Module breakdown
1) Parallel draft backbone
- Domino는 먼저 verified prefix를 기준으로 future draft block을 만든다.
- 첫 token은 anchor로 두고, 나머지 future position은 mask input으로 둔다.
- backbone은 target context features와 masked block input을 받아 block-level hidden states를 한 번에 생성한다.
- base logits는 frozen target LM head를 통해 병렬로 계산된다.
- 논문 구현에서는 5-layer parallel draft backbone을 사용한다.
이 부분은 parallel drafting의 장점을 그대로 유지한다. 핵심은 expensive full LM head를 token마다 다시 호출하지 않는다는 점이다.
2) Domino head
Domino head는 두 하위 모듈로 구성된다.
- Causal encoder
- 이전 draft token embedding을 GRU로 요약한다.
- 논문 구현 기준 hidden dimension은 1024다.
- 이 state는 현재 position이 이전 draft token들에 조건화되도록 한다.
- Low-rank correction head
- base representation과 causal state를 결합한다.
- low-rank hidden space를 거쳐 vocabulary-space residual correction을 만든다.
- 논문 구현 기준 low-rank hidden dimension은 256이다.
최종 logits는 아래처럼 읽을 수 있다.
\[logits_{final} = logits_{base} + logits_{corr}\]중요한 선택은 hidden-space correction이 아니라 logit-space correction을 사용한다는 점이다. hidden-space correction을 하면 causal update 뒤에 full LM head를 다시 적용해야 하고, 이는 sequential branch에 다시 큰 비용을 넣는 결과가 된다. Domino는 correction을 logit space로 제한해서 이 비용을 피한다.
3) Teacher-forced causal encoding
Domino head의 causal encoder는 이전 draft token을 입력으로 받는다. 이때 학습 중 self-generated prefix를 넣으면 초반에 noisy prefix가 많아진다. 저자들은 이를 피하기 위해 teacher forcing을 사용한다.
이 선택은 speculative decoding의 accepted-prefix 구조와도 잘 맞는다. 어떤 position의 correction이 의미를 갖는 것은 그 앞 token들이 이미 target verification을 통과한 경우다. 따라서 ground-truth prefix 위에서 causal correction을 학습하는 것이 실제 유효 구간에 더 맞다는 설명이다.
4) Base-anchored curriculum
Teacher forcing만 쓰면 또 다른 문제가 생긴다. correction branch가 clean prefix를 보고 너무 쉽게 맞히면서 parallel backbone을 약하게 만들 수 있다.
그래서 Domino는 base logits와 final logits를 함께 supervise하고, 시간이 지나면서 weight를 옮기는 curriculum을 쓴다.
\[L = lambda L_{base} + (1 - lambda) L_{final}\]처음에는 $L_{base}$를 강하게 보면서 backbone을 안정화하고, 이후 $L_{final}$ 비중을 늘려 Domino head의 correction을 학습한다.
이 curriculum은 단순한 안정화 trick이 아니라, parallel backbone collapse를 막기 위한 핵심 장치다.
5) Efficient runtime implementation
- 논문은 Domino head overhead를 줄이기 위해 fused Triton kernels와 CUDA Graphs를 사용한다.
- GitHub README 기준으로 Hugging Face benchmark path와 SGLang benchmark path가 분리되어 있다.
- Hugging Face quick usage는 Qwen3 target model과 Domino draft checkpoint를 함께 load해서
spec_generate를 호출하는 형태다. - SGLang benchmark는 별도 Domino-compatible branch를 설치하는 방식으로 제공된다.
실무적으로는 이 부분이 중요하다. speculative decoding 논문은 알고리즘상 좋아 보여도 serving integration에서 깨지는 경우가 많다. Domino는 적어도 공개 repo 기준으로 HF path와 SGLang path를 모두 의식하고 있다.
4. Training / Data / Recipe
4-1. Data
- draft modules는
mlabonne/open-perfectblenddataset으로 학습된다. - 논문은 이 dataset을 1.42M samples의 instruction-tuning dataset으로 설명한다.
- 원본 response를 그대로 쓰지 않고, 각 target model로 response를 다시 생성한다.
- target model은 Qwen3-4B와 Qwen3-8B다.
이 선택은 꽤 자연스럽다. draft distribution은 target model distribution에 맞아야 하므로, training response를 target model이 직접 regenerate하는 편이 더 일관적이다.
4-2. Training strategy
논문과 appendix 기준 핵심 recipe는 다음과 같다.
| Item | Setting |
|---|---|
| Target model | Qwen3-4B, Qwen3-8B |
| Draft block size | 16 |
| Input truncation | 3072 tokens |
| Backbone | 5-layer parallel draft backbone |
| Causal encoder | GRU hidden dimension 1024 |
| Correction head | low-rank hidden dimension 256 |
| Epochs | 3 |
| GPUs | 8 NVIDIA A100-SXM4-80GB |
| Per-GPU batch size | 2 |
| Global batch size | 16 |
| Precision | bfloat16 |
| Optimizer | AdamW |
| Training stack | FSDP with gradient sharding |
HTML 본문에서는 learning rate 값이 수식 렌더링 문제로 비어 보인다. 그래서 이 초안에서는 exact learning rate를 단정하지 않는다.
4-3. Engineering notes
- target model은 frozen으로 두고 draft module만 학습한다.
- Domino head는 acceptance length를 높이기 위한 correction module이지, target model 자체를 바꾸는 module이 아니다.
- GitHub README 기준 공개 지원 모델은
Huang2020/Qwen3-4B-Domino-b16과Huang2020/Qwen3-8B-Domino-b16이다. - Hugging Face collection에는 각각 Qwen3-4B, Qwen3-8B용 Domino checkpoint가 올라와 있다.
- README는 Hugging Face benchmark와 SGLang benchmark 실행 스크립트를 제공한다.
- SGLang path는 branch와 CUDA/PyTorch dependency가 중요하므로, 단순 pip install만으로 production setting을 가정하면 안 된다.
5. Evaluation
5-1. Main results
평가는 Qwen3-4B와 Qwen3-8B에서 진행된다. task는 math reasoning, code generation, open-ended dialogue로 나뉜다.
- Math: GSM8K, MATH-500, AIME25
- Code: HumanEval, MBPP, LiveCodeBench
- Chat: MT-Bench, Alpaca
논문은 end-to-end speedup과 average acceptance length를 함께 보고한다.
Transformers backend
Temperature 0 기준 overall average는 다음과 같다.
| Model | Method | Avg speedup | Avg acceptance length |
|---|---|---|---|
| Qwen3-4B | DFlash (16) | 4.70 | 6.11 |
| Qwen3-4B | Domino (16) | 5.47 | 7.08 |
| Qwen3-8B | DFlash (16) | 4.66 | 6.06 |
| Qwen3-8B | Domino (16) | 5.49 | 7.17 |
Temperature 1 기준 overall average도 유사한 방향이다.
| Model | Method | Avg speedup | Avg acceptance length |
|---|---|---|---|
| Qwen3-4B | DFlash (16) | 4.03 | 5.33 |
| Qwen3-4B | Domino (16) | 4.61 | 6.00 |
| Qwen3-8B | DFlash (16) | 3.96 | 5.18 |
| Qwen3-8B | Domino (16) | 4.46 | 5.91 |
이 결과는 Domino가 단순히 latency overhead를 더 넣은 것이 아니라, acceptance length 개선으로 전체 speedup을 실제로 끌어올렸다는 쪽으로 읽힌다.
SGLang serving benchmark
SGLang high-concurrency table에서도 Domino는 DFlash보다 높은 throughput을 보인다. 예를 들어 Qwen3-8B GSM8K에서 concurrency 2 기준 baseline은 184 TPS이고, DFlash는 672 TPS, Domino는 942 TPS다. 같은 task의 concurrency 32 기준에서는 DFlash가 2801 TPS, Domino가 3650 TPS다.
MBPP에서도 Qwen3-8B 기준 concurrency 2에서 DFlash 649 TPS, Domino 701 TPS이고, concurrency 32에서 DFlash 2800 TPS, Domino 3027 TPS다.
즉 Domino의 이득은 offline latency table에만 머물지 않고 serving throughput에서도 어느 정도 유지된다.
5-2. What really matters in the experiments
1) DFlash보다 왜 좋아지는가
DFlash는 block-parallel drafting으로 비용을 낮춘다. 그러나 block 내부 dependency modeling은 약하다. Domino는 DFlash backbone 위에 causal correction branch를 얹어 이 빈 부분을 보완한다.
가장 중요한 비교는 DFlash 대비 speedup만이 아니라 acceptance length가 함께 오른다는 점이다. draft cost를 거의 유지하면서 accepted prefix가 길어진다면 speculative decoding의 구조상 speedup이 올라갈 수 있다.
2) Domino head ablation
Domino head를 끄고 켠 ablation도 핵심이다.
| Setting | Avg acceptance length | Avg speedup |
|---|---|---|
| w/o Domino Head | 3.49 | 2.84 |
| w/ Domino Head | 4.19 | 3.31 |
이 결과는 improvement가 training data 차이나 benchmark noise만으로 설명되기 어렵다는 근거다. lightweight prefix-dependent correction 자체가 이득을 만든다.
3) Teacher forcing과 curriculum
논문은 training-time testing과 teacher forcing, 그리고 teacher forcing plus curriculum을 비교한다. HTML 본문에서는 일부 수치가 빠져 보이지만, 저자들은 teacher forcing이 noisy self-generated prefix보다 acceptance length에 더 유리하고, base-anchored curriculum이 parallel backbone collapse를 완화한다고 설명한다.
여기서 핵심은 teacher forcing 하나만이 아니라 curriculum까지 같이 필요하다는 점이다. clean prefix를 쓰면 correction branch가 너무 쉬운 shortcut을 잡을 수 있기 때문이다.
6. Limitations
- 논문은 inference acceleration에 집중한다. training cost나 finetuning cost 자체를 줄이는 논문은 아니다.
- main experiment는 Qwen3-4B와 Qwen3-8B에 집중되어 있다. 다른 architecture family로의 전이는 추가 검증이 필요하다.
- current implementation은 SGLang에 맞춰져 있으며, 다른 serving framework에서 같은 speedup이 나오는지는 체계적으로 확인되어야 한다.
- speedup은 hardware, memory bandwidth, kernel efficiency, batch shape, sampling setting에 따라 달라질 수 있다.
- Domino head는 lightweight라지만 별도 draft module training과 serving integration이 필요하다. production에서는 모델 quality보다 deployment complexity가 병목이 될 수 있다.
- GitHub에는 benchmark script와 training code release 소식이 있지만, 실제 서비스 환경의 mixed workload까지 그대로 재현된다고 보면 안 된다.
7. My Take
7-1. Why this matters for my work
- 이 논문은 inference acceleration을 단순 kernel optimization 문제가 아니라 distribution approximation 문제로 다룬다.
- 특히 speculative decoding에서 중요한 것은 draft model을 크게 만드는 것이 아니라, target distribution을 얼마나 싸게 근사할 수 있는가다.
- Domino는 그 근사를 두 단계로 쪼갠다.
- parallel backbone으로 coarse draft distribution을 만든다.
- causal correction으로 accepted-prefix regime에서 필요한 dependency만 보정한다.
이 접근은 다른 decoding acceleration에도 꽤 좋은 힌트를 준다. 모든 dependency를 expensive path에서 처리하지 말고, cheap base path와 residual correction path로 나눌 수 있는지 먼저 봐야 한다.
7-2. Reuse potential
실무적으로 재사용 가치가 높은 포인트는 아래 4가지다.
- Logit-space residual correction
- hidden을 다시 full LM head에 넣지 않고, vocabulary-space correction을 저비용으로 넣는 설계는 다른 draft model에도 응용 가능하다.
- Accepted-prefix-aware teacher forcing
- speculative decoding에서는 앞 token이 맞아야 뒤 token이 의미를 갖는다. 그래서 causal encoder를 ground-truth prefix에서 학습시키는 논리가 설득력 있다.
- Base-anchored curriculum
- residual branch가 backbone을 shortcut하지 않도록 base distribution을 먼저 세우는 방식은 adapter-style module 학습에도 참고할 수 있다.
- Serving-aware implementation
- Triton, CUDA Graphs, SGLang path를 같이 고려했다는 점은 논문 아이디어와 serving path가 분리되지 않았다는 의미가 있다.
반대로 바로 가져가기 어려운 부분도 있다.
- target model별 draft checkpoint를 따로 학습해야 한다.
- inference server에 speculative verification과 Domino head path를 함께 넣어야 한다.
- benchmark workload와 production workload의 concurrency, prompt length, sampling distribution이 다르면 이득 폭이 달라질 수 있다.
7-3. Follow-up papers
- Fast Inference from Transformers via Speculative Decoding
- speculative decoding의 기본 draft-then-verify 구조를 이해하기 위한 출발점이다.
- EAGLE and EAGLE-3
- autoregressive or feature-level drafting이 왜 acceptance length를 높이는지 비교하기 좋다.
- DFlash
- Domino의 backbone이 되는 block-parallel drafting 방향을 이해하는 데 필요하다.
- DART
- parallel speculative drafting의 또 다른 설계 축으로 비교하기 좋다.
- FR-Spec and SpecVocab
- full-vocabulary projection cost를 줄이는 방향이므로 Domino의 causal correction 방향과 보완적으로 읽을 수 있다.
8. Summary
- Domino는 speculative decoding에서 draft quality와 draft cost의 trade-off를 정면으로 다룬다.
- parallel draft backbone으로 block 전체 base logits를 한 번에 만들고, Domino head로 causal correction을 넣는다.
- Domino head는 GRU causal encoder와 low-rank logit correction으로 구성된다.
- teacher forcing과 base-anchored curriculum은 correction branch가 backbone을 망가뜨리지 않게 하는 핵심 학습 장치다.
- Qwen3-4B와 Qwen3-8B 실험에서 Domino는 DFlash 대비 acceptance length와 speedup을 함께 개선한다.
댓글남기기