已合并
[feature] support kimi_k3 model adapter #789
[feature] support kimi_k3 model adapter #789
已合并
xyxin_006创建于 29 天前
xyxin_006
xyxin_006成员
29 天前

PR 提交说明

提交前请阅读 贡献指南,开发者文档:模型接入指南

PR 标题前缀:[Feature]、[Bugfix]、[Doc]、[Test](与 CONTRIBUTING 一致)

1. 影响面评估

接口变更(按需): 新增能力(兼容扩展)

  • 新增模型类型 Kimi-K3 及适配器入口(config/config.inimsmodelslim.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_k3
    • 新增 KimiK3ModelAdapter:layer-wise 加载、多模态校准数据(image+text)、IterSmooth 子图配置(KDA/MLA/FFN)
    • convert_mxfp4_to_bf16:compressed-tensors MXFP4(weight_packed + E8M0 scale)反量化为 BF16 nn.Linear
    • ep_patches:对权重目录内 KimiSparseMoeBlock 做 EP monkey-patch(本地 expert 分片 + DP gather / all_reduce),不改权重仓 modeling_*.py
    • quarot:离线 QuaRot 的 ln fuse / rotate map(含 EP 本地 expert 的 rot_latent
    • runtime_patches:NPU 上用纯 PyTorch 路径替换易超时的 FLA KDA Triton 核
    • FA3:在 KimiMLAAttention(absorb MLA)注入 placeholder,对接 Ascend MLA FA
  • msmodelslim/model/common/utils.py:抽取 resolve_expert_ep_range,统一 EP expert 范围计算
  • config/config.ini:注册 kimi_k3
  • lab_practice/kimi_k3/kimi_k3_w4a8.yaml:新增 W4A8 实践配置
  • example/multimodal_vlm/Kimi-K3/README.mddocs/zh/knowledge_base/model/README.mddocs/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:补充 UT

3. 功能验证

冒烟由 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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 xyxin_006 的贡献)
atomgit-bot
atomgit-bot
29 天前 评论:

变更摘要

此 PR 为 msmodelslim 新增 Kimi-K3 模型适配支持,包括完整的模型加载器、适配器、mxfp4 权重反量化、专家并行(EP)补丁和运行时 NPU 兼容补丁。同时增强了多模态 VLM 量化服务,支持基于 AUTO 模式自动选择分布式数据并行层量化(DP_LAYER_WISE),并修复了 modelslim_convertprocessor.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_mapget_rotate_map
  • 专家并行(EP)运行时补丁: 新增 ep_patches.py,通过 monkey-patch KimiSparseMoeBlock__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__.pyprocessor/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 要求
likedislike
atomgit-bot
atomgit-bot
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: autoRunnerType.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_logdt_bias 参数可能丢失。建议在上线前确认 Kimi-K3 实际使用的 FLA 版本调用约定,或采纳建议的修复。其余 P3 建议均为防御性改进,不影响正常功能。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
ascend-robotascend-robot成员
29 天前 添加了label:stat/needs-squash
ascend-robotascend-robot成员
29 天前 添加了label:ascend-cla/no
此处折叠了128条消息 查看更多
xzm123成员
19 天前 评论:

🤖 AIDD 文档质量检测报告

PR #789 的文档检测已全部完成。

📊 任务统计:共 4 个任务(✅ 4 完成 / ❌ 0 失败 / ⊘ 0 取消)
🐛 问题统计:共 0 个问题(致命 0 / 严重 0 / 一般 0 / 提示 0)

🔗 查看完整报告点击进入平台报告
🔗 查看 PR 检测问题点击查看问题列表

评论由 AIDD 自动生成,多次推送会增量更新本评论。

likedislike
joejoezhou成员
19 天前 评论:

/lgtm
/approve

likedislike
ascend-robotascend-robot成员
19 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
19 天前 合入了pull request
ascend-robot
ascend-robot成员
19 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike