Unsloth UD XL에 MTP가 접목된 Qwen3.6-27B: 병합되지 않은 llama.cpp PR을 통해 처리량 2.5배 증가

125.216.***.***
6

https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF

https://www.reddit.com/r/LocalLLaMA/comments/1t5ageq/qwen3627b_with_mtp_grafted_on_unsloth_ud_xl_25x/


이것은 Unsloth 에서 제공하는 Qwen3-27B 의 UD XL 양자화 버전으로, Q8_0 포맷의 MTP 드래프트 헤드가 이식된 모델입니다. 기본 모델은 기존과 동일한 저비트 양자화를 유지한 채, 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 는 스펙큐레이티브 디코딩에서 얻을 수 있는 가장 큰 효율성 향상 요소 중 하나이지만, 현재는 SGLang 및 vLLM 에서 공식 지원하는 Qwen3 배포판을 제외하면 사실상 지원되지 않고 있습니다. 이번 작업을 통해 GGUF 및 llama.cpp 에서도 MTP 를 사용할 수 있게 되었으며, 기존에 사용하던 도구 그대로 로컬 환경에서 실행할 수 있습니다. PR #22673 이 머지되면 곧 박스 밖에서 바로 사용 가능해질 것으로 기대됩니다. 그 전까지는 병합 과정이 간단합니다 (단순히 3 개의 git 명령어).

질문이 있거나 실행에 도움이 필요하시면 언제든 기꺼이 답변해 드리겠습니다. 직접 시도해 보셨다면 어떤 속도가 나오는지 알려주세요!

전체 단계별 안내는 HuggingFace 리포지토리에 자세히 나와 있지만, 간략 버전은 다음과 같습니다:

bash

# 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. HuggingFace 에서 GGUF 파일 다운로드

# 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


제 시스템은 rtx 3090 24g 시스템이라 조금 변경을 했습니다.

ExecStart=/usr/local/bin/llama-server \

-m /home/models/havenoammo/Qwen3.6-27B-MTP-UD-GGUF/Qwen3.6-27B-MTP-UD-Q4_K_XL.gguf \

--alias Qwen3.6-27B \

--host 0.0.0.0 \

--port 8000 \

--reasoning off \

--temp 0.7 \

--top-p 0.80 \

--top-k 20 \

--min-p 0.0 \

--presence-penalty 1.5 \

--repeat-penalty 1.0 \

--kv-unified \

--cache-type-k q4_0 \

--cache-type-v q4_0 \

--flash-attn on \

--fit on \

--ctx-size 163840 \

-n 32768 \

--api-key sk........ \

-ngl 99 \

--parallel 1 \

--mlock \

--threads-http 8 \

--spec-type mtp \

--spec-draft-n-max 3

참고로 v=q8_0 으로 하셔야 품질 손상이 없으실꺼에요. v=q4_0 으로 하면 속도는 이점이 있는데 품질 손상이 있을 수 있어서 코딩에는 적합하지 않아요.

추가 - q4_0 으로 변경했는데 괜찮은 것 같습니다. 일단 실사용 해보시고 조정해보세요

추가 2 - prefill 및 토큰 생성속도가 올라가니 코딩하는 맛이 납니다. ^^

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
8.35 -0.01

2026.07.10 KEB 하나은행 고시회차 1021회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!