문제는 자기회귀 디코딩이 느리다는 점입니다
LLMs generate text 1 token at a time. Each token requires a full forward pass through the model — every weight, every layer — before the next token can begin. As How inference works explains, this decode phase is memory-bandwidth-bound: the GPU reads gigabytes of weights from memory to produce a single token, then does it again for the next one. 컴퓨트 유닛은 대부분의 시간 동안 유휴 상태로 데이터가 도착하기를 기다립니다. GPU는 유용한 작업을 수행하지 않습니다 — 메모리를 기다리고 있습니다. 추측적 디코딩은 이 유휴 용량을 활용합니다. 순방향 패스당 1 개의 토큰을 생성하는 대신, 여러 토큰을 미리 추측하고 한 번에 모두 검증합니다.핵심 아이디어
추측 디코딩은 2 모델이 함께 작동하는 방식을 사용합니다.- 초안 모델 — 빠르고 작은 모델로 N개의 토큰을 미리 제안합니다 (일반적으로 4-8 토큰).
- 대상 모델 — 실제로 사용하려는 대규모 모델이 단일 순방향 패스에서 제안된 N개의 토큰을 모두 검증합니다.
추측 디코딩은 출력 품질을 변경하지 않습니다. 대상 모델이 여전히 모든 수용 결정을 내리므로 출력 분포는 일반적인 자기회귀 디코딩과 수학적으로 동일합니다.
N-gram 추측 디코딩
작동 방식
작동 방식
별도의 드래프트 모델을 사용하는 대신, n-gram 추측 디코딩은 현재 시퀀스의 마지막 N개 토큰을 살펴보고, 컨텍스트 앞부분에서 일치하는 패턴을 검색한 다음, 해당 패턴 뒤에 오는 토큰들을 제안합니다. 이는 기존 텍스트 내에서의 순수한 패턴 매칭입니다.예를 들어, 마지막 4 개의 토큰이
def calculate_total(이고 더 이른 컨텍스트에 def calculate_total(items): return sum(가 포함된 경우, 엔진은 items, :, return, sum를 다음 4 개의 토큰으로 제안합니다. 그러면 대상 모델이 이를 검증합니다.언제 사용하나요
언제 사용하나요
적합한 용도: 코드 생성, 구조화된 출력, 반복적인 텍스트, 템플릿, 로그 파싱.Worst for: creative writing, diverse open-ended responses, short contexts with no repeating patterns.N-gram 추측은 출력에 반복되는 구조(함수 시그니처, JSON 스키마, 보일러플레이트 코드)가 포함될 때 빛을 발합니다. 텍스트가 패턴 매칭에 너무 다양한 경우 조용히 실패합니다(낮은 수용률, 일반 디코딩으로 폴백).
구현
구현
드래프트 모델 추측 디코딩
작동 방식
작동 방식
같은 계열의 더 작은 모델이 후보 토큰을 생성합니다. 예를 들어, Llama-3.1-8B가 Llama-3.1-70B의 초안을 작성합니다. 작은 모델은 자체 자기회귀 생성으로 4-8개의 토큰을 제안한 다음, 큰 모델이 1번의 순전파로 모두 검증합니다.The acceptance rate — the fraction of draft tokens the target model agrees with — typically falls between 70% and 85% for well-matched model pairs. Higher acceptance means more speedup.
언제 사용하나요
언제 사용하나요
Best for 더 작은 모델을 실행할 VRAM 여유가 있을 때의 범용 생성.메모리 비용:두 모델을 동시에 로드해야 합니다. 8B 드래프트 모델은 대상 모델 위에 대략 4-5 GB(Q4 양자화 기준)를 추가합니다. 이에 따라 모델 적합성을 계획하세요.속도 향상 1.5-2.5x는 수락률과 초안 토큰 수에 따라 달라집니다. 초안 토큰이 6-8개를 넘어서면 수익 체감이 발생합니다. 시퀀스의 뒤쪽 토큰에서는 수락률이 떨어지기 때문입니다.
구현
구현
DFlash: 모델과 함께 제공되는 드래프터
대부분의 드래프트 모델 설정은 호환 가능한 작은 모델을 직접 찾고 페어링을 조정하게 합니다. DFlash는 Muse Glimmer 30B를 위한 Meta의 드래프터로, 그 단계를 건너뜁니다. 즉, 대상과 같은 릴리스에 포함되어 16 개의 토큰 블록을 제안하며, Muse Glimmer는 1 번의 순전파로 이를 검증합니다. Meta는 3.1x을 RTX 5090에서, 1.8x을 Apple M5 Max에서, 1.5x을 Apple M4 Max에서 보고합니다. 이 수치는 벤더가 보고한 것으로 아직 독립적인 재현이 없으므로, 이를 신뢰하기 전에 자신의 하드웨어에서 벤치마크하세요.모델 네이티브 추측 헤드 — MTP 및 DSpark
작동 방식
작동 방식
일부 모델 아키텍처는 단일 순방향 패스에서 여러 미래 토큰을 동시에 예측하도록 훈련됩니다. 모델 자체가 여러 후보 토큰을 한 번에 생성합니다 — 별도의 드래프트 모델도, 패턴 매칭도 없습니다. 모델 자체의 내부 표현이 추측 토큰을 생성합니다.이것은 외부 추측과 근본적으로 다릅니다. 멀티 토큰 헤드는 기본 모델과 공동으로 훈련되므로 동일한 맥락 이해를 공유합니다.
언제 사용하나요
언제 사용하나요
가장 적합한 대상 네이티브로 이를 지원하는 모델입니다. 구성 선택 사항은 없습니다. 모델이 MTP 헤드로 훈련된 경우 활성화할 수 있고, 그렇지 않은 경우에는 추가할 수 없습니다.현재 DeepSeek 예시로는,
DeepSeek-V4-Flash-0731은(는) 자체 DSpark 모듈을 공식 체크포인트에 번들로 포함합니다. 일부 Qwen 모델은 대신 MTP 헤드를 사용합니다.장점:별도의 드래프트 모델 체크포인트나 모델 페어 튜닝이 필요 없습니다.단점 특정 모델 학습이 필요합니다. MTP를 임의의 체크포인트에 적용할 수 없습니다.구현
구현
--speculative-draft-model-path를 추가하지 마세요.공식 0731 모델 카드는 vLLM과 SGLang 모두에 대해 DSpark를 문서화합니다. 하드웨어 지원은 여전히 제각각이므로, 일치하는 런타임 레시피를 사용하고 정확한 체크포인트를 벤치마킹하세요. 다음을 참조하세요. DeepSeek V4 Flash 0731 로컬 하드웨어.
EAGLE(더 큰 언어 모델
작동 방식
작동 방식
EAGLE는 대상 모델의 hidden states 위에 작은 “head” 네트워크를 학습시킵니다. 전체 드래프트 모델을 로드하는 대신, 대상 모델의 중간 표현에 경량 신경망을 연결하고 이를 사용하여 향후 토큰을 예측합니다.Because the head network reads the target model’s own internal state, it achieves higher acceptance rates (80-90%) than naive draft models. The head network is tiny compared to a full model — typically 5-10% of the target model’s size.
언제 사용하나요
언제 사용하나요
가장 적합한 경우 사용 가능할 때, EAGLE는 어떤 기법보다도 메모리 대비 속도 향상 비율이 가장 우수합니다.현재 상태 연구 단계이며 런타임 지원이 제한적입니다. vLLM과 SGLang에는 실험적인 EAGLE 통합이 있지만, 대부분의 모델 계열에 대해 사전 훈련된 EAGLE 헤드 체크포인트가 아직 널리 공개되지 않았습니다.When EAGLE support matures, expect: 2-3x speedup with only 5-10% memory overhead — significantly better than full draft models.
구현
구현
EAGLE head 체크포인트는 모델별 및 아키텍처별로 다릅니다. 이 기법을 사용하기 전에 정확한 대상 모델에 대해 게시된 EAGLE 체크포인트가 존재하는지 확인하십시오.
비교
N-gram
Extra memory: none
Speedup: 1.2-1.5x
Requires training: no
Runtime support: vLLM, llama.cpp
Best for: repetitive content, code, structured output
드래프트 모델
Extra memory: 20-30% extra
Speedup: 1.5-2.5x
Requires training: no (use a smaller model from the same family)
Runtime support: vLLM, llama.cpp
Best for: general-purpose generation with VRAM headroom
멀티 토큰 예측
Extra memory: none
Speedup: 1.5-2x
Requires training: yes (model-specific)
Runtime support: vLLM (select models only)
Best for: model-native heads such as DeepSeek V4 Flash 0731 DSpark and supported Qwen MTP variants
EAGLE
Extra memory: 5-10%
Speedup: 2-3x
Requires training: yes (head network)
Runtime support: experimental
Best for: best speedup-to-memory ratio when available
추측 디코딩을 사용해야 하는 경우
다음과 같은 경우에 사용하세요- 워크로드가 디코드 바운드입니다 — 대부분의 시간을 프롬프트 처리가 아닌 토큰 생성에 소비하는 긴 생성 작업이죠.
- 초안 모델을 위한 VRAM headroom이 있습니다 (대상 모델 외 최소 5-10 GB 여유 공간).
- You generate 구조화되거나 반복적인 출력 — 코드, 템플릿, JSON, 로그
- You serve a single user or low-concurrency workload
- 워크로드는 프리필 병목 상태입니다 — 짧은 출력과 긴 입력(요약, 분류)이 특징입니다. 추측 디코딩은 디코드 단계만 가속화합니다.
- 이미 VRAM 한도에 도달했습니다. 드래프트 모델이나 추가 KV 캐시 항목으로 인해 OOM이 발생할 수 있습니다. 용량 계획은 DGX Spark 메모리 튜닝을 참조하십시오.
- 고동시성 환경에서는 연속 배칭을 사용합니다. 대부분의 런타임에서 추측 디코딩은 효율적인 배치 스케줄링과 충돌합니다. 검증 패스는 요청별로 고정된 드래프트 길이를 가정하므로 배치 구성이 복잡해집니다.
실용적인 설정 가이드
vLLM의 N-gram 스펙큘레이션
가장 간단한 시작점 — 추가 다운로드도, 추가 메모리도 필요 없습니다--ngram-prompt-lookup-max 플래그로 설정됩니다. 값이 클수록 긴 컨텍스트에서 더 많은 일치 항목을 찾지만 초안 단계가 약간 느려집니다. 처음에는 5를 사용하고, 수용률이 낮으면 값을 높이세요.
vLLM의 드래프트 모델
VRAM이 충분할 때 더 높은 속도 향상을 위해OOM이 발생하면
--max-model-len를 줄이세요. 두 모델은 동일한 VRAM 풀을 공유하며, 드래프트 모델의 KV 캐시가 총량에 추가됩니다.llama.cpp의 N-gram 스펙큘레이션
--lookup-cache-static flag caches n-gram lookups across tokens, improving draft speed for repetitive patterns.
속도 향상 측정 방법
동일한 프롬프트를 두 번 실행하세요 — 한 번은 추측 디코딩과 함께, 한 번은 없이 — 그리고 초당 토큰 수를 비교하세요.x-tokens-per-second 헤더를 찾거나 usage.completion_tokens를 벽시계 시간으로 나누어 계산하세요.
체계적인 벤치마킹을 위해 vLLM에 내장된 벤치마크 도구를 사용하세요.
더 깊이 알아보기
디코드 및 프리필 성능
하드웨어에서 최대 처리량을 위해 프리필 및 디코드 단계를 튜닝하세요.
추론의 작동 원리
프리필, 디코드, 그리고 메모리 대역폭이 병목인 이유를 이해하세요.
DGX Spark에서 vLLM
추측 디코딩 지원을 포함한 최적 설정으로 vLLM을 구성하세요.
모델 적합성
대상 모델과 드래프트 모델이 VRAM에 맞는지 계산하세요.
배포를 벤치마킹하세요
로컬 LLM 배포를 위한 체계적인 벤치마킹 방법론.