거대 언어 모델(LLM)로 텍스트를 생성할 때는 구조적인 한계로 인해 성능을 제대로 끌어내기 어려운 경우가 많습니다. GPU는 뛰어난 연산 성능을 갖추고 있지만, 오토리그레시브 방식 특성상 토큰을 하나씩 순차적으로 생성해야 하다 보니 대부분의 자원이 놀게 됩니다. 매 토큰마다 전체 모델을 다시 실행하고, 가중치를 불러오며, 메모리까지 동기화해야 해서 지연은 커지고 하드웨어 활용도는 낮아집니다. 이런 비효율적인 반복은 시스템 전체 성능에도 부담을 줍니다.
Speculative decoding은 이런 한계를 효과적으로 극복할 수 있는 기술입니다. 여러 토큰을 한 번에 미리 예측하고 검증하는 방식으로, 결과를 더 빠르게 생성할 수 있어 AI 추론 속도와 응답성이 크게 향상됩니다. 출력 품질은 그대로 유지하면서도 지연 시간을 획기적으로 줄일 수 있다는 점에서 특히 유용합니다. 이 글에서는 speculative decoding이 어떻게 작동하는지, 어떤 상황에서 효과적인지, 그리고 고급 기법인 EAGLE-3를 NVIDIA GPU에서 어떻게 구현할 수 있는지를 살펴보겠습니다.
Speculative Decoding이란?
Speculative decoding은 추론 성능을 최적화하기 위한 기법으로, 고성능 대상 모델에 빠르고 가벼운 드래프트 메커니즘을 결합하는 방식입니다. 드래프트 모델이 여러 개의 다음 토큰을 빠르게 제안하면, 대상 모델은 이를 한 번의 포워드 패스로 검증한 뒤, 자신의 예측과 일치하는 가장 긴 접두어(prefix)까지 수용하고 그 이후부터 생성을 이어갑니다. 기존 오토리그레시브 방식이 매번 한 토큰씩 생성하는 데 비해, speculative decoding은 여러 토큰을 한꺼번에 처리할 수 있어 지연 시간을 줄이고 처리량은 높이면서도 정확도에는 영향을 주지 않습니다.
LLM은 매우 강력하지만, 그만큼 AI 하드웨어의 한계까지 밀어붙이는 경향이 있어 대규모 환경에서는 사용자 경험을 더 개선하기가 쉽지 않습니다. Speculative decoding은 일부 작업을 경량 모델로 분산함으로써 새로운 대안을 제시합니다.
이 방식은 마치 연구소의 수석 과학자가 빠르고 효율적인 조수에게 반복적인 실험을 맡기고, 자신은 검증과 방향 설정에 집중하는 구조와 유사합니다. 조수는 빠르게 체크리스트를 처리하고, 과학자는 필요할 때 개입해 정확성을 보장합니다.
Speculative decoding에서도 이 경량 모델이 여러 개의 다음 토큰 후보를 제안하고, 대상 모델은 이를 배치 단위로 검증합니다. 가장 큰 장점은 순차적인 연산 단계를 줄이고, 메모리 대역폭 병목을 줄일 수 있다는 점입니다. 특히 중요한 것은, 이 모든 과정이 출력 품질을 유지한 채 이루어진다는 점인데, 대상 모델의 검증 메커니즘이 기준 모델과 다른 결과는 모두 걸러내기 때문입니다.
DDraft-Target 방식과 EAGLE-3를 활용한 Speculative Decoding의 기본
이 섹션에서는 speculative decoding의 핵심 개념을 설명하며, 이 기법이 효과적인 이유가 되는 작동 메커니즘을 단계별로 소개합니다. 먼저 Transformer의 포워드 패스를 통해 시퀀스가 어떻게 병렬로 처리되는지를 살펴보고, 이후에는 draft-target 방식을 예시로 드래프트 생성, 검증, 샘플링 단계를 설명합니다. 이 기본 원리들은 전통적인 draft–target 방식은 물론, EAGLE-3 같은 고급 기법을 이해하는 데 필요한 맥락을 제공합니다.
Speculative Decoding의 Draft-Target 방식이란?
Draft-Target 방식은 speculative decoding의 전통적인 구현으로, 두 개의 모델이 함께 작동하는 시스템입니다. 주요 모델은 결과 생성을 가속하고자 하는 대형 고성능 대상(target) 모델이며, 이와 함께 동작하는 것은 훨씬 작고 빠른 드래프트 모델로, 보통 대상 모델을 distillation하거나 단순화한 버전입니다.
다시 실험실 과학자 비유로 돌아가 보면, Target 모델은 정확성을 보장하는 꼼꼼한 과학자이고, Draft 모델은 가능한 결과들을 빠르게 제안하는 조수 역할을 합니다. 그림 1에서는 이 협업 구조가 실제로 어떻게 작동하는지 보여줍니다. 예를 들어, Draft 모델이 네 개의 후보 토큰을 빠르게 생성하고, Target 모델은 그 중 두 개를 수용하며, 추가로 자신만의 토큰 하나를 생성하는 방식입니다.

