llama.cpp에 MTP 지원 추가 - Strix Halo에서 Qwen3.6 27B 모델 2.44배, RTX 3090에서 2.17배 성능 향상
llama.cpp MTP support landed - Qwen3.6 27B at 2.44× on a Strix Halo, 2.17× on a RTX 3090 rig
핵심 요약
llama.cpp에 MTP(다중 토큰 예측) 기능이 도입되어 주요 하드웨어에서 추론 속도가 최대 2.44배까지 향상되었습니다.
- MTP 기능 도입 — llama.cpp 메인라인에 다중 토큰 예측이 추가되어 추론 속도가 크게 개선됨.
- 성능 벤치마크 — Strix Halo와 RTX 3090 환경에서 Qwen3.6 모델을 테스트하여 최대 2.44배의 속도 향상을 확인함.
- MoE 모델 특성 — 35B-A3B와 같은 MoE 모델은 토큰당 연산량이 적어 MTP의 효율이 상대적으로 낮음.
- 최적 설정 — 하드웨어 환경에 따라 최적의 n값이 다르며, 3090과 Strix Halo는 n=3 설정에서 좋은 성능을 보임.
PR #22673 (커밋 4f13cb7)이 5월 16일 llama.cpp 메인라인에 MTP(다중 토큰 예측) 추측 디코딩 기능을 추가했습니다. 저는 두 개의 서로 다른 장비에서 이를 테스트했습니다.
Qwen3.6 27B, 단일 스트림 채팅, 온도 0, 5회 실행 중앙값:
Strix Halo (Framework 데스크톱, 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, 레이어 분할:
* Q8_0: 25.7 → 55.9 tok/s (2.17배, n=3)
Qwen3.6 35B-A3B (MoE):
* 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 옵션으로 활성화할 수 있습니다. 출력 결과는 동일한 시드와 온도에서 기준 모델과 바이트 단위로 동일합니다.
MTP는 MoE 모델에서 효율이 떨어지는데, 이는 35B 파라미터 중 토큰당 약 3B만 실행되기 때문입니다. 각 포워드 패스(forward pass)가 이미 저렴하기 때문에 N-1개를 절약하는 이득이 작습니다. 최적의 N값은 장비에 따라 다른데, 제한이 없는 3090은 Q4에서 n=2를 선호하고, 제한이 걸린 3090과 Strix Halo는 n=3을 선호합니다.
지난 스레드에서 이어진 몇 가지 후속 내용입니다:
- 제 이전 게시물의 3090 수치는 공개되지 않은 200W 제한(한 회로에 카드 4개를 꽂았을 때 차단기가 내려가는 문제)으로 인해 낮게 측정되었습니다. 3090 모델 26개를 350W와 450W에서 다시 벤치마크했는데, 밀집형(dense) 27-32B 모델은 +70%에서 +113%까지 성능이 향상되었습니다. 곡선과 전체 표가 포함된 상세 내용은 여기에서 확인하세요: https://calebcoffie.com/blog/how-much-do-power-limits-affect-llm-benchmark-tok-s
- 프롬프트 처리 속도(tok/s)와 프롬프트 토큰 열이 이제 벤치마크 페이지의 모든 행에 표시됩니다.
두 장비를 나란히 비교한 MTP 상세 내용, 빌드 명령어, 형태별 표: https://calebcoffie.com/blog/benchmarking-llama-cpp-mtp-on-strix-halo
실행별 원본 YAML: https://github.com/CCoffie/CalebCoffie.com/tree/main/content/benchmarks/runs


