스페큘러티브 디코딩(speculative decoding)은 작고 빠른 드래프트 모델이 여러 토큰을 미리 지어내고, 크고 정확한 타깃 모델이 그걸 한 번에 검증해 채택 여부를 결정하는 추론 가속 기법이다. 큰 모델이 토큰을 하나씩 뱉는 대신, 초안 여러 개를 병렬로 검산하는 셈이다. 핵심은 최종 출력이 큰 모델 혼자 생성했을 때와 확률적으로 동일하다는 점. 속도만 얻고 품질은 안 버린다.
나는 이 기법의 이름만 보고 "추측이면 부정확한 거 아냐?"라고 오해했다. 반대였다. 추측은 드래프트가 하지만, 받아들일지는 타깃이 엄격히 검증한다. 그래서 결과물의 분포는 타깃 모델 그대로다. 여기서 모든 게 갈린다 — 바로 수용률(acceptance rate)이다.
왜 검증이 생성보다 싼가
비밀은 트랜스포머의 성질에 있다. 토큰을 생성할 땐 하나 만들고 다시 넣고를 반복해야 하지만, 이미 나열된 토큰들을 검증할 땐 한 번의 순전파로 그 위치들의 확률을 동시에 구할 수 있다. 생성 단계는 메모리 대역폭에 묶여 GPU가 놀고 있는 경우가 많은데, 검증은 그 노는 연산 여력을 채워 넣는 것이다.
흐름은 이렇다. 드래프트가 k개 토큰을 제안한다 → 타깃이 그 k개를 한 번에 검증한다 → 앞에서부터 타깃 분포와 맞는 데까지 받아들이고, 처음 어긋나는 지점에서 하나를 타깃이 직접 정정한다. 운이 좋으면 한 번의 타깃 순전파로 여러 토큰이 확정된다.
# 스페큘러티브 디코딩의 뼈대 (개념)
while not done:
draft = small_model.generate(ctx, k) # k개 초안 제안
probs = big_model.forward(ctx + draft) # 한 번에 검증
for i, tok in enumerate(draft):
if accept(tok, probs[i]): # 타깃 분포로 수용 판정
ctx.append(tok)
else:
ctx.append(sample(corrected(probs[i]))) # 정정 후 중단
break
else:
ctx.append(sample(probs[k])) # 전부 수용 시 보너스 토큰
수용률이 경제학을 지배한다
이 기법의 이득은 전적으로 수용률에 달렸다. 드래프트가 타깃과 비슷하게 예측할수록 더 많은 토큰이 한 번에 통과해 가속이 커진다. 반대로 드래프트가 자꾸 틀리면, 초안을 만드는 비용에 검증 비용까지 더해져 오히려 느려질 수도 있다.
| 요소 | 수용률에 미치는 영향 |
|---|---|
| 드래프트-타깃 정합 | 비슷할수록 수용률↑ |
| 제안 길이 k | 클수록 잠재이득↑ 그러나 뒤쪽 수용률↓ |
| 텍스트 예측성 | 코드·정형문↑, 창의적 생성↓ |
k(한 번에 제안하는 토큰 수)도 저울질 대상이다. 크게 잡으면 잘 맞을 때 이득이 크지만, 뒤로 갈수록 어긋날 확률이 누적돼 헛수고가 늘어난다. 나는 예측 가능한 정형 텍스트(코드, 표, 반복적 서식)에서 수용률이 확 오르고, 자유로운 창작에서 뚝 떨어지는 걸 보고 "작업 성격에 따라 이득이 다르다"는 걸 체감했다.
드래프트를 어디서 구하나
드래프트 모델을 꼭 따로 두란 법은 없다. 같은 계열의 작은 모델을 쓰기도 하고, 최근엔 별도 모델 없이 타깃 모델 자체에 예측 헤드를 덧붙이거나(self-speculative, Medusa 계열), 과거 등장한 n-그램을 재활용하는 방식도 있다. 어느 쪽이든 목표는 하나다. 싸게, 그러나 타깃과 잘 맞는 초안을 뽑는 것.
스페큘러티브 디코딩은 품질을 조금도 깎지 않고 속도를 산다. 대신 그 이득의 크기는 "드래프트가 얼마나 타깃을 잘 흉내 내는가"에 통째로 걸려 있다.
자주 묻는 질문
출력 품질이 드래프트 모델 때문에 떨어지지 않나요?
떨어지지 않는다. 이 기법의 핵심 보장은 최종 출력의 확률 분포가 타깃 모델 단독 생성과 동일하다는 것이다. 드래프트는 후보만 제안하고, 채택은 타깃의 분포로 엄격히 판정하며 어긋나면 타깃이 직접 정정한다. 그래서 속도만 얻고 품질은 그대로다.
항상 빨라지나요? 느려질 수도 있나요?
느려질 수 있다. 드래프트의 예측이 타깃과 잘 안 맞아 수용률이 낮으면, 초안 생성 비용과 검증 비용만 더해져 오히려 손해가 난다. 그래서 작업 성격(예측 가능한 텍스트인지)과 드래프트 선택이 중요하고, 도입 전 실제 워크로드로 이득을 측정하는 게 좋다.
드래프트 모델은 어떻게 골라야 하나요?
타깃과 예측 경향이 비슷하면서도 충분히 작고 빠른 모델이 이상적이다. 보통 같은 모델 계열의 작은 버전이 잘 맞는다. 너무 작으면 예측이 부정확해 수용률이 낮고, 너무 크면 초안 비용이 커져 이득이 준다. 이 균형을 데이터로 찾아야 한다.
한 번에 제안하는 토큰 수 k는 클수록 좋나요?
무조건은 아니다. k가 크면 잘 맞을 때 이득이 크지만, 뒤쪽 토큰일수록 어긋날 확률이 쌓여 버려지는 초안이 늘어난다. 텍스트의 예측성과 드래프트 정확도에 맞춰 적당한 k를 찾는 게 좋고, 흔히 몇 개 수준의 작은 값에서 균형이 잡힌다.

댓글 0