在搭载RTX 4060(8GB)的笔记本电脑上运行Qwen3.6-35B-A3B——哪些有效、哪些无效以及一个令人意外的推测解码结果
摘要
详细记录了在8GB笔记本GPU上运行Qwen3.6-35B-A3B MoE模型的经历,涵盖有效优化(如--no-mmap和VRAM余量)、意料之外的发现(推测解码相比基准测试提升26%的速度)以及Windows和CPU瓶颈的陷阱。
TL;DR:我花了很长时间在一个只有8GB的小型笔记本GPU上调优一个35B的MoE模型。有三件事至关重要(--no-mmap、VRAM余量、关闭CPU密集的应用程序)。由于该模型的混合架构(Gated Delta Net),几个“显而易见”的优化毫无效果(TurboQuant、Flash Attention,甚至i-quants反而让性能更差)。而推测解码为我带来了+26%的提升,这与社区基准测试中发现的负面结果相矛盾。期待讨论和想法。
**配置信息**\
- GPU: RTX 4060 笔记本版, 8GB VRAM\
- CPU/RAM: i7-13620H, 32GB DDR5-5600 双通道\
- OS: Windows 11 (llama.cpp b9484, CUDA 构建)\
- 模型: Qwen3.6-35B-A3B (MoE, 总共35B / 活跃~3B), Q4_K_M (~20GB)\
- 关键细节: 该模型是混合架构——只有10个注意力层 + 40个Gated Delta Net(循环)层。这一事实解释了我的大部分结果。
**最终配置(“默认”配置)**\
-ngl 999 --n-cpu-moe 34 -c 65536 --parallel 1 --no-mmap \
--cache-type-k q4_0 --cache-type-v q4_0 \
--temp 0.6 --top-k 20 --top-p 0.95 --min-p 0 --presence-penalty 1.5 \
-md Qwen3.5-0.8B-Q4_K_M.gguf -ngld 99 --reasoning off
所有密集层(注意力/路由/归一化)在GPU上,专家在CPU上。正常时约39 tok/s生成速度,VRAM使用约5.4GB,剩余约2.5GB余量。
**实际有效的措施**
1. --no-mmap在将专家卸载到CPU时非常重要。使用mmap时,每个token都会导致专家张量的页面错误。提前将它们加载到RAM中显著提升了生成速度(我在空闲系统上测量到从~11 tok/s提高到~43 tok/s)。当使用CPU张量覆盖时,llama.cpp甚至会打印提示建议使用此选项。
2. 在Windows上,VRAM余量至关重要。当VRAM接近满时,NVIDIA驱动的“系统内存回退”会溢出到系统RAM而不是OOM。当空闲空间仅剩约740MB时,速度下降到约7 tok/s。保持至少1.5GB空闲即可修复。反直觉的是,将更少的专家放在GPU上(更高的--n-cpu-moe)有时反而更快,因为它避免了回退。
3. 真正的瓶颈是CPU,而不是GPU。专家在CPU上运行。关闭Discord和繁重的浏览器标签页使我的速度从~6 tok/s提升到~18 tok/s。GPU温度为59°C,从未出现过热降频。
**我测试并拒绝的优化**
1. TurboQuant KV量化(turbo3/turbo4,通过一个分支):有效,加载正常,但几乎无收益。原因:该模型在64K上下文下的KV缓存仅为~295 MiB(只有10个注意力层!)。压缩295MB毫无意义,因为7GB的专家占满了VRAM。
2. Flash Attention:无帮助(同样的原因——几乎没有注意力层需要加速)。实际上还略慢了一些。
3. IQ4_XS替代Q4_K_M:在相同条件下慢约35%(4.1 vs 6.3 tok/s)。i-quants有昂贵的查找表解码,在CPU上很慢;K-quants有优化的CPU内核(REPACK=1)。对于CPU卸载的专家,K-quant优于i-quant,即使文件更小。
4. --mlock:当与--no-mmap一起使用时会导致CUDA错(out of memory),并且在Windows上需要特殊权限。
**令人惊讶的发现:推测解码**
社区基准测试(包括一个专门的RTX 3090仓库)发现推测解码在Qwen3.6-35B-A3B上是净负面的。在我的设置中,它带来了+26%的提升(31→39 tok/s),使用词汇匹配的Qwen3.5-0.8B草案模型。我的理论:由于专家在CPU上,生成是CPU受限的,在一个批量的前向传递中验证N个草案token比N次单token传递能更好地分摊专家计算。在完全使用GPU的3090上,基础模型每个token已经很快,因此草案的开销占主导地位。有人在CPU卸载专家的场景中看到推测解码特别有帮助吗?
**Windows的额外陷阱**
1. 智能应用控制静默阻止了Open WebUI桌面应用的未签名DLL(win32job.pyd)。改为将Open WebUI移至WSL2。
2. 从WSL访问Windows主机的服务器IP在重启后会变化——通过WSL镜像网络修复,使localhost:8081保持稳定。
**向社区提出的开放问题**
1. 是否有人看到推测解码在CPU卸载的MoE上获胜(而在全GPU上为净负面)?
2. 对于混合注意力/循环模型(Gated Delta Net),KV缓存优化似乎无关紧要——什么才能真正带来改善?
3. 如何同时禁用思维过程并使用草案?--chat-template-kwargs enable_thinking:false 和 --reasoning-budget 0 在加载草案时都会报错“invalid argument”(也应用于草案的模板)。只有--reasoning off有效。
4. 对于这个目标模型,有没有比Qwen3.5-0.8B更好的草案模型选择?
乐于分享更多数字/配置。欢迎批评我的设置。
相似文章
在16GB显存+32GB内存下运行Qwen 3.8 - 写给贫民窟GPU玩家的实用/趣味指南
一位Reddit用户分享了如何在拥有16GB显存和32GB内存的系统上,通过激进量化及特定llama.cpp设置成功运行Qwen 3.8 Next MoE模型,实现了在有限硬件上高效运行大模型的效果。
在16GB显存的RTX 4080上运行Qwen3.8-27B的提速指南
本指南说明如何配置llama.cpp的DFlash2推测解码,以在配备16GB显存的RTX 4080 GPU上实现Qwen3.8-27B模型最高1.72倍的推理速度提升。
实验:Qwen3.8-2.4T-A95B 在 RTX 5090 + RTX 5060 Ti 上本地运行,约 0.80 tok/s
一个实验,使用 llama.cpp 在双消费级 GPU(RTX 5090 + 5060 Ti)上本地运行 Qwen3.8-2.4T-A95B MoE 模型,启用 MTP 推测解码后达到约 0.8 tok/s。
在 8GB 显存和 32GB 内存上运行 Qwen3.6 35b a3b,~190k 上下文
作者分享了一种高性能的本地推理配置,使用支持 TurboQuant 的修改版 llama.cpp,在硬件受限(8GB 显存、32GB 内存)的情况下运行 Qwen3.6 35B A3B,实现了 ~37-51 tok/sec 的生成速度,并支持 ~190k 上下文。
Qwen3.6-35B-A3B Q4 262k上下文,8GB 3070 Ti上可达+30tps
作者分享了在8GB RTX 3070 Ti上使用llama.cpp运行Qwen3.6-35B-A3B MoE模型,实现高达262k上下文、30+tps的详细调优技巧,并指出从Windows切换到Ubuntu Server后速度提升了25%。