Unsloth UD XL에 MTP를 이식한 Qwen3.6-27B: 미병합 llama.cpp PR을 통해 처리량 2.5배 향상
Qwen3.6-27B with MTP grafted on Unsloth UD XL: 2.5x throughput via unmerged llama.cpp PR
핵심 요약
Qwen3.6-27B 모델에 MTP를 이식하여 llama.cpp 환경에서 토큰 처리 속도를 2.5배 높인 사례.
- MTP 이식 — Qwen3-27B 모델에 MTP 헤드를 이식해 추론 성능을 극대화함.
- 처리량 향상 — llama.cpp의 미병합 PR을 활용해 기존 대비 2.5배 빠른 토큰 생성 속도를 달성함.
- GGUF 호환성 — Unsloth UD XL 양자화 모델에 MTP를 적용하여 로컬 환경에서도 쉽게 실행 가능함.
- 실제 성능 검증 — 테스트 결과 41tps에서 100tps로 비약적인 속도 향상을 확인함.
여러분, Qwen3-27B 모델에 양자화된 GGUF와 함께 다중 토큰 예측(MTP)을 적용하는 작업을 해봤는데 결과가 꽤 인상적입니다. 제가 만든 결과물은 여기 있습니다: https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF
이 모델들은 Unsloth의 UD XL 양자화 Qwen3-27B 모델에 MTP 드래프트 헤드를 Q8_0으로 이식한 것입니다. 기본 모델은 기존의 낮은 비트 양자화 상태를 유지하고, 3개의 MTP 레이어는 추론 정확도를 보존하기 위해 Q8 상태로 유지됩니다.
이식된 GGUF 파일(UD XL 베이스 + Q8 MTP), 제가 추출한 원본 MTP 레이어 소스(MTP_Q8_0.gguf), 그리고 다른 모델에도 적용해보고 싶은 분들을 위해 이 gist에서 가져와 수정한 convert.py를 공유합니다. 또한 커스텀 llama.cpp를 빌드하는 전체 지침도 포함했습니다.
Qwen3는 3단계 MTP로 학습되었기 때문에, 한 번의 순방향 패스로 4개의 토큰을 동시에 예측합니다. llama.cpp 메인 브랜치는 아직 MTP를 지원하지 않아서, 아직 열려 있는 PR #22673의 추론 디코딩 지원을 가져와 마스터 브랜치에 병합하고 llama-server를 빌드했습니다. 실행 시 --spec-type mtp --spec-draft-n-max 3 옵션을 사용하세요.
결과는 이렇습니다: MTP 없이 동일한 UD XL GGUF를 실행했을 때보다 토큰 처리량이 약 2.5배 증가했습니다. 대부분의 드래프트 토큰이 유지되는 높은 수용률을 보여주며, 이는 MTP 헤드가 단순히 연산만 낭비하는 것이 아니라 실제로 유용하게 작동함을 의미합니다. Q8 MTP 레이어는 전체 모델의 극히 일부이기 때문에 VRAM 오버헤드도 거의 없습니다.
MTP는 추론 디코딩을 위해 사용할 수 있는 가장 큰 효율성 향상 수단 중 하나이지만, 공식 Qwen3 배포판인 SGLang과 vLLM 외에는 사실상 지원되지 않습니다. 이번 작업으로 GGUF와 llama.cpp에서도 사용할 수 있게 되어, 기존에 사용하던 도구 그대로 로컬에서 돌릴 수 있습니다. PR #22673이 곧 병합되면 이 모든 것이 기본적으로 작동할 것입니다. 그전까지는 병합 과정이 간단합니다(git 명령어 3줄).
질문이 있거나 실행하는 데 도움이 필요하면 언제든 말씀해 주세요. 시도해 보시고 어떤 속도가 나오는지 알려주세요!
전체 단계별 지침은 HuggingFace 레포에 있지만, 짧은 버전은 다음과 같습니다:
# 1. Build llama.cpp with MTP support
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
git fetch origin
git fetch origin pull/22673/head:pr-22673
git checkout master
git reset --hard origin/master
git merge --no-ff pr-22673 -m "Merge PR #22673: llama + spec: MTP Support"
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release --target llama-server
# 2. Grab the GGUF from HF
# https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF
# 3. Run with MTP
./build/bin/llama-server -m your-model.gguf --spec-type mtp --spec-draft-n-max 3

