尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
AMCT 量化适配 Qwen3.5-3.6 实战:混合 Attention MoE 直转、Qwen3.6 零改动复用与 27B Dense 的 A4W4 MXFP4
AMCT 量化适配 Qwen3.5-3.6 实战混合 Attention MoE 直转、Qwen3.6 零改动复用与 27B Dense 的 A4W4 MXFP4【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct本文基于 AMCT 仓库内部案例库中的 Qwen3.5-35B-A3B / Qwen3.6-35B / Qwen3.6-27B 适配个案系统讲解这类线性 全量混合 Attention Packed MoE模型的量化适配路径如何识别模型触发信号、如何用三步闭环验证 adapter 正确性、如何规避 DeepSeek MLA 接口误用等家族专属陷阱并给出经 PPL 验证的 W8A8-int / A4W4 MXFP4 量化结论与完整精度速查表帮助你在同系列新模型上快速复用已有 adapter。结构特征与触发信号Qwen3.5-35B-A3B 与 Qwen3.6-35B 属于同一结构家族其核心结构特征决定了适配路径的选择混合 AttentionQwen3_5Moe的 40 层 decoder 中layer_types按linear×3 full的模式重复排布即每 3 层linear_attentionGatedDeltaNet类门控线性注意力后接 1 层full_attention。两种 attention 形态不能套用同一条量化路径。Checkpoint experts 已 packed与Qwen3-235B一类需要在 adapter 内把展开的 per-expert 权重重组为 packedgate_up_proj/down_proj不同35B-A3B 的 checkpoint 上 experts 已经是 packed 布局无需重组加载时只需做 key 对齐即可。Qwen3.6 Qwen3.5 纯子类Qwen3_6Moe(Qwen3_5Moe): pass—— 3.6 与 3.5 结构完全相同零 override仅注册名与权重不同。仓库源码 qwen3_6_moe.py 可以印证这一点整个文件除 license 头外只有注册装饰器和一个空子类。Qwen3.6-27B 是 Densemodel_typeqwen3_5、architecturesQwen3_5ForConditionalGeneration64 层 decoder复用qwen3_5adapter与 MoE 分支无关。触发信号拿到新 checkpoint 时先对照config 的layer_types同时含linear_attention与full_attentioncheckpoint experts 已 packed即为 35B MoE 这一支model_typeqwen3_5且为 Dense 架构则是 27B 这一支。这两个信号的判别逻辑与 结构家族陷阱库 L2 中MoE 类和混合 attention 类的触发信号一致跨模型通用经验见 L1 跨模型陷阱。模型 adapter 的复用链与量化路由三条 adapter 及其继承关系Qwen 系列在 amct_pytorch/common/models/llm/qwen/ 下按结构分支组织 adapter本案涉及的复用链为BaseModelblockwise PPL / 校准 / deploy 公共能力 └── Qwen3_5 # qwen3_5.pydense 27B 直接用 └── Qwen3_5Moe # qwen3_5_moe.py35B-A3B └── Qwen3_6Moe: pass # qwen3_6_moe.py35B-A3B(3.6)Qwen3_5adapter 在 qwen3_5.py 中以MODEL_REGISTRY.register(nameqwen3_5, ...)注册__init__中通过self.textconfig(**self.config.text_config.to_dict())把多模态顶层 config 还原为 text config再读取num_hidden_layers确定层数。其build_quant_block()负责按quant_target路由量化def build_quant_block(self, layer_idx): decoder_layer self.block(layer_idx) if attn-linear in self.quant_target or attn-cache in self.quant_target: self.apply_quant_attn(decoder_layer) if mlp in self.quant_target: self.apply_quant_moe_mlp(decoder_layer) return decoder_layer而apply_quant_attn()内部再按decoder_layer.layer_type二次路由qwen3_5.pydef apply_quant_attn(self, decoder_layer): layer_type decoder_layer.layer_type if layer_type linear_attention: attn_cls QuantQwen35LinearAttn quant_attn getattr(decoder_layer, linear_attn, None) quant_attn.config self.config else: attn_cls QuantQwen35Attn return apply_quant_to_attn(self.args, decoder_layer, attn_cls)这就是linear / full 分开处理的落地点linear_attention层走QuantQwen35LinearAttn继承官方Qwen3_5GatedDeltaNet仅将其中的in_proj_qkv、in_proj_z、in_proj_b、in_proj_a、out_proj五个投影 Linear 替换为QuantLinear见 quant_module.pyfull_attention层走QuantQwen35Attn。注意attn-linear只量化投影 Linear线性注意力 kernel 本身在量化未就绪时保持 BF16——这是本案例的既定策略而不是缺陷。MoE 分支的 experts 量化与 deploy 绑定Qwen3_5Moe的build_quant_block()覆写了 MoE 侧路由qwen3_5_moe.pyif moe in self.quant_target: quant_moe find_moe_module(decoder_layer) if quant_moe is not None: experts getattr(quant_moe, experts, None) if experts is not None and is_packed_experts(experts): quant_moe.experts QuantGatedExperts( self.args, experts, groupmoe.routed ) shared_expert getattr(quant_moe, shared_expert, None) if shared_expert is not None and not isinstance( shared_expert, QuantQwen35MLP ): shared_expert_args build_no_algo_args(self.args) quant_moe.shared_expert QuantQwen35MLP( shared_expert_args, shared_expert, groupmoe.shared )三个值得展开的实现细节is_packed_experts前置检查只有确认 checkpoint experts 是 packed 布局时才包裹QuantGatedExperts这与先确认 experts packed/展开的适配建议一一对应QuantGatedExpertsmoe_common.py内部用GatedExpertView(materializeFalse)惰性视图切分 packed 张量并在需要时通过build_ptq_expert_module实体化为真Parameter供 PTQ 训练避免惰性视图在 NPU 迁移后 weight 仍留 CPU 的经典坑。shared_expert 用build_no_algo_argsshared expert 密集激活直接量化即可不需要 PTQ 算法这与 L2 陷阱库 中shared_experts PTQ 策略必须两层一致的设计约束吻合。deploy 时逐 expert 展开绑定由于运行时模块挂在mlp.experts.expert_modules.i.proj而 checkpoint key 是mlp.experts.i.proj.weightiter_deploy_bindings()qwen3_5_moe.py对 expert 模块做了名称重映射其余模块走默认的{weight_prefix}{name}.weight规则。三步闭环adapter 适配的验证方法本案例验证了可复制的三步闭环流程且三个模型35B-A3B ×3.5、35B-A3B ×3.6、27B Dense均走通该流程BF16 baseline用 blockwise PPL 拿基线口径seq_len4096关闭量化等价验证用 bf16.yaml空配置 全 16-bit跑量化 wrapperPPL 应≈BF16证明 rebuilt wrapper 前向语义正确最小 PTQ smokeextract_ptq_data采 16 样本 →ptq --algos autoround→ 确认目标 unit 的参数文件落盘打通校准输入 → 训练 → 参数导出链路。Qwen3.5-35B-A3B三步闭环通过关闭量化验证中attn(层 3/19/39) 数值接近 BF16、moe(层 0/20/39) 对齐layer0/shared_expert最小 PTQ smoke 打通。Qwen3.6-35B复测通过使用真实权重/mnt/data/models/Qwen/Qwen3.6-35B-A3B系统 python复测BF16 baseline6.2731与精度表 6.2799 同量级口径/版本微差关闭量化等价attn-linearmoebf16.yaml空配置 全 16-bit6.2751≈ BF16 → rebuilt wrapper 前向语义正确最小 PTQ smokeextract_ptq_data16 样本 →ptq --algos autoround→ 落盘layer_0_linear_attn.ptattn-linear的linear_attn投影单元✓。运行注记环境问题非模型缺陷linear_attention在缺少flash-linear-attention包时走 torch fallback功能正常autoround 触发No module named triton缺包非致命PTQ 参数已落盘。复现该流程前建议先补齐这两个可选依赖避免被误导为模型问题。Qwen3.6-27B DensePTQ calibrationPileValnsamples16seq_len1024PPL evaluationWikiText2 testseq_len4096attn-linear与mlp的 Direct、LWC、LAC、LWCLAC、OmniQuant、AutoRound、FlatQuant 均完成 Deploy 与 clean reload无缺失键、非预期键、形状不匹配或加载错误clean reload 识别attn-linear304 个量化模块第 0 层 5 个、mlp192 个量化模块第 0 层 3 个Vision 分支和lm_head未被错误量化。第 0 层 5 个attn-linear模块恰好对应QuantQwen35LinearAttn中的in_proj_qkv/in_proj_z/in_proj_b/in_proj_a/out_proj五个投影与源码结构互相印证Vision 分支未被量化则验证了Qwen3_5adapter 将 weight prefix 固定在model.language_model.layers.i.qwen3_5.py的正确性。关键陷阱L3 模型/家族专属误用 DeepSeek 的 MLA 接口现象进 quant block 构建即调到不存在的apply_quant_mla()报错根因qwen3_5moe继承Qwen3_5应复用 Qwen 公共接口而非 DeepSeek MLA 专用入口apply_quant_mla是 MLA 类模型的专属路由见 L2 · MLA 类处理统一收回apply_quant_attn()/apply_quant_moe_mlp()两条公共入口教训Qwen 分支先看 dense adapter 公共接口勿直接用 DeepSeek MLA 入口。跨模型层面的通用教训见 L1 跨模型陷阱。混合 attention 的 causal mask 路由linear与full必须分开处理linear_attentionkernel 量化未就绪时先留 BF16但其投影 Linear 仍可量化3.6 smoke 已验证该单元可 PTQ。另一类相关坑是若 layer0 恰好是linear_attentionembedding 阶段捕获到的 mask可能为None不能直接复用给后续full_attention层否则 BF16 PPL 会低得离谱相当于看到后文处理方式是 adapter 内显式维护 full-attn causal mask详见 L2 · 混合 attention 类 与qwen3-next个案。量化策略结论35B MoE 首推attn-linear moeW8A8-int8 直转3.5/3.6 均 delta 小达标linear_attentionkernel 量化未就绪时先留 BF16仅量化其投影 Linear27B Denseattn-linear与mlp走 A4W4 MXFP4各算法的完整结果见下文精度表FlatQuant 在两处均为最优算法不建议Qwen 分支误用 DeepSeek MLA 入口linear/fullattention 一把梭套同一路径。精度速查表ppl 口径seq_len4096。MXFP 双值为两次评测口径 a/b。Qwen3.5-35B-A3BBF16 6.2486数据类型量化配置量化算法pplBF16无无6.2486INTA4w4: moe, attn-linear无3839.2734INTA8w4: moe, attn-linear无7.1928INTA8w8: moe, attn-linear无6.3781MXFPA4w4: moe, attn-linear无6.9814/6.826MXFPA8w4: moe, attn-linear无6.508/6.436MXFPA8w8: moe, attn-linear无6.3168/6.285Qwen3.6-35BBF16 6.2799 / 复测 6.2731数据类型量化配置量化算法pplBF16无无6.2799INTA4w4: moe, attn-linear无3962.8643INTA8w4: moe, attn-linear无7.3586INTA8w8: moe, attn-linear无6.3788MXFPA4w4: moe, attn-linear无7.024/6.931MXFPA8w4: moe, attn-linear无6.599/6.536MXFPA8w8: moe, attn-linear无6.3168/6.308Qwen3.6-27BBF16 7.8214数据类型量化配置量化算法pplBF16无无7.8214MXFPA4w4: attn-linear无8.0828MXFPA4w4: attn-linearlwc8.0008MXFPA4w4: attn-linearlac7.6261MXFPA4w4: attn-linearlwc lac7.5939MXFPA4w4: attn-linearomniquant7.8375MXFPA4w4: attn-linearautoround8.1834MXFPA4w4: attn-linearflatquant7.2257MXFPA4w4: mlp无7.9196MXFPA4w4: mlplwc8.0670MXFPA4w4: mlplac7.8648MXFPA4w4: mlplwc lac8.0103MXFPA4w4: mlpomniquant7.8741MXFPA4w4: mlpautoround7.9661MXFPA4w4: mlpflatquant7.7327表中规律与量化结论一致A4W4-int 直转完全不可用ppl 数千而 W8A8-int 直转 delta ≤ 0.1是最省事的起点MXFP4 下 27B 的算法空间里attn-linear最优是 LWCLAC7.5939、mlp最优是 FlatQuant7.7327均优于无算法直转。同系列新模型的复用清单下次遇到 Qwen3.5/3.6 同结构layer_types混合 packed experts模型时先参考本案例 qwen3-next同为混合 attention MoE见 qwen3_next.py Qwen 系列总览起步文件直接从 qwen3_5_moe.py 起步复制 adapterQwen3.6 的空子类证明了结构相同只换注册名的成本下限先做什么先确认 checkpoint experts 是 packed 还是展开决定是否需要 repackBF16 PPL 离谱先查混合 attention mask 路由不建议Qwen 分支误用 DeepSeek MLA 入口linear/fullattention 一把梭默认复用抽象BaseModel、PtqUnit、QuantLinear、apply_quant_attn、apply_quant_moe_mlp把模型特有逻辑留在amct_pytorch/common/models/llm/qwen/...内不要先改 workflow、solver 和 quant module。延伸阅读个案原文qwen3.5-3.6.md位于仓库内部案例库含完整验证记录Qwen 家族其它个案Qwen3-dense、Qwen3-moe、Qwen3-Next-80B-A3B-InstructQwen3.6 模型示例文档Qwen3.6-Moe.md、Qwen3.6-Moe-Pruning.md量化模块实现quant_module.pyQuantQwen35MLP/QuantQwen35Attn/QuantQwen35LinearAttnPPL 评测与 PTQ 流程入口cli/llm/ptq.py、cli/llm/extract_ptq_data.py【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

