언어 모델에 작은 예측 모듈을 덧붙여 다음 토큰 하나가 아니라 그 뒤의 토큰 여러 개까지 함께 예측하게 만드는 기법이다. 학습할 때는 같은 문맥에서 정답 신호를 더 주는 보조 과제로 쓰고, 추론할 때는 초안을 미리 써서 생성 속도를 높이는 데 쓴다.
| 구분 | 다음 토큰 예측 | 멀티 토큰 예측 |
|---|---|---|
| 한 위치에서 맞히는 것 | 다음 1개 | 다음 여러 개 |
| 학습 때 효과 | 기본 신호만 | 같은 문맥에서 정답 신호가 여러 개 |
| 추론 때 효과 | 한 번에 1토큰 | 여러 토큰을 미리 써 보고 검증 |
MTP 모듈이 다음 몇 토큰을 미리 써 두면, 본 모델이 한 번의 계산으로 그 초안을 검사한다. 맞으면 여러 토큰을 한꺼번에 얻고, 틀리면 틀린 지점부터 다시 만든다. 결과는 늘 본 모델이 정한 대로 나오기 때문에 추측이 빗나가도 품질은 그대로이고, 속도만 평소 수준으로 돌아온다. 구조로 보면 추측적 디코딩의 한 형태다.
MTP 모듈이나 전용 드래프터를 함께 배포하는 모델이 늘었다. vLLM 계열에서는 num_speculative_tokens로 한 번에 미리 쓸 토큰 수를 정한다. 젬마 4용 MTP 드래프터는 LiteRT-LM, MLX, Hugging Face Transformers, vLLM에서 쓸 수 있다. llama.cpp와 LM Studio에서도 이 기능을 켜서 로컬 생성 속도를 높이는 방법이 나와 있다.
각 개발사가 발표한 속도 향상 수치다. 애플 방식은 이미 학습된 모델에 파인튜닝으로 MTP를 덧붙인다.
사전학습에 MTP를 넣으면 전체 손실은 '다음 토큰 손실 + 가중치 × MTP 손실 평균'이 된다. 가중치를 너무 키우면 본래 목표가 흐려지므로 작은 값으로 둔다.
| 설정 (Megatron 기준) | 권장값 | 설명 |
|---|---|---|
mtp_num_layers | 1부터 | 2는 100B 이상 모델에서 메모리가 허락할 때 |
mtp_loss_scaling_factor | 0.1 | 보통 0.05~0.2 범위 |
뻔하게 이어지는 문장이나 코드에서는 초안이 잘 맞아 빨라지지만, 예측이 어려운 대목에서는 초안이 자주 버려진다. 예측 깊이를 늘리면 학습 메모리와 시간도 그만큼 늘어난다. 원 논문에서 4토큰이 가장 좋았던 결과도 코드 실험에서 나온 것이라 정답처럼 쓰면 안 된다. 내 작업으로 직접 속도를 재 보고 미리 쓸 토큰 수를 정하는 게 좋다.
가장 흔한 건 이미 배포된 MTP 드래프터를 켜서 생성 속도를 올리는 방식이다. 직접 모델을 학습하는 경우가 아니면, 보통은 옵션을 켜고 미리 쓸 토큰 수만 조절한다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 로컬 LLM 실행 | llama.cpp·LM Studio·MLX에서 드래프터를 켜서 코드 작성·긴 답변을 더 빨리 받는다 |
| 추론 서버 | vLLM에서 num_speculative_tokens를 바꿔 가며 내 요청 유형에 맞는 값을 찾아 응답 지연을 줄인다 |
| 모델 사전학습 | MTP 손실을 작은 가중치로 더해 학습 신호를 늘리고, 학습된 모듈은 추론 때 초안 작성자로 다시 쓴다 |