12GB 显卡跑 35B 大模型不是梦:MTP 技术让 Qwen 35B A3B 飙到 80 tok/s

你有没有想过,一张 12GB 显存的 RTX 4070 Super 就能跑 35B 参数的大模型,而且还能达到 80 tok/s 的生成速度、128K 的超长上下文?这不是理论数据,而是 Reddit 用户 janvitos 在 r/LocalLLaMA 上实测的结果(帖子获得 667+ 赞)。

核心原理:通过 MTP(Multi-Token Prediction,多令牌预测)技术,llama.cpp 可以在每次推理时预测多个 token,大幅提升生成速度。配合 CPU offloading(-fitt 参数),12GB 显卡可以同时加载 35B 模型的主体 + MTP 草稿模型 + KV 缓存,实现 80%+ 的草稿接受率。

前提条件

硬件要求

组件 原帖配置 最低建议
GPU RTX 4070 Super 12GB 8GB VRAM(性能会降低)
CPU AMD Ryzen 7 9700X 任意 8 核以上
内存 48GB DDR5-6000 32GB DDR4/DDR5
系统 CachyOS(强烈推荐) Windows / Linux / macOS 均可

💡 关键技巧:原帖作者将显示器接在 iGPU(核显)上,独显不负责显示输出,这样 12GB VRAM 全部可用于推理。如果你的独显是主显卡,需要预留一部分 VRAM 给显示,-fitt 值可能需要调大。

软件要求

  • llama.cpp:最新版本(2026-05-19 起 MTP 支持已合并到 master 分支,直接下载 最新 release 即可)
  • 模型文件Qwen3.6-35B-A3B-MTP-GGUF(Unsloth UD XL 量化 + MTP 层)

概述

整个配置的核心思路是:

  1. MTP 技术:让模型在每次推理时预测多个 token,而非逐个生成
  2. CPU Offloading:模型主体太大无法完全放入 12GB VRAM,部分层卸载到 CPU
  3. -fitt 参数:精确控制 GPU 上保留多少空间给 MTP 草稿模型和 KV 缓存
  4. iGPU 显示:独显不负责显示,VRAM 全部用于推理

第一步:下载 llama.cpp

MTP 支持已于 2026-05-19 合并到 llama.cpp master 分支,直接下载最新 release 即可,无需手动编译。

前往 llama.cpp Releases 下载最新版本,根据你的硬件选择对应的后端:

  • NVIDIA 显卡:下载 cuda-12cuda-13 版本
  • AMD 显卡:下载 rocm 版本
  • Intel 显卡 / 纯 CPU:下载 vulkan 版本
  • macOS:下载 apple 版本

第二步:下载模型

1
2
3
4
5
6
7
# 安装 huggingface-cli(如果没有)
pip install huggingface-hub

# 下载 Q4_K_XL 量化版本(推荐,平衡质量和速度)
huggingface-cli download havenoammo/Qwen3.6-35B-A3B-MTP-GGUF \
Qwen3.6-35B-A3B-MTP-UD-Q4_K_XL.gguf \
--local-dir ./models

可用量化版本

量化 文件大小 说明
Q2_K_XL 12.3 GB 最小,质量有损
Q3_K_XL 16.5 GB 较小
Q4_K_XL 21.7 GB 推荐,平衡
Q5_K_XL 25.6 GB 较高质量
Q6_K_XL 30.5 GB 高质量
Q8_K_XL 36.6 GB 最高质量

💡 提示:虽然 Q4_K_XL 文件有 21.7GB,但通过 -fitt 参数,只有部分层在 GPU 上运行,其余在 CPU 上运行,因此 12GB VRAM 完全够用。

第三步:启动 llama-server

