PR #22673 (commit 4f13cb7)이 5월 16일 llama.cpp 메인라인에 MTP (Multi-Token Prediction) 투기적 디코딩 (Speculative Decoding) 기능을 도입했습니다. 저는 두 개의 서로 다른 시스템에서 이를 테스트했습니다.
Qwen3.6 27B, 단일 스트림 채팅 (Single-stream chat), 온도 (Temperature) 0, 5회 실행의 중앙값:
Strix Halo (Framework Desktop, ROCm 7.0.2):
- Q4_K_M: 11.7 → 21.2 tok/s (1.81배)
- Q8_0: 7.4 → 18.1 tok/s (2.44배)
단일 RTX 3090 @ 450W (CUDA 12.9, 드라이버 590.26):
- Q4_K_M: 38.7 → 59.5 tok/s (1.54배, n=2)
듀얼 RTX 3090, 레이어 분할 (Layer-split):
- Q8_0: 25.7 → 55.9 tok/s (2.17배, n=3)
Qwen3.6 35B-A3B (MoE - Mixture of Experts):
- Strix Halo: 49.5 → 69.4 tok/s (1.40배)
- 3090: 120.0 → 148.3 tok/s (1.24배)
--spec-type draft-mtp --spec-draft-n-max N 명령어로 활성화할 수 있습니다. 출력값은 동일한 시드 (Seed)와 온도 (Temperature)에서 베이스라인 (Baseline)과 바이트 단위로 일치합니다.
MoE의 경우 토큰당 약 3B의 파라미터만 실행되기 때문에 MTP의 효과가 덜합니다. 각 순전파 (Forward pass) 비용이 이미 저렴하므로, N-1번의 순전파를 절약하는 이득이 상대적으로 작기 때문입니다. 최적의 N 값 또한 시스템에 따라 다릅니다. 전력 제한이 없는 3090은 Q4에서 n=2를 선호하며, 전력 제한이 있는 3090과 Strix Halo는 n=3을 선호합니다.
지난 스레드에서 이어지는 몇 가지 후속 사항:
두 시스템을 나란히 비교한 MTP 보고서, 빌드 명령어 및 형태별 (Per-shape) 표: https://calebcoffie.com/blog/benchmarking-llama-cpp-mtp-on-strix-halo
실행별 원본 YAML: https://github.com/CCoffie/CalebCoffie.com/tree/main/content/benchmarks/runs