Qwen3.6 27B 从20 到 184 tokens/s:单卡 4090 推理优化实战
量化 + MTP + D-Flash 三层优化叠加,RTX 4090 单卡从 20 tokens/s 一路飙到 184 tokens/s。附完整测试数据与生产级多并发方案。
前言:本地模型的里程碑时刻
2026 年,Qwen3.6 27B 发布的那一刻,本地模型正式进入了"核战级生产力"的行列。 但拿到手上跑一跑,4090 单卡 FP8 精度,输出速度只有 20 tokens/s——这个速度什么概念? 让它写段程序,刚调出函数声明名,你就已经受不了了,感觉还是自己写吧。
但经过三天的系统性优化,从 20 爬到了 184 tokens/s,翻了 9 倍。 本文把整个优化路径、测试数据和踩坑实录全部整理出来,给所有在4090 / 3090 上跑本地模型的开发者参考。
第一层:量化(20 → 45 tokens/s)
量化是最直接的手段。27B 模型 FP16 需要约 54GB 显存,4090 塞不下;但改成 4-bit 之后只需要 ~13GB, 显存带宽压力直接砍半,速度翻倍是基本操作。
1.1 GGUF 格式(llama.cpp)
GGUF 是 llama.cpp 的御用格式,量化选项极其丰富。实测推荐
Q4_K_M# llama.cpp Q4_K_M 量化
llama-gguf-quantize ./models/qwen3.6-27B-F16.gguf qwen27b-q4km.gguf Q4_K_M
# 推理速度测试
./llama-cli -m qwen27b-q4km.gguf -p "You are a helpful assistant" -c 2048 -t 8llama.cpp 还有一个优势:支持把显存卸载到内存(offload)。24G 不够就跑,把一部分参数放到 RAM 里, 速度会慢一些但至少能跑起来,适合显存刚好不够的场景。
1.2 AWQ 格式(WLM 框架)
AWQ(Activation-aware Weight Quantization)相比 GGUF,精度损失更小,尤其在高并发场景下优势明显。 4-bit AWQ 在 WLM 上跑到 ~48 tokens/s,llama.cpp Q4 约 45 tokens/s,差距不大。
# AWQ 4bit 量化
python -m awqquantize ./models/qwen3.6-27B-F16 --wbits 4 --zero-point
# WLM 推理
lmplz-evaluate --model qwen27b-awq-4bit --concurrency 10但 llama.cpp 不是为高并发设计的,单并发场景下表现稳定。多并发推荐用 WLM + AWQ。
1.3 精度损失到底有多少?
这是大家最关心的问题。实测用 3 个数据集 + 45 个场景测试 AWQ Q4 对比 FP8 基准: 大部分场景基本感受不到差异,偶尔会有少量错误输出。但速度提升了 2 倍多,这点儿精度损失完全可接受。
第二层:MTP 多 Token预测(45 → 72 tokens/s)
量化已经是老套路了,真正的惊喜来自 MTP。
2.1什么是 MTP?
MTP(Multi-Token Prediction)是"投机解码"的改进版。传统自回归生成是一个 token 一个 token 往外吐, GPU 大部分时间在"等数据",属于算力空转。MTP 相当于让 GPU 在等待的这段时间里同时预测后面的 N 个 token, 然后做一次验证——对了保留,错了丢弃。
N=1 表示一次猜 1 个,N=5 表示一次猜 5 个。猜对越多,速度提升越大。
2.2 WLM + AWQ + MTP 测试数据
实测 WLM(AWQ 4bit)在 4090 上的 MTP 效果:
AWQ 4bit(无 MTP): ~48 tokens/s
+ MTP N=1: ~70 tokens/s (提升 +46%)
+ MTP N=3: ~90 tokens/s (提升 +88%)
+ MTP N=5: ~108 tokens/s (提升 +125%)RTX 3090 上的 MTP 效果(因为是 Ada Lovelace 架构,有 MTP 硬件优化):
FP8 单卡(无 MTP): ~20 tokens/s
+ MTP N=1: ~38 tokens/s (提升 +90%)
+ MTP N=3: ~60 tokens/s (提升 +200%)
+ MTP N=5: ~72 tokens/s (提升 +260%)
AWQ + MTP N=5: ~108 tokens/s (从 FP8 的 20 翻了5.4 倍)llama.cpp 也支持 MTP,但实测提升不明显——可能因为测试场景是单并发, 每次都是全新上下文,不适合 llama.cpp MTP 的适用场景(连续上下文 / 多轮对话 / 多 Agent 调用)。
第三层:D-Flash 激进优化(108 → 184 tokens/s)
到这里已经很满意了?不,还有更激进的——D-Flash。
3.1 D-Flash 原理
MTP 虽然一次猜多个,但本质上还是"沿着一条线走",猜错了就全废了。 D-Flash 借用了 AI 生图领域的扩散模型思想:先生成一小块模糊的候选文本,然后反复去噪直到概率足够清晰。 它不依赖单条预测路径的准确性,而是通过扩散过程探索多条可能的路径。
3.2 D-Flash²:双层加速
D-Flash² 是 D-Flash 的进阶版。它先用扩散模型一次生成一小块候选文字,然后同时探索 22 条候选路径, 同时下注,只要有一条走通就算成功——用扩散的方式生成整片"森林",一次性找到最佳路线。
3.3 性能数据
官方 LmFlexbox 实现在 RTX 3090 上跑出了 2707 tokens/s 的恐怖数字。实测环境4090:
D-Flash²最佳配置: ~184 tokens/s
lmflexbox + AWQ + D-Flash²: ~141 tokens/s生成速度有一定随机性(扩散模型特性),实测在 144-184 tokens/s 之间波动,但平均表现已经远超其他方案。
3.4 D-Flash 的限制
目前 D-Flash² 还有几个现实问题:
1. 不支持多并发
2. 尚未合并到 llama.cpp 主线
3. Tool Calling(函数调用)场景下经常中断,效果不好
4. 生成结果有一定随机性,需要后处理所以目前生产环境推荐用 WLM + AWQ + MTP 的组合,稳定可靠且支持多并发。
生产级多并发方案
单并发跑到 184 tokens/s 是炫技,生产真正关心的是吞吐量。 WLM + AWQ + MTP N=5 在 10 并发下实测能跑到 ~500 tokens/s 的总吞吐。
# WLM 多并发推理配置
lmplz-evaluate \
--model qwen27b-awq-4bit \
--concurrency 10 \
--mtp-n 5 \
--batch-size 16这里的关键洞察是:多并发场景下,多张卡的利用率问题。双卡 4090 的单并发只比单卡高10%,因为瓶颈在卡间通信(P2P 带宽不足)。 但 10+ 并发时,双卡吞吐量就是单卡的 ~2 倍——两张卡就像双车道变四车道,高峰期通行能力翻倍。
特别显存优化:KV Cache 4-bit 量化
放到最后说,但极其重要——特别显存层(Specialization Layer)。 把 KV Cache 从 FP16 压缩到 3-4 bit,压缩比接近 4 倍,精度损失几乎可以忽略不计。
注意:这不是权重量化,是 KV Cache 量化。过去几乎不敢对 KV Cache 做量化,因为质量损失是灾难性的。 但 2026 年的新方法实现了"压缩4 倍、精度几乎不损失",效果惊人。
#24G 4090 + KV Cache 4-bit 量化
#原来2K 上下文勉强,现在可以跑到 2K 上下文 + Q4 模型
lmplz-evaluate --model qwen27b-q4km --kv-bits 4这意味着 24G 显存的用户也可以跑 Q4 模型 + 2K 上下文了。 VLM(视觉语言模型)已经支持,LmFlexbox 也支持,实用性大幅提升。
完整优化路径总结
RTX 4090 单卡 Qwen3.6 27B 推理优化路径:
基础(FP8 单卡): ~20 tokens/s
+ Q4 量化(AWQ/GGUF): ~45-48 tokens/s (+125%)
+ MTP N=5: ~72-108 tokens/s (+360%)
+ D-Flash²: ~144-184 tokens/s (+820%)
+ 多并发 10路: ~500 tokens/s(总吞吐)从 20 到 184,9 倍提升,全部在单卡 4090 上完成。 这些优化还在持续推进中——本地算力的价值,正在被重新定价。
参考工具与框架
llama.cpp: https://github.com/ggerganov/llama.cpp
WLM: WebLM 框架(并发推理优化)
AWQ: https://github.com/mit-han-lab/awq
LmFlexbox: D-Flash² 实现(激进优化)
LmDeploy: 国产生产级框架,多并发稳定如果你追求极致速度,选 LmFlexbox + D-Flash²;如果追求生产稳定,选 LmDeploy / WLM + AWQ + MTP。