原帖完整命令(RTX 4070 Super 12GB)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
llama-server \
-m Qwen3.6-35B-A3B-MTP-UD-Q4_K_XL.gguf \
-fitt 1536 \
-c 131072 \
-n 32768 \
-fa on \
-np 1 \
-ctk q8_0 \
-ctv q8_0 \
-ctkd q8_0 \
-ctvd q8_0 \
-ctxcp 64 \
--no-mmap \
--mlock \
--no-warmup \
--spec-type draft-mtp \
--spec-draft-n-max 2 \
--chat-template-kwargs '{"preserve_thinking": true}' \
--temp 0.6 \
--top-p 0.95 \
--top-k 20 \
--min-p 0.0 \
--presence-penalty 0.0 \
--repeat-penalty 1.0

关键参数解析

参数 说明
-fitt 1536 最关键参数。指定在 GPU 上保留多少 MB 空间给 MTP 草稿模型和 KV 缓存。1536 = 1.5GB
-c 131072 上下文长度 128K tokens
-n 32768 最大生成长度 32K tokens
-fa on 启用 Flash Attention
-ctk / -ctv q8_0 KV 缓存键值使用 Q8 量化
-ctkd / -ctvd q8_0 MTP 草稿模型的 KV 缓存也用 Q8 量化
-ctxcp 64 上下文计算精度
--spec-type draft-mtp 启用 MTP 草稿模型
--spec-draft-n-max 2 每次最多预测 2 个额外 token
--no-mmap 禁用内存映射,提高稳定性
--mlock 锁定内存防止换出

💡 -fitt 调优:如果你的独显是主显卡(负责显示输出),1536 可能太小,导致 VRAM 不够。建议先试 2048 或 2560,逐步降低找到最佳值。

第四步:理解 MTP 的工作原理

什么是 MTP?

MTP(Multi-Token Prediction)是 Qwen3.6 模型的特殊功能。普通模型每次只预测一个 token,而 MTP 模型在每次推理时会同时预测多个 token。

为什么能加速?

llama.cpp 利用 MTP 草稿模型进行投机解码(Speculative Decoding):

  1. MTP 草稿模型快速预测 2-3 个 token
  2. 主模型验证这些预测是否正确
  3. 正确的预测直接接受,错误的从头生成
  4. 由于草稿接受率高达 80%+,实际速度大幅提升

--spec-draft-n-max 的取舍

速度 接受率 说明
2 较快 更高 推荐,最佳平衡点
3 略快 较低 接受率下降,整体收益不大

第五步:运行基准测试

使用官方 MTP 基准测试脚本验证性能:

1
2
3
4
5
# 下载基准测试脚本
curl -O https://gist.githubusercontent.com/am17an/228edfb84ed082aa88e3865d6fa27090/raw/7a2cee40ee1e2ca5365f4cef93632193d7ad852a/mtp-bench.py

# 运行基准测试
python3 mtp-bench.py

原帖基准测试结果

任务 预测 token 草稿 token 接受 token 接受率 速度 (tok/s)
code_python 192 132 125 94.7% 80.8
code_cpp 58 40 37 92.5% 81.8
explain_concept 192 152 114 75.0% 70.0
summarize 53 40 32 80.0% 75.4
qa_factual 192 144 119 82.6% 77.8
translation 22 16 13 81.2% 81.9
creative_short 192 160 111 69.4% 69.2
stepwise_math 192 144 119 82.6% 76.5
long_code_review 192 148 117 79.0% 73.2

平均速度约 76 tok/s,代码类任务最高可达 81.8 tok/s。

Windows 环境测试结果(来自评论区)

以下数据来自 Reddit 评论区的社区用户实测:

RTX 3060 12GB + R5 5600 + 32GB RAM(Windows)

任务 接受率 速度 (tok/s)
code_python 78.4% 40.3
code_cpp 92.5% 49.3
explain_concept 78.4% 41.6
summarize 80.0% 44.4
qa_factual 82.6% 45.6
stepwise_math 88.4% 46.7
long_code_review 80.8% 43.5

来源:Reddit 用户 ItsRektTime

RTX 3060 12GB + Ryzen 9 5950X + 40GB RAM(Windows 11 Pro)

任务 接受率 速度 (tok/s)
code_python 88.5% 38.9
code_cpp 72.8% 35.0
explain_concept 67.7% 33.7
qa_factual 72.8% 35.2
stepwise_math 76.4% 35.8