Draft-Target 방식을 활용한 speculative decoding은 다음과 같은 단계를 거칩니다:
드래프트 생성
작고 효율적인 메커니즘이 여러 개의 후보 토큰(일반적으로 3~12개)을 생성합니다. 보통 동일한 데이터 분포로 학습된 별도의 소형 모델이 이 역할을 수행하며, 드래프트 모델은 일반적으로 대상 모델의 출력을 정답(ground truth)으로 삼아 학습됩니다.
병렬 검증
대상 모델은 입력 시퀀스와 드래프트 토큰 전체를 한 번의 포워드 패스로 동시에 처리하며, 각 위치에 대한 확률 분포를 계산합니다. 이 병렬 처리는 모델의 전체 연산 성능을 순차적 생성 중 대기 상태로 두지 않고 완전히 활용할 수 있다는 점에서 큰 효율성 향상을 제공합니다. 여기서 KV 캐시는 중요한 역할을 합니다. 기존 접두어(prefix)의 값들은 이미 계산되어 저장되어 있기 때문에, 이 검증 단계에서는 새롭게 제안된 토큰만 계산 비용이 들게 됩니다. 검증이 완료된 토큰들은 다음 생성 단계를 위한 새로운 접두어로 이어집니다.
거절 샘플링
거절 샘플링은 대상 모델이 확률 분포를 계산한 이후에 진행되는 결정 단계입니다.
이 단계의 핵심은 수락 판단 로직(acceptance logic)입니다. 그림 2에서 보여주듯, 이 로직은 드래프트 모델이 제안한 확률 P(Draft)와 대상 모델이 실제로 계산한 확률 P(Target)을 비교합니다.
예를 들어 첫 두 토큰인 “Brown”과 “Fox”의 경우, P(Target)이 P(Draft)보다 높기 때문에 두 토큰은 수락됩니다. 하지만 “Hopped”는 P(Target)가 P(Draft)보다 현저히 낮게 나타나 신뢰하기 어려운 예측으로 간주되어 거절됩니다.
이처럼 “Hopped”와 같이 수락되지 않은 토큰이 발생하면, 그 이후의 모든 드래프트 토큰도 함께 폐기됩니다. 그리고 모델은 마지막으로 수락된 토큰인 “Fox”부터 표준 오토리그레시브 방식으로 다시 생성 작업을 이어가며, 올바른 다음 토큰을 만들어냅니다.

드래프트 토큰이 대상 모델이 생성했을 결과와 일치할 때에만 수락됩니다. 이처럼 토큰 단위로 엄격하게 검증하는 과정을 통해 최종 출력이 대상 모델 단독 생성 결과와 완전히 동일하게 유지되며, 속도 향상은 얻되 정확도는 손실되지 않습니다.
수락된 토큰 수를 전체 제안된 토큰 수로 나눈 값이 수락률(acceptance rate)입니다. 수락률이 높을수록 속도 향상이 크고, 반대로 모든 드래프트 토큰이 거절되는 경우에는 대상 모델이 생성한 단일 토큰만 사용되어 표준 방식과 동일한 성능을 보이게 됩니다.
EAGLE 방식의 Speculative Decoding이란?
EAGLE(Extrapolation Algorithm for Greater Language-Model Efficiency)은 대상 모델의 출력 헤드 직전 hidden state로부터 feature를 추론하는 방식의 speculative decoding 기법입니다. Draft–Target 방식이 별도의 드래프트 모델에 의존해 토큰을 제안하는 것과 달리, EAGLE은 대상 모델의 hidden state로부터 feature를 받아들이는 경량 오토리그레시브 예측 헤드를 사용합니다. 이로써 두 번째 모델을 훈련하거나 실행하는 오버헤드를 없애면서도, 대상 모델이 하나의 포워드 패스로 여러 개의 토큰 후보를 검증할 수 있도록 합니다.
EAGLE-3는 이 기반 위에 구축된 세 번째 버전으로, 대상 모델의 feature로부터 다층 융합 표현을 생성합니다. 낮은 수준, 중간 수준, 높은 수준의 임베딩을 드래프트 헤드에 직접 전달합니다. 또한, 문맥을 인식하는 동적 드래프트 트리(EAGLE-2에서 도입된)를 활용해 연쇄적인 여러 예측 후보를 제안합니다. 이 후보 토큰들은 이후 대상 모델에 의해 병렬 트리 어텐션으로 검증되어, 정확하지 않은 분기를 효과적으로 가지치기 하며 수락률과 처리량을 동시에 향상시킵니다. 그림 3은 이러한 처리 흐름을 시각적으로 보여줍니다.

