已合并
[feature] support kimi_k3 model adapter #789
xyxin_006创建于 29 天前
[feature] support kimi_k3 model adapter #789
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 xyxin_006 的贡献)atomgit-bot
29 天前 评论:
29 天前 评论:
变更摘要
此 PR 为 msmodelslim 新增 Kimi-K3 模型适配支持,包括完整的模型加载器、适配器、mxfp4 权重反量化、专家并行(EP)补丁和运行时 NPU 兼容补丁。同时增强了多模态 VLM 量化服务,支持基于 AUTO 模式自动选择分布式数据并行层量化(DP_LAYER_WISE),并修复了 modelslim_convert 和 processor.convert 模块的循环导入问题。此外,还对 QuaRot 旋转矩阵进行了 NPU 常驻优化,以及修复了分布式 gather_variable_shapes 在 Ascend 设备上的兼容性问题。
主要改动
- 新增 Kimi-K3 模型适配器: 在
msmodelslim/model/kimi_k3/下新增KimiK3ModelAdapter,实现 VLMBase 的完整管线接口,支持多模态校准数据集处理、按需加载解码层、mxfp4 权重到 BF16 的反量化转换(convert_mxfp4_to_bf16.py),以及离线 QuaRot 旋转映射(包括get_ln_fuse_map、get_rotate_map) - 专家并行(EP)运行时补丁: 新增
ep_patches.py,通过 monkey-patchKimiSparseMoeBlock的__init__和forward,实现分布式环境下 MoE 专家的分片管理(None槽位标记非本地专家),并支持基于all_gather的 token 分发与all_reduce局部结果聚合 - 量化服务多设备 DP 支持:
_choose_runner_type新增device_indices参数,当runner=AUTO且多卡时自动选择DPLayerWiseRunner;同时将MultimodalVLMServiceConfig.runner默认值从LAYER_WISE改为AUTO,并在quant_process中透传device_indices到 runner - 循环导入修复(懒加载):
modelslim_convert/__init__.py和processor/convert/__init__.py改用模块级__getattr__实现懒导入,避免mp.spawn反序列化时因convert.registry → modelslim_convert → …产生的循环导入 - QuaRot 旋转矩阵 NPU 常驻与分布式修复:
quarot_utils.py新增_pin_rot_on_npu和_prepare_rot_matrix,确保旋转矩阵在构造后始终驻留在 NPU 上;同时gather_variable_shapes改用显式device=参数创建张量以满足 Ascend HCCL 要求


AtlasAccount
29 天前 评论:
29 天前 评论:
atomgit-bot
29 天前 评论:
29 天前 评论:
代码审查
审查总结
本次审查覆盖了全部 21 个变更文件。以下是各文件的审查结论:
| 文件 | 结论 |
|---|---|
config/config.ini |
无问题 — 新增 kimi_k3 三处配置(模型名映射、入口点、依赖版本),格式与现有条目一致 |
docs/zh/user_guide/model_support/foundation_model_support_matrix.md |
无问题 — 新增 Kimi-K3 行,依赖标注清晰 |
example/README.md |
无问题 — 新增一行列表项 |
example/multimodal_vlm/Kimi-K3/README.md |
无问题 — 新增完整的使用示例,命令安全 |
example/multimodal_vlm/README.md |
无问题 — 新增一行表格行 |
lab_practice/kimi_k3/kimi_k3_w4a8.yaml |
无问题 — YAML 结构正确,锚点引用有效,runner: auto 与 RunnerType.AUTO 一致 |
msmodelslim/core/quant_service/modelslim_convert/__init__.py |
无问题 — 懒加载 __getattr__ 实现正确,避免了循环导入 |
msmodelslim/core/quant_service/multimodal_vlm_v1/quant_config.py |
无问题 — runner 默认值从 LAYER_WISE 改为 AUTO,有意为之 |
msmodelslim/core/quant_service/multimodal_vlm_v1/quant_service.py |
无问题 — _choose_runner_type 扩展了 DP/AUTO 分支,_resolve_offload_device 提取为独立方法,quant_process 支持 DP runner |
msmodelslim/model/kimi_k3/__init__.py |
无问题 — 仅包含许可证头 |
msmodelslim/model/kimi_k3/convert_mxfp4_to_bf16.py |
1 个 P3 建议(第 46 行 model_index["weight_map"] 缺少键检查) |
msmodelslim/model/kimi_k3/ep_patches.py |
无问题 — EP 猴子补丁实现正确,懒加载与 EP 交互一致 |
msmodelslim/model/kimi_k3/loader.py |
无问题 — 简单的插件加载器 |
msmodelslim/model/kimi_k3/model_adapter.py |
1 个 P3 建议(第 975 行:懒加载与 EP patched __init__ 的隐式依赖) |
msmodelslim/model/kimi_k3/runtime_patches.py |
1 个 P2(第 110-113 行:位置参数映射不完整可能丢失 A_log/dt_bias)+ 1 个 P3(第 106 行:args[0] 无空列表保护) |
msmodelslim/processor/convert/__init__.py |
无问题 — 懒加载 __getattr__ 正确 |
msmodelslim/processor/quarot/common/quarot_utils.py |
无问题 — NPU pinning 重构正确,_prepare_rot_matrix 逻辑完整 |
msmodelslim/utils/distributed/dist_helper.py |
无问题 — gather_variable_shapes 显式 device= 修复了 HCCL 兼容性 |
test/cases/core/quant_service/multimodal_vlm_v1/test_multimodal_vlm_modelslim_v1_quant_service.py |
无问题 — 测试覆盖了单卡/DP/AUTO/MODEL_WISE 回退等分支 |
test/cases/model/kimi_k3/test_adapter_ep_range.py |
无问题 — 测试覆盖单进程/多进程/896专家场景 |
test/cases/model/kimi_k3/test_ep_patches.py |
无问题 — 测试覆盖 EP range、MoE 推理精度、None slot 行为 |
发现统计
- P0: 0
- P1: 0
- P2: 1(
runtime_patches.py位置参数映射不完整,可能导致A_log/dt_bias在纯位置调用时丢失) - P3: 4(2 个防御性编程建议 + 1 个错误信息改进 + 1 个设计注释)
整体风险评估
低风险。此 PR 新增了 Kimi-K3 模型适配器的完整支持,代码结构清晰、测试覆盖充分。唯一值得关注的 P2 问题位于 runtime_patches.py 的 KDA 算子包装器中——当 FLA 库以纯位置参数方式调用 chunk_kda/fused_recurrent_kda 时(取决于具体 transformers/FLA 版本),A_log 和 dt_bias 参数可能丢失。建议在上线前确认 Kimi-K3 实际使用的 FLA 版本调用约定,或采纳建议的修复。其余 P3 建议均为防御性改进,不影响正常功能。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


