주제: IO-3 Speculative Decoding (Draft / Verify 가속 구조)

분류: llm

타입: concept

난이도: 중상

선수지식: 있음 — Transformer Decoder, KV Cache, LLM Inference

문제 설정

LLM 추론에서 가장 큰 병목은 autoregressive decoding입니다.

언어 모델 목표:

P(xt|x1,...,xt1)

즉 토큰을 하나씩 순차적으로 생성해야 합니다.

x1 → x2 → x3 → x4 → x5

이 때문에 GPU 병렬화가 제한됩니다.

이를 해결하기 위해 제안된 방법이 Speculative Decoding입니다.

직관 비유

draft model + verify model 구조입니다.

1. 기본 아이디어

두 개의 모델을 사용합니다.

draft 모델이 여러 토큰을 한 번에 생성합니다.

draft: x1 x2 x3 x4

target 모델이 이를 검증합니다.

2. Draft 단계

작은 모델이 k개의 토큰을 생성합니다.

y1,y2,...,yk Pdraft

기호 의미

왜 필요한가

빠른 모델로 후보 토큰을 미리 생성합니다.

주의점

draft 모델은 target 모델보다 작습니다.

3. Verify 단계

target 모델이 draft 토큰을 검증합니다.

확률:

Ptarget(yi|context)

accept 조건:

acceptifPtargetPdraft

직관 설명

draft 모델이 맞게 예측했다면 그대로 사용합니다.

주의점

불일치 시 target 모델 출력으로 교체합니다.

4. Acceptance 과정

검증 과정:

draft: x3 x4 x5 x6
target: x3 x4 x7 ...

결과:

reject 시 target 모델 토큰 사용

수식

α=min(1,Ptarget/Pdraft)

기호 의미

왜 필요한가

확률적으로 동일한 분포를 유지합니다.

5. 속도 향상

Speculative decoding은 여러 토큰을 한 번에 검증합니다.

속도 향상:

speedupk×acceptancerate

기호 의미

주의점

acceptance rate가 낮으면 효과가 감소합니다.

6. 정확도 유지

Speculative decoding의 중요한 특징:

출력 분포가 원래 모델과 동일합니다.

즉:

Poutput=Ptarget

왜 중요한가

가속화하면서도 모델 정확도를 유지합니다.

7. 실제 시스템 적용

구성 역할
Draft model 빠른 후보 생성
Target model 검증
KV Cache attention 재사용

8. Tradeoff

요소 영향
draft model 크기 acceptance rate 증가
draft length k 속도 증가 가능
verify cost 추론 비용 증가

코드-수식 연결

개념 코드 설명
draft model small_model.generate() 초안 토큰 생성
verify large_model.forward() 확률 검증
sampling torch.multinomial() 토큰 선택

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)