来源:Reddit 用户 RaspNAS(使用 Q3_K_XL 量化)

RTX 5060 Ti 16GB(Windows 11)

  • 无 MTP:约 55 tok/s
  • 有 MTP:约 66 tok/s
  • MTP 提升约 +15%

来源:Reddit 用户 the_masel

常见问题(FAQ)

Q: 8GB 显卡能跑吗?
A: 理论上可以,但需要更激进的 CPU offloading。-fitt 值需要调大(如 3000+),速度会明显下降。Reddit 评论中有用户尝试在 RTX 3060 6GB 笔记本上运行,但需要进一步调优。

Q: Windows 支持吗?
A: 支持。使用 Vulkan 后端或 CUDA 后端均可。Docker 方式在 Windows 上也可用(需安装 WSL2 + Docker Desktop)。

Q: MTP 会影响输出质量吗?
A: 不会。MTP 只影响生成速度,不影响模型本身的输出质量。草稿模型的预测会被主模型验证,错误的预测会被修正。

Q: 128K 上下文的实际体验如何?
A: 原帖作者设置了 128K 上下文(-c 131072),但实际使用中 32K 是最佳性价比区间。超过 32K 后,部分用户报告质量有所下降(Qwen3 从 95% 降至 75%),但这取决于具体任务。

Q: 需要 CachyOS 吗?
A: 不是必须的,但原帖作者强烈推荐。CachyOS 是一个针对性能优化的 Arch Linux 衍生版,对本地推理有明显的性能提升。

Q: 和普通 llama.cpp(无 MTP)相比快多少?
A: 根据评论区用户反馈,MTP 大约提升 15-30% 的 tok/s。一位使用 RTX 5060 Ti 16GB 的用户报告:无 MTP 约 55 tok/s,有 MTP 约 66 tok/s。

进阶技巧

1. 调整 -fitt 以适配不同显卡

1
2
3
4
5
6
7
8
9
10
11
# RTX 4070 Super(独显不显示):1536
-fitt 1536

# RTX 4070 Super(独显负责显示):2048-2560
-fitt 2048

# RTX 3060 12GB:1736
-fitt 1736

# RTX 4060 Ti 8GB:3000+
-fitt 3000

2. 降低上下文以提升速度

如果不需要 128K 上下文,减小 -c 可以释放更多 VRAM 给推理:

1
2
3
4
5
# 32K 上下文(推荐日常使用)
-c 32768

# 16K 上下文(更快)
-c 16384

3. 使用 --models-preset 简化配置

创建配置文件避免每次输入长命令:

1
2
3
4
5
6
7
# models/qwen35b-mtp.yaml
model: Qwen3.6-35B-A3B-MTP-UD-Q4_K_XL.gguf
fit-target: 1536
ctx-size: 131072
flash-attn: on
cache-type-k: q8_0
cache-type-v: q8_0

⚠️ 注意:评论区有用户报告 --models-preset 模式下 mtp-bench.py 会报 400 错误。如果遇到这个问题,改用命令行直接传参。

总结

通过本教程,你已经掌握了在 12GB 显卡上运行 Qwen3.6 35B A3B 的完整流程:

  1. ✅ 构建带 MTP 支持的 llama.cpp(或使用 Docker 预构建镜像)
  2. ✅ 下载 MTP 量化模型
  3. ✅ 理解 -fitt 参数的核心作用
  4. ✅ 启动 llama-server 并运行基准测试
  5. ✅ 掌握 -fitt 调优和上下文调整技巧

MTP 技术是本地推理的一个重要突破——它让 12GB 显卡也能流畅运行 35B 参数的大模型,速度达到 80 tok/s,上下文长度 128K。对于没有 24GB+ 显卡的用户来说,这是目前最佳的性价比方案。

📖 原帖:Reddit r/LocalLLaMA
📦 模型下载:HuggingFace
🔧 MTP PR:llama.cpp #22673
📊 基准测试:mtp-bench.py