ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

层排除策略详解:为什么Qwen3.6-35B-A3B-Quark-INT4-G128要把gate与视觉编码器保留在FP16

层排除策略详解:为什么Qwen3.6-35B-A3B-Quark-INT4-G128要把gate与视觉编码器保留在FP16

【免费下载链接】Qwen3.6-35B-A3B-Quark-INT4-G128

项目地址:https://ai.gitcode.com/hf_mirrors/amd/Qwen3.6-35B-A3B-Quark-INT4-G128
点击查看免费下载

Qwen3.6-35B-A3B-Quark-INT4-G128 是 Qwen3.6-35B-A3B MoE 大模型经 Quark 框架 INT4 量化(W4A16,group 128)后的开源版本。它的核心工程亮点是一套层排除策略(layer excludes):绝大部分权重被压到 4-bit,但 MoE gate 路由层、视觉编码器等共 312 层被刻意保留在 FP16,最终把 ~67 GB 的模型压到 ~21 GB,同时把 Wikitext-2 困惑度(PPL)控制在 6.990 的近乎无损水平。🎯

层排除策略是什么:一张 312 层的 FP16 清单

所谓层排除,就是在量化配置里指定"哪些层跳过量化、保持原始精度"。本模型的全部排除清单写在 config.json 的quantization_config.exclude字段中,共312 条,构成如下:

模块排除条目数作用
视觉编码器model.visual.*111图像/视频特征提取(27 层 ViT + merger)
MoE 路由layers.X.mlp.gate40每个 token 选择 8 个专家的"调度器"
共享专家门控shared_expert_gate40共享专家输出权重
共享专家shared_expert.{gate,up,down}_proj120每个 token 都必经的专家
输出头lm_head1词表投影,决定最终 logits

量化部分则覆盖参数占比最大的MoE experts(256 个/层 × 40 层)+ 注意力投影(含 hybrid 架构中的linear_attn与full_attn),量化参数配置见 quantize_qwen36_rtn_uint4_perf.py 中的PERF_EXCLUDE白名单:

"PERF_EXCLUDE": ["lm_head", "model.visual.*", "mtp.*", "*mlp.gate", "*shared_expert_gate*", "*.shared_expert.*"]

一句话逻辑:参数多、可容忍噪声的层量化省钱;参数少、对精度敏感的层保留 FP16 保质量。

为什么 gate(路由器)必须保留 FP16?

MoE 模型的每一层都有 256 个专家,每个 token 只激活 8 个。gate 是一个 2048 → 256 的线性层,输出的是各专家的路由 logit——模型最终"听谁的",由这些 logit 的相对大小决定。⚖️

保留 FP16 的原因有三点:

  1. 路由决策对微小误差极度敏感。logit 之间的差值常常只有小数点后几位,INT4 的量化误差足以改变排序,让 token 被送去错误的专家。一旦路由"选错人",下游所有层的计算都被污染,且这种错误是离散的、不可平滑补偿的——比同量级的权重噪声伤害大得多。
  2. 参数量极小,量化收益近乎为零。gate 每层约 50 万个参数,40 层合计不到 1%,占的显存可以忽略不计,却承担着全局调度职责,"性价比"完全不值得压。
  3. 结果验证了这一点:保留 FP16 gate 后,本模型的 IFEval(prompt strict 0.3438)和 MuSR(0.4630)甚至超过了 BF16 基座模型(0.3235 / 0.4339)。推测原因是 FP16 路由让专家选择更稳定,在指令遵循与推理类任务上放大了 MoE 的组合能力。📈

为什么视觉编码器也保留 FP16?

Qwen3.6-35B-A3B 是图文多模态模型,视觉塔是 27 层 ViT(hidden 1152、FFN 4304),配置见 config.json 的vision_config。排除清单里 111 条model.visual.*条目覆盖了全部 27 个 block 的attn.qkv / attn.proj / mlp.linear_fc1 / mlp.linear_fc2,外加pos_embed与merger。

保留原因:

  • 图像信息是"一次性"输入。文本可以逐 token 生成、错误可被后续上下文稀释;而图像在输入端就被 27 层特征提取器压缩成固定数量的视觉 token,视觉塔里的任何量化噪声都会直接写进语言模型接收到的全部视觉信息,无法挽回。
  • 视觉特征分布更"尖"。ViT 的注意力权重与 FFN 中间激活常出现较大动态范围,RTN(round-to-nearest、无校准)这类直接取整的量化方式对这种分布尤其不友好。
  • 体量仍然很小。整个视觉塔约 4 亿参数,FP16 仅占不到 1 GB,对 ~21 GB 的总量影响有限,却守住了多模态任务的底线。🔍