EAGLE 헤드란?
Draft–Target 방식처럼 별도의 소형 모델을 사용하는 대신, EAGLE-3는 대상 모델의 내부 계층에 경량 드래프팅 컴포넌트를 직접 연결합니다. 이 컴포넌트는 “EAGLE 헤드”라고 불리며, 일반적으로 경량 Transformer 디코더 레이어와 최종 선형 계층(linear layer)으로 구성됩니다. 본질적으로는 대상 모델을 구성하는 블록을 간소화한 축소판(miniature version)입니다.
EAGLE 헤드는 단순히 하나의 시퀀스만 생성하는 것이 아니라, 후보 토큰들로 구성된 전체 트리 구조를 생성할 수 있습니다. 이 트리 생성 과정은 입력 인스턴스에 따라 유동적으로 적응(instance-adaptive)하며, 드래프트를 진행하면서 자신의 예측 신뢰도를 평가하고, 신뢰도가 기준(threshold) 이하로 떨어지면 드래프팅을 중단합니다. 이 덕분에 EAGLE 헤드는 한 번의 포워드 패스만으로도, 예측 가능성이 높은 구간은 길게, 복잡한 구간은 짧게 다양한 생성 경로를 효율적으로 탐색할 수 있습니다.
DeepSeek-R1의 Multi-Token Prediction이란?
Multi-Token Prediction(MTP)은 DeepSeek의 여러 버전에서 사용되는 speculative decoding 기법으로, 바로 다음 토큰 하나만 예측하는 것이 아니라 여러 개의 미래 토큰을 한 번에 예측하도록 모델을 학습시키는 방식입니다. MTP는 멀티헤드 구조를 사용하며, 각 헤드는 토큰을 생성하는 역할을 수행합니다. 첫 번째 헤드는 첫 번째 드래프트 토큰을, 두 번째 헤드는 그 다음 토큰을, 세 번째 헤드는 또 그 다음 토큰을 예측하는 식으로 동작합니다. 이후 메인 모델이 이 제안들을 순서대로 검증하고, 자신의 예측과 가장 길게 일치하는 접두어까지만 수용합니다. 이 방식은 별도의 드래프트 모델 없이도 작동하기 때문에 구조가 단순하고 효율적입니다.
전반적으로 이 기법은 EAGLE 방식의 speculative decoding과 유사하게 여러 개의 후보 토큰을 제안하고 이를 검증하는 구조를 갖고 있습니다. 다만 제안 방식에는 차이가 있습니다. MTP는 멀티 토큰 예측에 특화된 여러 개의 헤드를 사용하는 반면, EAGLE은 하나의 헤드가 내부 feature 상태를 기반으로 후보를 구성합니다.
Speculative Decoding 구현 방법
NVIDIA의 TensorRT-Model Optimizer API를 활용하면, 자신이 보유한 모델에 speculative decoding을 적용할 수 있습니다. 아래 단계에 따라 Model Optimizer의 Speculative Decoding 모듈을 사용해 모델을 EAGLE-3 방식으로 변환할 수 있습니다.
1단계: Hugging Face 원본 모델 로드
import transformers
import modelopt.torch.opt as mto
import modelopt.torch.speculative as mtsp
from modelopt.torch.speculative.config import EAGLE3_DEFAULT_CFG
mto.enable_huggingface_checkpointing()
# Hugging Face 원본 모델 불러오기
base_model = "meta-llama/Llama-3.2-1B"
model = transformers.AutoModelForCausalLM.from_pretrained(
base_model, torch_dtype="auto", device_map="cuda"
)
2단계: EAGLE-3 기본 설정을 불러오고 모델 변환
# EAGLE-3 기본 설정 불러오기
config = EAGLE3_DEFAULT_CFG["config"]
# 대상 모델의 hidden size 및 vocab size와 일치시킴
config["eagle_architecture_config"].update(
{
"hidden_size": model.config.hidden_size,
"vocab_size": model.config.vocab_size,
"draft_vocab_size": model.config.vocab_size,
"max_position_embeddings": model.config.max_position_embeddings,
}
)
# EAGLE 기반 speculative decoding용으로 모델 변환
mtsp.convert(model, [("eagle", config)])
이 데모를 확장해 실전 환경에서 바로 활용 가능한 end-to-end speculative decoding 파인튜닝 파이프라인으로 구축하는 방법은, GitHub의 리포지토리 내 TensorRT-Model-Optimizer/examples/speculative_decoding에서 제공되는 실습 튜토리얼을 참고하시기 바랍니다.
Speculative Decoding이 추론 지연 시간에 미치는 영향
표준 오토리그레시브 생성 방식에서 발생하는 지연의 핵심 병목은, 각 단계마다 고정된 순차적 연산 비용이 요구된다는 점입니다. 예를 들어, 하나의 포워드 패스(가중치 로딩 및 토큰 생성)에 200밀리초가 걸린다면, 세 개의 토큰을 생성하는 데에는 항상 600밀리초(200ms × 3단계)가 소요됩니다. 사용자는 이 과정을 누적된 대기 시간으로 체감하게 됩니다.
Speculative decoding은 이처럼 반복되는 대기 시간을 하나로 통합할 수 있습니다. 빠른 드래프트 메커니즘을 활용해 두 개의 후보 토큰을 미리 예측하고, 이를 단일 250밀리초 포워드 패스에서 검증함으로써, 총 세 개의 토큰(드래프트 2개 + 대상 모델 생성 1개)을 250밀리초 만에 생성할 수 있습니다. 이 방식은 기존의 600밀리초보다 훨씬 빠른 응답 속도를 제공합니다. 이 개념은 그림 4에서 시각적으로 설명됩니다.

