HF-07进阶16 min

Qwen3.6 27B 从20 到 184 tokens/s:单卡 4090 推理优化实战

量化 + MTP + D-Flash 三层优化叠加,RTX 4090 单卡从 20 tokens/s 一路飙到 184 tokens/s。附完整测试数据与生产级多并发方案。

AWQGGUFMTPD-FlashSpeculative Decoding多并发

前言:本地模型的里程碑时刻

2026 年,Qwen3.6 27B 发布的那一刻,本地模型正式进入了"核战级生产力"的行列。 但拿到手上跑一跑,4090 单卡 FP8 精度,输出速度只有 20 tokens/s——这个速度什么概念? 让它写段程序,刚调出函数声明名,你就已经受不了了,感觉还是自己写吧。

但经过三天的系统性优化,从 20 爬到了 184 tokens/s,翻了 9 倍。 本文把整个优化路径、测试数据和踩坑实录全部整理出来,给所有在4090 / 3090 上跑本地模型的开发者参考。

测试环境:单卡 RTX 4090 24G,Ubuntu 24.04, llama.cpp + WLM(WebLM)双框架对比

第一层:量化(20 → 45 tokens/s)

量化是最直接的手段。27B 模型 FP16 需要约 54GB 显存,4090 塞不下;但改成 4-bit 之后只需要 ~13GB, 显存带宽压力直接砍半,速度翻倍是基本操作。

1.1 GGUF 格式(llama.cpp)

GGUF 是 llama.cpp 的御用格式,量化选项极其丰富。实测推荐

Q4_K_M
这个级别—— 体积缩小4 倍,精度损失可接受,速度大约 45 tokens/s。

# 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 8

llama.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 倍多,这点儿精度损失完全可接受。

量化是第一优先级优化——它决定了你的卡到底能不能跑起来。24G 显存用户推荐 Q4_K_M 或 AWQ 4bit。

第二层: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 调用)。

MTP 最适合的是:代码生成(Code)、函数调用(Tool Calling)等逻辑固定、token 序列可预测的任务。 创意写作反而因为自由度太高,命中率下降,速度提升有限。

第三层: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 倍——两张卡就像双车道变四车道,高峰期通行能力翻倍。

用本地模型 + 一点功耗换来生产力是"急着用";用同样的卡、同样算力,通过优化把吞吐量提升几十倍才是真正的"急着想"。 现在 Coze 已经跑不了很多并发了,用本地模型跑高并发才是真正的解法。

特别显存优化: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 上完成。 这些优化还在持续推进中——本地算力的价值,正在被重新定价。

4090 去年买的时候只能跑 Qwen2.5 2.7B,现在能跑 Qwen3.6 27B 高并发。 它的价值已经改变了——显卡是资产,不是消耗品。 24G 显存以上的卡不会被淘汰;48G / 96G 的卡就是本地数据中心。

参考工具与框架

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。