基于UniApp的美妆教程微信小程序开发实战与踩坑指南

基于UniApp的美妆教程微信小程序开发实战与踩坑指南

一直有朋友问我,美妆类内容平台该怎么从零做,尤其是一套代码要同时覆盖微信小程序和App的场景,到底怎么选型。我自己做过几个美妆方向的小程序,踩了不少坑,也积累了一些比较成熟的做法。今天就把这套“基于微信小程序的…

📅 2026/9/18 23:11:39
AI提示工程自动优化工具gpt-prompt-engineer:5分钟跑出最优提示,告别盲目试错

AI提示工程自动优化工具gpt-prompt-engineer:5分钟跑出最优提示,告别盲目试错

AI提示工程自动优化工具gpt-prompt-engineer:5分钟跑出最优提示,告别盲目试错 【免费下载链接】gpt-prompt-engineer gpt-prompt-engineer - 一个工具,用于自动化生成、测试和排名多种提示,以找到最适合特定任务的提示。 项目地…

📅 2026/9/18 23:11:38
LeetCode 每日一题解析:54. Spiral Matrix 螺旋矩阵(剥洋葱法与方向数组法全解)

LeetCode 每日一题解析:54. Spiral Matrix 螺旋矩阵(剥洋葱法与方向数组法全解)

