DA-技术分享-静态站
← 返回文章列表

本地模型性能翻倍!qwen3.6-MTP测试

2026-05-23 6 阅读 AI

本地模型性能翻倍!qwen3.6-MTP测试

前言

2026年5月17日,本地模型爱好者们迎来了一个喜大普奔的时刻,llama.cpp 的 #22763 终于合入,这意味着 MTP 正式在 llama.cpp 中可用了。

如果你不知道 MTP 是什么,可以自己去找资料,这里我只说最终效果:

MTP 能让本地模型在几乎没有精度损失的情况下,生成 token 的速度翻倍!

本文就来进行一下非专业测试,看看效果到底如何。

⚠️ 注意:本文未使用任何基准测试,测试结果仅代表当前测试环境及本次测试场景的执行效果,不具有通用性。

测试环境

项目 配置
CPU/GPU AMD AI Max+ 395
系统 Windows 11
内存 128GB(分给显存 64GB)
llama.cpp 版本 llama-b9190-bin-win-vulkan-x64
量化级别 Q4_K_XL(XL 版本比 M 和 S 慢一些,但更准确)
思考模式 关闭

测试模型

测试请求

使用 curl 发起相同测试请求:

curl.exe -X POST "http://127.0.0.1:8001/v1/chat/completions"   -H "Content-Type: application/json"   -H "Authorization: Bearer sk-no-key-required"   -d '{"model":"test","messages":[{"role":"user","content":"生成一个端午节的网页,鼠标可以点击,有动效"}],"max_tokens":256000,"stream":false}'

测试结果

Qwen3.6-35B-A3B(MoE 模型)

版本 SPEC_DRAFT_N_MAX 输出速度 提升幅度
非 MTP - 52.77 t/s 基准
MTP 2 61.52 t/s +17%
MTP 3 61.83 t/s +17%
MTP 4 56.91 t/s +8%

结论:35B-A3B 模型开到 SPEC_DRAFT_N_MAX=3 效果最佳,但提升幅度有限。(测出这个结果,我当时是很失望的,原本以为能破百)

Qwen3.6-27B(稠密模型)

版本 SPEC_DRAFT_N_MAX 输出速度 提升幅度
非 MTP - 11.79 t/s 基准
MTP 2 21.97 t/s +86%
MTP 3 23.30 t/s +98%
MTP 4 26.30 t/s +123%
MTP 5 25.73 t/s +118%

结论:27B 模型开到 SPEC_DRAFT_N_MAX=4 效果最佳,提升幅度相当可观!

汇总分析

在当前测试条件下:

  • 27B 模型:SPEC_DRAFT_N_MAX=4 时速度最快
  • 35B-A3B 模型:SPEC_DRAFT_N_MAX=3 时速度最快

不过最近我看了不少其他人的测试,发现 SPEC_DRAFT_N_MAX 这个参数的大小,对于不同模型和不同的量化版本,以及不同长度的上下文,甚至在不同的硬件设备上,性能曲线都不一样:

  • 有的没提升
  • 有的甚至负提升
  • 有的能提升150%
  • 也有的开到1就已经是最高的性能了

综合来看,SPEC_DRAFT_N_MAX=2 目前似乎是大多数人都认可的一个甜点位,不一定是性能最好,但可以无脑配置。

💡 对于刚需使用者而言,如果真想获得最极致的性能,与其花时间去测试去调参数,还不如去买几张 N 卡划算得多。

GPU 利用率观察

测试时,意外发现 GPU 利用率有差异:

模型 非 MTP 版本平均 GPU 利用率 MTP 版本平均 GPU 利用率 MTP 版本最高 GPU 利用率
Qwen3.6-35B-A3B 86% 72% 86%
Qwen3.6-27B 98% 90% 98%

可以很明显地观察到:

  1. MTP 版本的 GPU 利用率相比非 MTP 版本有所下降
  2. 但峰值是差不多的
  3. 在 GPU 利用率下降的情况下,吐的 TOKEN 反而变多了

从另一方面看,GPU 并没有火力全开,应该还有提升空间。

从这个利用率的波形也能明显发现区别,明显是新增了不同类型的运算负载,这和MTP目前的实现方式有关,具体我就不展开了(其实是我也没研究透,怕说错...)
image-GteF.png
image-qkrs.png

附:MTP 使用方式

以 Windows AMD 显卡环境为例:

1. 下载 MTP 模型

下载 Qwen3.6-27B-MTP-GGUF

💡 GGUF 并不能在原本的模型上直接开启 MTP,需要一个新的模型文件。建议通过 LM Studio 搜索下载,可以避免国内 HuggingFace 无法连接的问题。

2. 下载 llama.cpp

下载 llama.cpp b9180 或更高版本

⚠️ 根据网友们反馈,目前 llama.cpp 的最新版性能反而不及#22763刚合并时的版本

3. 解压安装包

注意根据你的平台架构选择,这里我用的是 "Windows x64 (Vulkan)"

⚠️ 至少这个时间点上,ROCm 在 Windows 上绝对不建议用于文本生成

4. 创建启动脚本

在 llama.cpp 解压后的目录里创建启动 bat 脚本(可根据需要自行调整参数):

@echo off
setlocal EnableExtensions EnableDelayedExpansion

REM Run from this script's directory so relative executable paths always work.
cd /d "%~dp0"

