Speculative Decoding

1. 간단 요약

for 큰 LLM의 속도를 빠르게 하기 위해!

  • Step 1) 작은 LLM이 미리 후보 token을 “여러” 개 예측하고

  • Step 2) 큰 LLM이 이를 빠르게 검증하는 방식 (채택 or 기각)


Speculative = “추측에 기반한, 미리 예상해서 하는”


2. 주요 개념

두 종류의 model

  • 작은 LLM = Draft model (초안 생성기)
  • 큰 LLM = Target model (정확한 최종 model)


작은 LLM이 “미리 뱉은 여러 token 후보”

“큰 LLM이 통과시키는 것만 채택”해서 한 번에 여러 token을 생성함

큰 LLM이 매 token을 하나씩 생성할 필요가 없어져 속도가 크게 증가


3. 필요성

LLM에서 가장 느린 작업?

1 token 생성 → 다시 model forward pass → 또 1 token 생성 …

“token-by-token” 방식이 병목!


Speculative decoding

  • 작은/빠른 LLM이 여러 token (batch)을 미리 예측
  • 큰 LLM은 검증만!
    • 맞으면 그대로 채택
    • 틀리면 되돌아가서 다시 생성


4. 동작 방식 (Detail)

  • Step 1) 작은 LLM(Draft)이 token을 k개 미리 예측
Draft: "The weather today is very"
→ ["very", "nice", "and", "quite", "warm"]


  • Step 2) 큰 LLM(Target)은 이 후보들이 “가능성 있는지”만 빠르게 체크

    • feat. Probability ratio test

    • 큰 LLM이 ok라고 판단하면

      → 한 번에 여러 token을 “확정”

      → 속도 매우 빠름

    • 큰 LLM이 reject하면

      → 그 지점에서부터 큰 LLM이 직접 생성 (fallback)


5. 장점

(1) 속도 대폭 향상

  • 초안이 여러 개 → 검증은 빠름 → 전체 latency 감소
  • 실전에서 2~4배 속도 향상 자주 관측됨


(2) 정확도 영향 없음

  • “큰 LLM이 최종 검증”하므로

    → 품질(target model과 동일) 보장


(3) 작은 LLM 재사용 가능

  • 작은 LLM은 Distillation 같은 작업 필요 없음
  • 별도 추가 학습 없이 그냥 사용 가능


6. 단점

  • 후보를 많이 생성하면 검증 비용 증가

    → 최적 k 선택이 필요

  • Draft가 너무 나쁘면 rejection률이 높아져 속도 향상 줄어듬!

  • 두 model의 tokenization과 vocab이 동일해야 함

Categories:

Updated: