10 분 소요

0. Introduction

Paper link

Code

Models

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을 붙인 것이다.

구성은 크게 세 부분이다.

  1. Parallel draft backbone
    • draft block 전체의 hidden states와 base logits를 병렬로 계산한다.
    • 논문은 DFlash architecture를 backbone으로 사용한다.
  2. Domino head
    • 이전 draft token embedding을 GRU causal encoder로 요약한다.
    • 그 causal state를 base representation과 합쳐 low-rank correction logits를 만든다.
  3. 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-perfectblend dataset으로 학습된다.
  • 논문은 이 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-b16Huang2020/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

  1. 논문은 inference acceleration에 집중한다. training cost나 finetuning cost 자체를 줄이는 논문은 아니다.
  2. main experiment는 Qwen3-4B와 Qwen3-8B에 집중되어 있다. 다른 architecture family로의 전이는 추가 검증이 필요하다.
  3. current implementation은 SGLang에 맞춰져 있으며, 다른 serving framework에서 같은 speedup이 나오는지는 체계적으로 확인되어야 한다.
  4. speedup은 hardware, memory bandwidth, kernel efficiency, batch shape, sampling setting에 따라 달라질 수 있다.
  5. Domino head는 lightweight라지만 별도 draft module training과 serving integration이 필요하다. production에서는 모델 quality보다 deployment complexity가 병목이 될 수 있다.
  6. 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가지다.

  1. Logit-space residual correction
    • hidden을 다시 full LM head에 넣지 않고, vocabulary-space correction을 저비용으로 넣는 설계는 다른 draft model에도 응용 가능하다.
  2. Accepted-prefix-aware teacher forcing
    • speculative decoding에서는 앞 token이 맞아야 뒤 token이 의미를 갖는다. 그래서 causal encoder를 ground-truth prefix에서 학습시키는 논리가 설득력 있다.
  3. Base-anchored curriculum
    • residual branch가 backbone을 shortcut하지 않도록 base distribution을 먼저 세우는 방식은 adapter-style module 학습에도 참고할 수 있다.
  4. 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을 함께 개선한다.

댓글남기기