Qwen3.6-27B 에 MTP 가rafted 적용: Unsloth UD XL 기반 2.5 배 성능 향상
요약
본 기술 기사는 Qwen3-27B 모델에 Multi-Token Prediction (MTP) 기능을 GGUF 형식과 llama.cpp를 사용하여 로컬 환경에서 구현한 내용을 다룹니다. MTP는 추측적 디코딩(speculative decoding)의 한 형태로, 3개의 예측 단계를 통해 토큰 처리량을 약 2.5배 향상시키는 것이 핵심입니다. 이를 위해 Qwen3-27B의 Unsloth UD XL 양자화 모델에 MTP draft heads를 grafting하여 높은 효율성과 낮은 VRAM 오버헤드를 유지했습니다.
핵심 포인트
- Qwen3-27B 모델을 기반으로 Multi-Token Prediction (MTP) 기능을 GGUF 형식과 llama.cpp 환경에서 성공적으로 구현했습니다.
- MTP는 추측적 디코딩 기법 중 하나로, 토큰 처리량을 기존 대비 약 2.5배 향상시키는 높은 효율성을 보여줍니다.
- 모델의 기본 양자화(UD XL)를 유지하면서 MTP 레이어만 Q8으로 추가하여 VRAM 오버헤드를 최소화했습니다.
- llama.cpp의 PR #22673 기능을 활용하고 커스텀 빌드 과정을 통해, 공식 배포 전에도 로컬에서 고성능 추론이 가능하게 했습니다.
안녕하세요, 여러분! Qwen3-27B 의 양자화 GGUF 와 함께 Multi-Token Prediction (MTP) 를 구현해 왔으며, 결과는 매우 인상적입니다. 제가 만든 것은 다음과 같습니다: https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF
이것은 Qwen3-27B 의 Unsloth UD XL 양자화이며, MTP draft heads 를 위에 grafting 하여 Q8_0 로 적용했습니다. 기본 모델은 여전히 낮은 비트 양자화를 유지하고, 3 개의 MTP 레이어는 추측적 정확도를 보존하기 위해 Q8 으로 유지됩니다.
grafted GGUF 파일 (UD XL base + Q8 MTP), 추출한 원본 MTP 레이어 소스 (MTP_Q8_0.gguf), 그리고 convert.py 를 포함했습니다. 또한, 다른 모델에도 적용할 경우 참고용으로 이 gist 에서 수정한 grafting 스크립트도 포함되어 있습니다. 또한 커스텀 llama.cpp 의 전체 빌드 지침도 포함되어 있습니다.
Qwen3 는 3 개의 MTP 단계를 사용하여 훈련되었으며, 이는 각 forward pass 가 한 번에 4 개의 토큰을 예측한다는 것을 의미합니다. llama.cpp 의 메인 브랜치는 아직 MTP 를 지원하지 않으므로, 여전히 오픈된 PR #22673 에서의 speculative decoding 지원 기능을 가져와 master 위에 merge 하고, 이를 바탕으로 llama-server 를 빌드했습니다. 다음 명령어로 실행하세요: --spec-type mtp --spec-draft-n-max 3
결과: MTP 가 없는 동일한 UD XL GGUF 와 비교하여 약 2.5 배의 토큰 처리량이며, 대부분의 draft 토큰이 유지되는 높은 acceptance rate 를 보입니다. 이는 MTP heads 가 실제로 유용하며 단순히 계산만 소모하는 것이 아님을 의미합니다. Q8 MTP 레이어는 전체 모델에 비해 매우 작은 비율이기 때문에 VRAM 오버헤드도 거의 없습니다.
MTP 는 speculative decoding 에 있어 가장 큰 효율성 개선 중 하나이지만, 공식적인 Qwen3 배포 (SGLang 와 vLLM) 외에는 기본적으로 지원되지 않습니다. 이를 GGUF 와 llama.cpp 로 가져와서, 이미 사용하고 있는 도구로 로컬에서 실행할 수 있게 되었습니다. PR #22673 이 곧 출시될 것이며, 모든 것이 자동으로 작동할 것입니다. meantime, merge 과정은 간단합니다 (3 개의 git 명령어).
질문이나 실행에 도움이 필요하시면 언제든지 말씀해 주세요. 시도해 보시고 어떤 속도를 확인하셨는지 알려주세요!
Full step by step instructions 은 HuggingFace repo 에 있지만, 여기에는 간단한 버전이 있습니다:
# 1. MTP 지원으로 llama.cpp 빌드
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. GGUF 를 HF 에서 가져오기
# https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF
# 3. MTP 로 실행
./build/bin/llama-server -m your-model.gguf --spec-type mtp --spec-draft-n-max 3
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기