LeetCode 每日一题解析:54. Spiral Matrix 螺旋矩阵(剥洋葱法与方向数组法全解) 【免费下载链接】leetcode LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。) 项目地…

📅 2026/9/18 23:11:38
MORE NEWS

更多资讯

📰

Unity实时画面采集与RTMP推流实战:RenderTexture+FFmpeg方案详解

搞过Unity实时画面采集的人应该都有同感:引擎自带的Camera输出到屏幕容易,但一旦涉及“把画面送到外部去”,比如录制成文件、推成直播流,能查到的完整资料就少得可怜。Unity官方对录屏、推流这块基本处于“你自己看着办”的状态&a…

📰

React Native中的Hermes配置管理:oh-my-hermes插件化实践

做React Native开发这些年,Hermes引擎基本成了绕不开的标配。但说实话,项目里的Hermes配置一直挺乱的——初始化参数散在gradle、metro配置、Java代码里,每次新建工程都要翻文档重新查一遍,不同版本的RN配置写法还不一样&#xff…

📰

RealSense SDK macOS 安装:3 步快速编译 librealsense,跑通第一帧深度流

RealSense SDK macOS 安装:3 步快速编译 librealsense,跑通第一帧深度流 【免费下载链接】librealsense RealSense SDK 项目地址: https://gitcode.com/GitHub_Trending/li/librealsense 围绕 RealSense SDK macOS 安装,本文带你把相机…

📰

k-skill 项目实战:public-restroom-nearby 技能如何实现「附近公共卫生间查找」

k-skill 项目实战:public-restroom-nearby 技能如何实现「附近公共卫生间查找」 【免费下载链接】k-skill 한국인을 위한 스킬 모음집 - 에이전트를 한국인으로 项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill 导读 public-restroom-nearby 是 …

📰

Fluent Bit Kubernetes 过滤器运行时测试指南:基于伪 Kubernetes API Server 的元数据注入验证

Fluent Bit Kubernetes 过滤器运行时测试指南:基于伪 Kubernetes API Server 的元数据注入验证 【免费下载链接】fluent-bit Fast and Lightweight Logs, Metrics and Traces processor for Linux, BSD, OSX and Windows 项目地址: https://gitcode.com/GitHub_Tr…

📰

用XinServer实现项目进度自动化管理:从任务编排到CI/CD联动

开头:从一次差点翻车的进度会说起上季度我们团队负责一个边缘业务系统的升级,排期只有六周,需求却拆出了四十多个子任务。当时我心里其实没底,因为团队里一半人同时要处理线上问题,另一半人对新业务逻辑不熟。开进度会…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