| 【bugfix】支持GLM4MOE模型的MTP(Multi-Token Prediction)接入 Co-authored-by: qq_46439621<wanlongze1@huawei.com> # message auto-generated for no-merge-commit merge: !398 merge glm4moe_mtp_fix_0512 into master 【bugfix】支持GLM4MOE模型的MTP(Multi-Token Prediction)接入 Created-by: qq_46439621 Commit-by: qq_46439621 Merged-by: ascend-robot Description: ## PR 提交说明 **PR 标题:** [Bugfix] 支持 GLM4MOE 模型的 MTP(Multi-Token Prediction)接入 --- ### 1. 影响面评估 **接口变更(按需):** 无 **输出件变更(按需):** 无 **非兼容变更(按需):** 无 **SIG 评审结论(按需):** 无 --- ### 2. 修改描述 **修改背景:** GLM4MOE 量化流程当前仅覆盖基础 Decoder Layer,未对 MTP(Multi-Token Prediction)层执行量化,导致 MTP 层权重保持 FP16、无法导出统一量化模型。 **修改目的:** 使 GLM4MOE 模型适配器完整支持 MTP 层的量化接入,包括层发现、子图构造、LN-线性融合映射、旋转映射,开箱即用。 **修改内容:** - **core/模型适配**:重写 init_model,从 safetensors 加载 MTP 解码器权重并注入已有 HF 模型的最末层;重写 generate_model_visit / generate_model_forward,在 Decoder Layer 遍历基础上追加 MTP 层子图访问与前向过程;新增 mtp_preprocess、generate_decoder_layer、load_decoder_if_not_exist、load_mtp_if_not_load 等辅助方法。 - **core/算子**:新增 mtp_quant_module.py,实现 MTPLayer、SharedHead、GLM4MoeRMSNorm 等 MTP 子模块定义,以及 wrap_mtp_decoder、remove_zero_and_shift 等权重重排/装配工具。 - **core/子图 & 融合映射**:更新 get_adapter_config_for_subgraph 为 MTP 层补齐 Subgraph→AdapterConfig;更新 glm4_moe_get_ln_fuse_map 和 glm4_moe_get_rotate_map,新增 MTP 层的 Layernorm-Linear 融合及 QuaRot 旋转映射项。 - **infra/模型适配**:__init__.py 显式导出 GLM4MoeModelAdapter,修复直接 import 不可用的问题。 - **app/量化实践**:YAML 配置移除无效 runner 字段、为第 92 层(MTP 层)各量化 config 增加 exclude 排除项,避免与新增的 MTP 子图量化冲突。 - **test**:扩展 UT 用例,修复 test_init_model Mock 适配新的模型加载路径;新增 test_get_adapter_config_for_subgraph_with_mtp_then_include_mtp_layer 验证 MTP 层子图数量。 --- ### 3. 功能验证 **量化命令:** bash export ASCEND_RT_VISIBLE_DEVICES=15 msmodelslim quant \ --model_path /home/weights/GLM-4.7 \ --save_path /home/weights/GLM-4.7-W8A8-MTP \ --device npu \ --model_type GLM-4.7 \ --quant_type w8a8 \ --trust_remote_code True 服务化命令 bash export ASCEND_RT_VISIBLE_DEVICES=8,9,10,11,12,13,14,15 vllm serve /home/weights/GLM-4.7-W8A8-MTP \ --served-model-name glm-4.7-w8a8-mtp \ --trust-remote-code \ --quantization ascend \ --port 8802 \ --tensor-parallel-size 8 \ --speculative-config '{"method": "mtp", "num_speculative_tokens": 3}' \ --tool-call-parser glm45 \ --reasoning-parser glm45 \ --enable-auto-tool-choice \ --additional-config '{"ascend_scheduler_config": {"enable": true}}' **测试镜像:vllm v0.18.0rc1-a3** 模型量化后,MTP采信率正常  因为是bugfix,这里稍微做一下精度验证: **AIME2025**:精度达标 标杆95.3  --- ### 4. 自检(请逐项确认,不适用标 N/A) **典型安全编码问题** - [x] 是否已校验外部数据 - [x] 是否未采集或打印敏感信息 - [x] 是否已正确设置文件权限 - [x] 是否充分考虑浮点运算溢出、除零等异常场景 - [x] 是否已对正则表达式做 ReDos 检查 **DT** - [x] 是否具备 UT 测试用例看护(路径:test/cases/model/glm4_moe/test_model_adapter_glm4_moe.py;已随 commit 扩展用例) - [ ] 是否需要添加冒烟:否 See merge request: Ascend/msmodelslim!398 | 1 个月前 |