29 天前 添加了label:stat/needs-squash
29 天前 添加了label:ascend-cla/no
此处折叠了128条消息 查看更多
joejoezhou
19 天前 评论:
19 天前 评论:
/lgtm
/approve


19 天前 添加了label:approvedlgtm
19 天前 合入了pull request
ascend-robot
19 天前 评论:
19 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


PR 提交说明
提交前请阅读 贡献指南,开发者文档:模型接入指南
PR 标题前缀:[Feature]、[Bugfix]、[Doc]、[Test](与 CONTRIBUTING 一致)
1. 影响面评估
接口变更(按需): 新增能力(兼容扩展)
Kimi-K3及适配器入口(config/config.ini→msmodelslim.model.kimi_k3)lab_practice/kimi_k3/kimi_k3_w4a8.yaml与示例文档输出件变更(按需): 无
非兼容变更(按需): 无
SIG 评审结论(按需): 无
2. 修改描述
修改背景:
Kimi-K3 为原生多模态大模型(混合注意力 KDA/MLA + Latent MoE),权重以 compressed-tensors MXFP4 存储,体量大、结构复杂。社区此前缺少对应模型适配器与 W4A8 实践配置
修改目的:
接入 Kimi-K3 模型适配器,支持语言侧 Decoder 的 W4A8 混合量化(含 MXFP4 加载反量化、EP、QuaRot、FA3);并让 VLM 量化服务支持
auto/dp_layer_wise,与 LLM 侧调度对齐,便于多卡加速。修改内容:
msmodelslim/model/kimi_k3KimiK3ModelAdapter:layer-wise 加载、多模态校准数据(image+text)、IterSmooth 子图配置(KDA/MLA/FFN)convert_mxfp4_to_bf16:compressed-tensors MXFP4(weight_packed+ E8M0 scale)反量化为 BF16nn.Linearep_patches:对权重目录内KimiSparseMoeBlock做 EP monkey-patch(本地 expert 分片 + DP gather / all_reduce),不改权重仓modeling_*.pyquarot:离线 QuaRot 的 ln fuse / rotate map(含 EP 本地 expert 的rot_latent)runtime_patches:NPU 上用纯 PyTorch 路径替换易超时的 FLA KDA Triton 核KimiMLAAttention(absorb MLA)注入 placeholder,对接 Ascend MLA FAmsmodelslim/model/common/utils.py:抽取resolve_expert_ep_range,统一 EP expert 范围计算config/config.ini:注册kimi_k3lab_practice/kimi_k3/kimi_k3_w4a8.yaml:新增 W4A8 实践配置example/multimodal_vlm/Kimi-K3/README.md、docs/zh/knowledge_base/model/README.md、docs/zh/user_guide/usage_quick_quantization.md:补充 Kimi-K3 与 VLM DP 说明test/cases/model/kimi_k3/*、test/cases/core/quant_service/multimodal_vlm_v1/、test/cases/utils/test_distributed.py:补充 UT3. 功能验证
冒烟由 CI 门禁检查,无需填写「冒烟是否通过」。
复现步骤(可选):
# 依赖 pip install transformers==4.57.6 compressed-tensors==0.13.0 pip install -U fla-core # Kimi-K3 W4A8 一键量化(推荐多卡;runner 默认 auto) msmodelslim quant \ --model_path ${model_path} \ --save_path ${save_path} \ --device npu:0,1,2,3,4,5,6,7 \ --model_type Kimi-K3 \ --quant_type w4a8 \ --trust_remote_code True说明:实践配置见
lab_practice/kimi_k3/kimi_k3_w4a8.yaml(expert W4A8 + latent/shared W8A8);校准数据需同时包含 image 与 text。EP 由适配器侧处理,与 runner DP 相互独立、可叠加;使用 DP 时配置中的处理器/算法需支持分布式执行。4. 自检(请逐项确认,不适用标 N/A)
典型安全编码问题
DT