speculative decoding은 출력 품질을 바꾸지 않으면서 토큰 생성을 가속하는 LLM 추론 기법입니다. 더 작고 빠른 초안 모델이 여러 후보 토큰을 미리 제안하면, 더 큰 대상 모델이 한 번의 병렬 처리로 이를 모두 검증합니다. 유효한 예측은 유지하고 처음 불일치한 지점부터 다시 샘플링해 대상 모델의 정확한 출력 분포를 보존합니다.
대규모 언어 모델은 보통 토큰을 하나씩 생성해 응답합니다. 새 출력 단계마다 메모리에서 모델의 가중치를 읽어야 하므로, 메모리 대역폭을 기다리는 동안 가속기의 연산 능력이 충분히 활용되지 않습니다. speculative decoding은 순차적인 확인을 병렬 검증으로 바꾸어 단계당 토큰 하나라는 병목을 해소합니다.
표준 자기회귀 디코딩은 왜 느릴까요?
표준 자기회귀 디코딩은 토큰을 생성할 때마다 전체 모델에서 별도의 순전파가 필요해 느립니다. 따라서 연산 능력보다 메모리 대역폭이 처리 속도를 제한합니다.
언어 모델이 응답을 작성할 때 각 토큰은 앞에 나온 모든 토큰에 의존합니다. 표준 디코딩에서 70 billion(칠백억)개의 파라미터를 가진 모델은 첫 토큰을 생성하기 위해 고대역폭 메모리에서 가중치를 불러오고, 두 번째 토큰을 생성하기 위해 같은 가중치를 다시 불러오며, 이 주기를 수백 번 반복해야 합니다.
하지만 응답의 많은 토큰은 쉽게 예측할 수 있습니다. 기능어, 코드의 닫는 괄호, 흔한 표현, 정형 구문을 정확히 추측하는 데 거대 모델의 모든 추론 능력이 필요한 것은 아닙니다. 그래도 전체 응답에 대한 최종 판단은 큰 모델이 내리는 것이 바람직합니다. GPU와 TPU는 짧은 토큰 묶음을 토큰 하나를 처리하는 것과 거의 같은 실제 경과 시간에 병렬 처리할 수 있으므로, 토큰 하나씩 디코딩할 때는 추가 연산 능력이 놀고 있습니다. speculative decoding은 이 여유 병렬 처리 능력을 활용합니다.
speculative decoding은 단계별로 어떻게 작동할까요?
speculative decoding은 후보 토큰 초안 작성, 대상 모델을 이용한 병렬 검증, 일치하는 토큰 수락, 첫 거부 지점에서의 재샘플링이라는 네 단계의 반복을 응답이 완성될 때까지 실행합니다.
추론 엔진은 큰 대상 모델에 모든 토큰을 순차적으로 생성하게 하는 대신 훨씬 작고 빠른 근사 모델을 결합합니다. 이 모델은 보통 초안 모델이라고 부릅니다. 각 주기는 서로 다른 네 단계를 거칩니다.
- 후보 토큰 초안 작성: 현재 시퀀스에서 시작해 작은 초안 모델이 $K$개의 후보 토큰으로 이루어진 짧은 선행 탐색 구간을 하나씩 빠르게 생성하고, 각 위치의 확률 분포를 기록합니다.
- 병렬 검증: 큰 대상 모델은 원래 시퀀스와 초안으로 작성한 $K$개의 토큰 전부를 입력받아 순전파를 한 번 실행합니다. Transformer 아키텍처는 프롬프트를 처리할 때처럼 이미 알려진 토큰 시퀀스를 병렬로 평가할 수 있으므로, 대상 모델은 각 초안 위치에 대한 자체 확률 분포를 동시에 계산합니다.
- 초안 토큰 수락 또는 거부: 엔진은 $K$개의 초안 토큰을 왼쪽에서 오른쪽으로 살펴보면서, 흔히 speculative sampling이라고 부르는 정식 거부 샘플링 규칙을 이용해 각 단계에서 초안 모델의 확률과 대상 모델의 확률을 비교합니다. 탐욕 디코딩에서는 온도가 영일 때 초안 토큰이 대상 모델의 최우선 선택과 일치하면 수락합니다. 샘플링 모드에서는 대상 모델이 초안 모델보다 같거나 높은 확률을 부여한 토큰을 항상 수락하고, 그보다 확률이 낮은 토큰은 대상 모델과 초안 모델의 확률 비율에 비례해 수락합니다.
- 재샘플링과 보너스 토큰 생성: 첫 불일치가 위치 $m$에서 발생하면 해당 토큰과 그 뒤의 모든 초안 토큰을 버립니다. 두 모델의 확률을 고려해 조정한 잔여 분포에서 위치 $m$의 대체 토큰을 직접 샘플링합니다. $K$개의 초안 토큰이 모두 수락되면 대상 모델은 같은 병렬 처리에서 이미 위치 $K + 1$의 확률 분포를 얻었으므로 추가 비용 없이 보너스 토큰 하나를 더 샘플링할 수 있습니다.
거부와 재샘플링 규칙이 초안 모델의 실수를 수학적으로 상쇄하므로 speculative decoding은 무손실입니다. 여러 토큰을 다루는 각 단계는 대상 모델만 실행할 때와 정확히 같은 확률 분포에서 샘플을 생성합니다. 따라서 벤치마크 정확도, 추론 능력, 어조가 저하되지 않습니다.
speculative decoding은 실제로 얼마나 빨라질까요?
기초 연구에 따르면 적절한 초안 모델과 충분한 병렬 연산 능력을 갖춘 경우 speculative decoding은 대규모 언어 모델의 실제 경과 시간을 기준으로 약 2X에서 3X의 속도 향상을 제공합니다.
2022년 말과 2023년 초에 이 기법을 소개한 기초 논문들은 모델 가중치나 출력 분포를 바꾸지 않고 인코더-디코더 Transformer와 디코더 전용 Transformer 모두에서 상당한 지연 시간 개선을 입증했습니다.
| 연구 | 대상 모델 | 초안 구성 | 보고된 실제 경과 시간 기준 속도 향상 | 조건과 작업 |
|---|---|---|---|---|
| Leviathan et al. (2023) | T5-XXL (11B 파라미터) | T5-small (77M 파라미터) | 2X–3X (T5-small 구성 표에서는 최대 2.6X–3.4X) | 별도 수정 없는 T5X 구현으로 번역(EN-DE)과 요약(CNN/DM)을 argmax (temp 0) 및 표준 샘플링(temp 1)에서 수행. |
| Chen et al. (2023) | Chinchilla (70B 파라미터) | speculative sampling을 위해 학습한 4B 파라미터 초안 모델 | 2X–2.5X | TPU v4의 분산 구성에서 요약(XSum)과 코드 생성(HumanEval) 수행. |
두 연구에서 대상 모델과 초안 모델의 크기 차이에 주목하세요. T5-small은 T5-XXL의 대략 백분의 일 크기이고, 4B 초안 모델은 70B Chinchilla 모델의 작은 일부에 불과합니다. 초안 모델에서 $K$번의 순차 단계를 실행할 때 생기는 추가 부담이 대상 모델의 한 단계에 비해 매우 작도록 초안 모델은 충분히 작아야 합니다.
수락률은 무엇으로 결정되며 속도 향상은 왜 보장되지 않을까요?
speculative decoding의 속도 향상은 초안 모델이 대상 모델과 얼마나 자주 일치하는지 나타내는 수락률과 하드웨어에 남아 있는 병렬 연산 능력이라는 두 가지 주요 요인에 달려 있습니다. 따라서 순수한 속도 향상은 결코 보장되지 않습니다.
초안 모델의 예측이 계속 틀리면 시스템은 초안 모델에서 $K$번의 순차 단계를 실행하는 지연 비용을 치르고도 대상 모델에서 첫 토큰부터 거부당합니다. 이 최악의 경우 투기적 주기 하나가 재샘플링된 토큰 하나만 생성하면서도 대상 모델의 표준 단계보다 더 오래 걸립니다.
몇 가지 실질적인 변수가 speculative decoding이 추론을 빠르게 할지 느리게 할지 결정합니다.
- 초안 모델과 대상 모델의 정렬: 초안 모델은 대상 모델과 정확히 같은 토크나이저와 어휘를 공유해야 하며 학습 분포도 매우 비슷해야 합니다. 코드 자동 완성, 구조화된 JSON 출력, 예측하기 쉬운 표현의 번역은 매우 다양한 토큰이 동등하게 그럴듯한 고온도 창작보다 수락률이 높은 경향이 있습니다.
- 초안 모델의 추가 지연: 초안 모델 자체가 너무 크고 느리면 수락률이 높더라도 생성 속도는 빨라지지 않습니다. Leviathan et al.은 더 작은 T5-small 초안 모델이 더 큰 T5-base 및 T5-large 후보보다 전체 실제 경과 시간 기준 속도 향상에서 우수했음을 보여주었습니다. 단계마다 초안을 만드는 추가 부담이 훨씬 작았기 때문입니다.
- 선행 탐색 구간의 길이($K$): 선행 탐색이 너무 짧으면 한 번에 검증할 수 있는 토큰 수가 제한됩니다. 너무 길면 앞의 토큰이 거부될 때 버려지는 뒤쪽 토큰의 초안을 작성하느라 시간이 낭비됩니다.
- 사용 가능한 병렬 연산 능력(배치 크기에 따른 포화): speculative decoding은 유휴 연산 능력을 사용해 지연 시간을 줄입니다. 배치가 작고 지연 시간에 민감한 서비스에서는 가속기에 여유 연산 능력이 충분해 $K$개의 토큰을 거의 추가 시간 없이 병렬 검증할 수 있습니다. 동시 배치가 매우 커서 GPU의 연산 장치가 이미 완전히 포화된 경우, 요청당 $K$개의 검증 위치를 추가하면 처리 시간이 늘어나 속도 향상이 사라질 수 있습니다.
speculative decoding은 KV cache 및 프롬프트 캐싱과 어떤 관계가 있을까요?
speculative decoding은 생성 과정에서 출력 디코딩 단계만 가속합니다. 반면 KV cache를 이용하면 토큰 간 어텐션을 다시 계산하지 않아도 되고, 프롬프트 캐싱은 반복 입력의 프리필 속도를 높이고 비용을 할인합니다.
이 세 가지 최적화는 모두 Transformer 추론 지연 시간과 관련이 있어 개발자들이 요청의 수명 주기에서 각각이 어디에 해당하는지 혼동하곤 합니다.
- 프리필과 디코딩: 모든 LLM 요청은 두 단계로 나뉩니다. 프리필은 입력 프롬프트의 모든 토큰을 병렬로 처리해 초기 상태를 만듭니다. 이 단계는 이미 연산 능력에 의해 제한되며 토큰당 처리 속도가 빠릅니다. 디코딩은 출력 토큰을 단계별로 생성하며 메모리 대역폭에 의해 제한됩니다. speculative decoding은 디코딩 단계에서만 도움이 되며 긴 입력 프롬프트를 읽는 속도는 높이지 않습니다.
- KV cache의 역할: speculative decoding 중 대상 모델과 초안 모델은 각각 자체 KV cache를 사용합니다. 후보 토큰의 초안을 만들고 검증하는 동안 해당 토큰의 Key와 Value 상태가 캐시에 추가됩니다. 대상 모델이 위치 $m$ 이후의 초안 토큰을 거부하면 추론 엔진은 두 모델의 KV cache를 잘라 되돌림으로써 거부된 항목을 제거하고 다음 주기를 시작합니다.
- 프롬프트 캐싱과의 차이: 프롬프트 캐싱은 별도의 API 호출 사이에서 동일한 프롬프트 접두사에 대해 미리 계산된 KV cache 블록을 재사용합니다. 이를 통해 첫 토큰까지의 시간(TTFT)을 줄이고 입력 토큰 가격도 낮추는 경우가 많습니다. speculative decoding은 응답이 스트리밍되는 동안 토큰 간 지연 시간(ITL)을 줄입니다.
API 개발자와 자체 호스팅 사용자에게 speculative decoding은 무엇을 의미할까요?
API 개발자에게 speculative decoding은 별도의 청구 항목이 아니라 전체 스트리밍 지연 시간의 감소로 나타납니다. 자체 호스팅 사용자는 요청별 응답성을 개선하기 위해 추론 엔진에서 이를 직접 설정합니다.
speculative decoding을 사용하는 방식은 호스팅된 모델 엔드포인트를 호출하는지, 자체 GPU 환경을 관리하는지에 따라 다릅니다.
- 호스팅 API의 토큰당 요금은 거의 바뀌지 않음: 호스팅 AI 제공업체는 일반적으로 사용자 관점에서 처리된 입력 및 출력 토큰을 백만 개 단위로 청구합니다. 제공업체가 내부적으로 speculative decoding을 사용하더라도 거부된 초안 토큰은 서비스 엔진 내부에서 처리되며, 사용자는 최종 생성된 출력 토큰에 대해 모델의 표준 요금을 지불합니다. 대기 시간뿐 아니라 직접적인 API 요금을 낮추려면 프롬프트 엔지니어링, 배치 API, AI API 비용을 줄이는 실용적인 방법을 살펴보거나 AI 모델을 선택하는 방법을 결정할 때 요금을 비교하세요.
- 실시간 사용자 경험의 이점: 애플리케이션 개발자에게 speculative decoding의 강점은 사용자 경험입니다. 음성 에이전트, IDE 코드 도우미, 실시간 코딩 코파일럿부터 AI Studio Video 같은 창작 도구와 결합한 스크립트 파이프라인까지 다양한 대화형 제작 워크플로는 더 약한 모델로 바꾸지 않고 출력 토큰이 두 배 빠르게 도착하면 체감상 훨씬 민첩해집니다.
- 자체 호스팅 설정: 공개 가중치 모델을 자체 인프라에서 실행한다면 서비스 스택에서 speculative decoding을 직접 설정합니다. 대상 모델과 초안 모델을 모두 GPU 메모리에 불러오거나 초안 모델이 필요 없는 변형을 사용하고, 두 모델이 정확히 같은 토크나이저를 공유하도록 확인한 뒤, 일반적인 동시 요청 수준에 맞춰 선행 탐색 길이를 조정해야 합니다.
별도의 초안 모델이 항상 필요할까요?
이후 등장한 speculative decoding 변형들은 초안을 작성하고 검증하는 원칙은 그대로 유지하면서 별도의 작은 초안 모델을 학습하고 배포할 필요를 없앴습니다.
별도의 두 모델을 메모리에서 관리하고 대상 모델과 정확히 같은 토크나이저를 사용하며 행동도 정렬된 작은 모델을 찾는 일은 운영상 번거로울 수 있습니다. 이를 해결하기 위해 추론 연구자들과 서비스 프레임워크는 초안 모델이 필요 없는 여러 접근법을 도입했습니다.
- N-gram 및 프롬프트 검색을 이용한 초안 작성: 토큰 초안을 작성하기 위해 신경망을 실행하는 대신 엔진이 입력 프롬프트와 최근 생성된 출력에서 일치하는 텍스트 구간을 찾아 그 뒤의 토큰을 후보로 복사합니다. 문서를 요약하거나 코드를 편집하거나 컨텍스트 창에 이미 있는 인용문을 추출할 때 특히 잘 작동합니다.
- 다중 토큰 예측 헤드와 보조 계층: 독립된 전체 모델을 유지하는 대신 소수의 경량 예측 헤드나 초안 계층을 대상 모델의 은닉 상태에 직접 연결해 다음 몇 개의 토큰을 한 번에 제안할 수 있습니다.
- Self-speculative decoding: 일부 구성은 대상 모델 자체 계층의 일부를 사용해 후보 토큰을 생성하며 초안 작성 시 중간 계층을 건너뜁니다. 이후 전체 계층을 실행해 검증합니다.
후보 토큰을 어떤 방식으로 제안하든 핵심 보장은 같습니다. 전체 대상 모델이 후보를 병렬로 검증하고 수락된 모든 토큰에 자신의 정확한 확률 분포를 적용합니다.
자주 묻는 질문
speculative decoding은 모델 정확도나 출력 품질을 바꾸나요?
아니요. 표준 speculative decoding(speculative sampling)은 수학적으로 무손실입니다. 탐욕 디코딩에서는 대상 모델의 최우선 예측과 정확히 일치하는 토큰만 수락합니다. 온도를 사용하는 샘플링에서는 거부 및 잔여 분포 재샘플링 규칙이 생성된 시퀀스가 대상 모델의 표준 자기회귀 디코딩과 정확히 같은 확률 분포를 따르도록 보장합니다.
speculative decoding은 첫 토큰까지의 시간(TTFT)을 줄이나요?
아니요. 첫 토큰까지의 시간은 모델이 프리필 단계에서 입력 프롬프트를 읽고 맨 처음 출력 토큰을 내보내는 데 걸리는 시간입니다. 프리필은 이미 프롬프트 토큰을 병렬로 처리하므로 speculative decoding은 이후의 디코딩 단계만 가속합니다. 따라서 나머지 응답에 대한 토큰 간 지연 시간과 전체 완료 시간이 줄어듭니다.
배치 크기가 클 때 speculative decoding이 더 느려질 수 있는 이유는 무엇인가요?
speculative decoding은 GPU 또는 TPU의 여유 병렬 연산 능력을 이용해 여러 초안 토큰을 토큰 하나를 확인하는 것과 대략 같은 시간에 검증합니다. 서버가 매우 큰 배치의 동시 요청을 처리할 때는 가속기의 연산 능력이 이미 완전히 활용되고 있으므로 요청당 추가 초안 토큰을 검증하면 실제 실행 시간이 늘어나고 메모리 읽기 절약분보다 비용이 커질 수 있습니다.
어떤 작은 모델이든 어떤 큰 모델의 초안 모델로 사용할 수 있나요?
표준 토큰 단위 speculative decoding에서는 직접 사용할 수 없습니다. 후보 토큰 ID와 확률 분포가 두 모델 사이에서 정확히 대응되도록 초안 모델과 대상 모델은 호환되는 어휘와 토크나이저를 공유해야 합니다. 그래서 T5-small이 T5-XXL의 초안을 작성하는 경우처럼 보통 같은 모델 계열에서 짝을 찾습니다.
출처
- Yaniv Leviathan, Matan Kalman, and Yossi Matias — Fast Inference from Transformers via Speculative Decoding (arXiv:2211.17192, ICML 2023)
- Charlie Chen, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre, and John Jumper — Accelerating Large Language Model Decoding with Speculative Sampling (arXiv:2302.01318, 2023)