Speculative decoding을 적용하면, 사용자는 텍스트가 단어 하나씩 천천히 나타나는 것이 아니라, 여러 토큰 단위로 빠르게 묶여 출력되는 것처럼 느끼게 됩니다. 이 차이는 특히 챗봇과 같은 대화형 애플리케이션에서 더욱 뚜렷하게 나타납니다. 응답 지연이 줄어들면, 대화 흐름이 훨씬 매끄럽고 자연스럽게 느껴지기 때문입니다. 그림 5는 speculative decoding을 켰을 때와 끄고 사용했을 때의 가상 챗봇 응답을 비교한 예시를 보여줍니다.

Speculative decoding 시작하기
Speculative decoding은 이제 LLM 추론 속도를 높이기 위한 핵심 전략으로 자리잡고 있습니다. 기본적인 드래프트-타겟 방식과 병렬 검증부터, 고급 기법인 EAGLE-3에 이르기까지, 이 기술들은 순차적 토큰 생성 중 발생하는 유휴 연산 자원 문제를 근본적으로 해결하는 접근법입니다.
워크로드가 커지고, 빠른 응답성과 높은 시스템 효율성에 대한 요구가 높아지는 상황에서, speculative decoding은 더욱 핵심적인 역할을 하게 될 것입니다. NVIDIA TensorRT-LLM, SGLANG, vLLM과 같은 프레임워크와 함께 사용하면, 실제 환경에서도 더 높은 성능, 더 실용적인 구성, 더 나은 비용 효율성을 갖춘 모델을 배포할 수 있습니다.
지금 바로 시작해보고 싶다면, GitHub 리포지토리의 TensorRT-Model-Optimizer/examples/speculative_decoding 에 있는 Jupyter 노트북 튜토리얼을 참고해, 자신만의 모델에 speculative decoding을 적용해 보세요.
감사의 말
이번 포스트의 개발 및 작성에 도움을 주신 NVIDIA 엔지니어 Chenhan Yu와 Hao Guo에게 감사드립니다.