작은 모델이 다음 토큰 몇 개를 먼저 짐작하고 큰 모델이 이를 한 번에 검사하는 방식으로, 답의 품질은 그대로 두고 생성 속도만 높이는 기법이다. 채팅이나 코드 자동완성처럼 사용자가 응답을 기다리는 서비스에서 지연을 줄일 때 쓴다.
| 항목 | 일반 디코딩 | 추측적 디코딩 |
|---|---|---|
| 한 번에 확정하는 토큰 | 1개 | 맞은 만큼 여러 개 |
| 출력 품질 | 기준 | 같음 |
| 추가 부담 | 없음 | 짐작 계산, 메모리 |
LLM은 토큰을 하나씩 순서대로 만든다. 이때 GPU는 계산보다 모델 가중치를 메모리에서 읽어 오는 데 대부분의 시간을 쓴다. 그래서 토큰 1개를 처리하든 여러 개를 한꺼번에 검사하든 걸리는 시간이 비슷하고, 추측적 디코딩은 이렇게 남는 계산 여력을 활용한다.
순서는 간단하다. 드래프트가 토큰 몇 개를 제안하면 큰 모델이 한 번의 계산으로 모두 검사하고, 맞은 앞부분까지 채택한다. 처음 틀린 자리는 큰 모델이 직접 고른 토큰으로 바꾼 뒤 다시 짐작을 시작한다. 이 검사 규칙 덕분에 큰 모델 혼자 만든 것과 같은 출력 분포가 수학적으로 보장된다.
| 방식 | 누가 짐작하나 | 특징 |
|---|---|---|
| 드래프트 모델 | 같은 계열의 작은 모델 | 가장 기본, 모델 하나를 더 띄움 |
| n-gram | 입력 속 문장을 그대로 재사용 | 추가 모델 없음 |
| Medusa | 큰 모델에 붙인 디코딩 헤드 | 별도 모델 없이 헤드만 학습 |
| EAGLE | 큰 모델의 중간 특징을 쓰는 헤드 | 적중률이 높은 편 |
어느 방식이든 최종 판정은 큰 모델이 한다.
vLLM은 서버를 띄울 때 --speculative-config에 방식, 드래프트 모델, 추측 토큰 수(num_speculative_tokens)를 넣으면 된다. TensorRT-LLM도 드래프트 모델, Medusa, EAGLE 방식을 지원한다. 드래프트로는 타겟과 토크나이저가 같은 같은 계열의 작은 모델을 고르는 것이 기본이다.
추측 토큰 수는 작은 값에서 시작해 조금씩 늘려 본다. 너무 많이 짐작하면 뒤쪽이 대부분 틀려 버리는 계산만 늘어난다. 요약이나 코드 수정처럼 입력을 많이 베끼는 작업이라면 n-gram 방식부터 써 볼 만하다.
| 상황 | 효과 |
|---|---|
| 한 사용자가 응답을 기다리는 채팅 | 큼 |
| 반복 패턴이 많은 코드, 정형 문서 | 큼 |
| 요청을 많이 묶어 처리하는 대량 배치 | 작거나 오히려 손해 |
| temperature를 높인 창작 글 | 적중률이 낮아 작음 |
배치가 크면 GPU가 이미 계산으로 바빠서 남는 여력이 없다. 드래프트 모델이 메모리를 차지해 KV 캐시 공간이 줄어드는 점도 따져야 한다. 실제 트래픽에서 켰을 때와 껐을 때의 지연과 처리량을 직접 재 보는 것이 가장 확실하다.
주로 LLM을 직접 띄워 서비스하는 쪽에서 추론 서버 설정으로 켠다. 출력이 같으니 사용자 쪽은 바뀌는 게 없고, 글자가 더 빨리 나오는 것만 체감된다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 자체 호스팅 채팅 서비스 | vLLM 서버에 같은 계열 작은 드래프트 모델을 붙여 답이 나오는 속도를 높임 |
| 코드 자동완성·코드 수정 | 기존 코드를 많이 베끼므로 n-gram이나 EAGLE로 짐작해 대기 시간을 줄임 |
| 문서 요약·사내 문서 검색 답변 | 입력 문서를 그대로 옮기는 부분이 많아 추가 모델 없는 n-gram부터 시험 |
| 대량 배치 처리 | 켰을 때와 껐을 때 처리량을 비교해 손해면 끔 |