REM =========================
REM Model files (local paths)
REM =========================
set "MODEL_DIR=%USERPROFILE%\.lmstudio\models\unsloth\Qwen3.6-27B-MTP-GGUF"
set "MODEL_FILE=%MODEL_DIR%\Qwen3.6-27B-UD-Q4_K_XL.gguf"
set "MMPROJ_FILE=%MODEL_DIR%\mmproj-F32.gguf"

REM =========================
REM Server settings
REM =========================
set "HOST=127.0.0.1"
set "PORT=8001"
set "ALIAS=unsloth/Qwen3.6-27B-MTP-GGUF"
set "CTX_SIZE=262144"
set "N_GPU_LAYERS=999"
set "BATCH_SIZE=2048"
set "N_PARALLEL=1"

REM Recommended non-thinking defaults from Unsloth guide.
set "TEMP=0.7"
set "TOP_P=0.8"
set "TOP_K=20"
set "MIN_P=0.00"
set "PRESENCE_PENALTY=1.5"

REM MTP settings:
REM New flag (May 2026+) is --spec-type draft-mtp.
REM Unsloth notes draft-n-max=2 often gives best real speed/acceptance tradeoff.
set "SPEC_TYPE=draft-mtp"
set "SPEC_DRAFT_N_MAX=2"

REM Qwen3.6 reasoning mode control (new flag).
REM Use off for non-thinking mode; change to on if needed.
set "REASONING=off"

REM Auto-detect multi-slot flags:
REM   N_PARALLEL > 1 => enable --kv-unified and --cache-idle-slots
REM   N_PARALLEL = 1 => no extra flags (avoids "requires --kv-unified" warning)
set "EXTRA_FLAGS="
if %N_PARALLEL% GTR 1 (
  set "EXTRA_FLAGS=--kv-unified --cache-idle-slots"
)

echo.
echo [INFO] Starting llama-server for Qwen3.6 27B MTP...
echo [INFO] Endpoint: http://%HOST%:%PORT%/v1
echo [INFO] Model: %MODEL_FILE%
echo [INFO] MMProj: %MMPROJ_FILE%
echo.

if not exist "%MODEL_FILE%" (
  echo [ERROR] Model file not found:
  echo         %MODEL_FILE%
  exit /b 1
)

if not exist "%MMPROJ_FILE%" (
  echo [ERROR] MMProj file not found:
  echo         %MMPROJ_FILE%
  exit /b 1
)

if not exist "llama-server.exe" (
  echo [ERROR] llama-server.exe not found in:
  echo         %CD%
  exit /b 1
)

llama-server.exe ^
  --host %HOST% ^
  --port %PORT% ^
  --model "%MODEL_FILE%" ^
  --mmproj "%MMPROJ_FILE%" ^
  --alias "%ALIAS%" ^
  --gpu-layers %N_GPU_LAYERS% ^
  --flash-attn on ^
  --kv-offload ^
  --batch-size %BATCH_SIZE% ^
  --parallel %N_PARALLEL% ^
  %EXTRA_FLAGS% ^
  --ctx-size %CTX_SIZE% ^
  --temp %TEMP% ^
  --top-p %TOP_P% ^
  --top-k %TOP_K% ^
  --min-p %MIN_P% ^
  --presence-penalty %PRESENCE_PENALTY% ^
  --spec-type %SPEC_TYPE% ^
  --spec-draft-n-max %SPEC_DRAFT_N_MAX% ^
  --image-min-tokens 1024 ^
  --reasoning %REASONING%

set "EXIT_CODE=%ERRORLEVEL%"
echo.
echo [INFO] llama-server exited with code %EXIT_CODE%.
exit /b %EXIT_CODE%

5. 启动服务

双击执行这个 bat 脚本即可。

6. API 测试

curl.exe -X POST "http://127.0.0.1:8001/v1/chat/completions"   -H "Content-Type: application/json"   -H "Authorization: Bearer sk-no-key-required"   -d '{"model":"unsloth/Qwen3.6-27B-MTP-GGUF","messages":[{"role":"user","content":"返回测试成功"}],"temperature":0.7,"max_tokens":256000}'

其他MTP使用方案

  • 如果你有 NVIDIA 显卡,或者是 AMD 显卡跑在 Linux 上,可以用 Unsloth Studio,这个软件已经把 MTP 都配置好了。
  • 截止本文发布,LM Studio 0.4.14 测试版(runtime vulkan llama.cpp 2.15.0 测试版)已经支持 MTP 了,只是我实测下来性能不如直接用llama.cpp。

最后说下

这里绝不包含任何购买建议,只是个人感想:

我这台AMD AI MAX+395 笔记本上个月一万多买的,现在京东已经涨到三万了。

image-mbMD.png

真正用下来,显存的确是量大管饱,但显存带宽是远不及N卡和MAC的,模型测了一堆,快的模型蠢,聪明的模型慢,Qwen-27B算是最能打的了,只是11t/s的速度接到编程agent里实在太慢,有些agent还自带超时重试,这机器可顶不住并发,更别说预填充阶段那蜗牛一样的速度了。
前一段时间MAC和N卡各种黑科技提升性能,AMD这边都不能用,我甚至一度想再重新组一台带N卡的服务器,但看到价格、体积、运行噪音,还是迟疑了。
但现在有了MTP,跑Qwen-27B能有二十几个TOKEN每秒,这也算是真正能干活了。
不过如果让我再选一次跑本地模型的机器,我可能会买N卡。

AI
← 用 AI 造工具,而不是聊天——我如何把7亿小米 Mimo Token 花在刀刃上 【GaussDB】讨论下for update游标加锁的设计 →