2
Qwen
新人贴
精华
Qwen3.5 MoE + MTP 在 vllm 0.18 上 INT4 量化报 KeyError 的解法
2026-05-25 11:06:48
366
## Root cause vllm 的 MTP loader (`qwen3_5_mtp.py:load_weights`) 是 quant-unaware, 永远期待无 q 前缀的参数命名 (如 `experts.w13_weight`). 但 INT4 量化 (AWQ/GPTQ) MoE 走 `MoeWNA16Method`, 创建的是 `w13_qweight`/`w13_scales`/`w13_qzeros` (带 q 前缀, 因为需要区分 packed INT4 跟 fp16 weight). → MTP loader 找 `w13_weight` 时 params_dict 只有 `w13_qweight` → KeyError. 主模型 loader (`qwen3_5.py`) 有 `get_expert_mapping()` 这层 quant-aware 间接, 所以主模型正常. MTP loader 缺这层间接, 所以 MTP 启用就崩. ## 3 条解法 (任选其一) ### 1. (推荐) 直接用已经标了 mtp 不量化的 AWQ 模型 在 config.json 加这行让 vllm 把 MTP module 走 Unquantized backend: json "quantization_config": { "quant_method": "awq", "modules_to_not_convert": ["mtp"] } 现成可用: tclf90/Qwen3.5-122B-A10B-AWQ (modelscope) 2. 换 W8A8 量化 (整模型 INT8) W8A8 走 vllm Quark backend, 自然创建 w13_weight (无 q 前缀, 因为 INT8 用 weight + scale 模式). 现成: metax-tech/Qwen3.5-122B-A10B-W8A8 (metax量化版, 也兼容dcu) 影响范围 不只 AWQ, 任何走 MoeWNA16Method 的 INT4 量化都撞 AWQ / GPTQ-Int4 / compressed-tensors INT4 都中招. W8A8 不撞. 实测数据 (Qwen3.5-122B-A10B, TP=4, bench 128 req) │ 配置 │ TPOT │ Throughput │ MTP acceptance │ │ AWQ 裸跑 │ 281 ms │ 383 tok/s │ — │ │ AWQ + MTP (tclf90, 标 mtp 不量化) │ 185 ms │ 417 tok/s │ 87.11% │ │ W8A8 + MTP (metax) │ 88 ms │ 774 tok/s │ 80.08% │ (实测平台: 海光 K100-AI dcu, vllm 0.18.1)
全部评论(1)
只看楼主
A
aikur
1楼
那我有更多的疑问。我用Qwen3-235b-a22b-GPTQ-INT4模型,并没有启用MTP,但是实际运行的速度只有6tokens
然后抛开这个速度问题,在生成内容的时候只有前面一小段内容是正常的,然后就开始生成一些毫无意义的内容也跟这个有关系吗?
6/10
没有更多内容了
--
楼主
Level.3
0 帖子
楼主热帖
暂无数据