其他 FP16 成员:shared_expert、lm_head 与 MTP

排除清单里还有三类容易被忽视的层:

  • 共享专家(shared expert):与"按路由激活"的 256 个专家不同,共享专家对每个 token 都 100% 激活,其输出直接进入主干,量化误差会无差别地叠加在每一个 token 上,因此 40 层的gate_proj / up_proj / down_proj(120 条)全部保留 FP16。
  • lm_head:词表投影层直接生成最终 logits。它决定了"下一个词是什么"的最后一步,且参数量相对词表规模不大,保留 FP16 是对生成质量最便宜的一道保险。
  • mtp.*(多 token 预测层):作为防御性排除项写入 PERF_EXCLUDE,若模型导出含 MTP 头,同样保持高精度,避免投机解码头精度劣化。

实现细节:通配符为什么必须展开成精确层名

一个很实用的工程细节:量化脚本里写的是通配符(*mlp.gate),但vLLM 加载时按精确层名匹配 exclude 列表,通配符会失效。因此导出后由 patch_gate_exclude.py 做后处理:

  1. 读取 config.json 的num_hidden_layers(本模型为 40);
  2. 自动识别前缀(多模态模型为model.language_model.layers);
  3. 把*mlp.gate展开为model.language_model.layers.0.mlp.gate….layers.39.mlp.gate共 40 个精确名称,写回 exclude 列表。

关键逻辑见 expand_gate_excludes。这也是最终 config 中恰好出现 40 条 gate 条目的由来。

量化效果:21 GB 权重,近乎无损的 PPL

量化脚本(01_quantize_rtn_int4.sh)采用int4_wo_128对称方案 + RTN(无校准数据),导出为 Quarkreal_quantized/pack_method=reorder格式。评测脚本 eval_ppl.py 基于 vLLM 离线跑 Wikitext-2,结果存于 eval/ppl_wikitext.json:

指标INT4(本模型)说明
Wikitext-2 PPL6.990296,815 tokens,145 chunks
权重体积~21 GB基座 FP16 约 67 GB
对照:UINT4(非对称)6.926对称 INT4 略保守但兼容更好

Open LLM Leaderboard v2 六项任务(完整结果在 eval/leaderboard/)中,本模型与 BF16 基座、UINT4 变体对比:

任务BF16 (base)INT4 (本模型)
IFEval prompt-strict0.32350.3438✅
MuSR0.43390.4630✅
MATH-hard0.52870.5083
MMLU-Pro0.59680.5687
BBH0.65460.6018
GPQA0.43370.3431

可以看出层排除策略的价值:指令遵循与推理类任务不降反升,知识类任务仅小幅回退,用约 3 倍的显存缩减换来了可部署性。推理时记得设置VLLM_USE_TRITON_AWQ=1(vLLM 加载示例见 README.md)。

核心文件索引

  • 量化入口脚本:scripts/quantize_qwen36_rtn_uint4_perf.py(PERF_EXCLUDE定义)
  • gate 排除展开补丁:scripts/patch_gate_exclude.py
  • 量化与评测命令:scripts/01_quantize_rtn_int4.sh、scripts/02_eval_ppl_int4.sh
  • 运行环境(ROCm/Strix Halo UMA):scripts/env.sh
  • PPL 结果:eval/ppl_wikitext.json;Leaderboard 结果:eval/leaderboard/

小结:Qwen3.6-35B-A3B-Quark-INT4-G128 的层排除策略本质是一次"精度预算分配"——把 INT4 的省显存红利集中花在占参数 99% 的专家与注意力层上,而 gate、共享专家、视觉编码器这些"小体量、高精度敏感"的关键路径保留 FP16。312 条排除清单 + 一个补丁脚本,换来 21 GB 可部署权重与近乎无损的生成质量,是 MoE 多模态模型 W4A16 量化中值得直接复用的完整实践。

【免费下载链接】Qwen3.6-35B-A3B-Quark-INT4-G128

项目地址:https://ai.gitcode.com/hf_mirrors/amd/Qwen3.6-35B-A3B-Quark-INT4-G128
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进