Prhub

#42869 [BugFix] Kimi-K2.5: skip vision tower dtype conversion when using quantization

原始 PR 作者 gaozihao-shy 合并时间 2026-05-18 13:07 文件变更 1 提交数 1 评论 5 代码增减 +6 / -3

执行摘要

修复 Kimi-K2.5 ViT 量化时 dtype 转换破坏参数

在 Kimi-K2.5 模型中,当量化后端支持 ViT(例如 AscendModelSlimConfig)时,_maybe_ignore_quant_config 返回非 None,但 vision_tower 的 .to(device, dtype=model_config.dtype) 会强制 dtype 转换,破坏已量化的参数权重,导致推理结果错误或运行时崩溃。PR 通过条件判断跳过 dtype 转换,保护量化参数的完整性。

建议精读此 PR,理解量化参数保护的通用模式。重点关注 review 中提到的 mm_projector 问题是否已在其他 PR 中修复。开发者在处理类似量化场景时应留意 .to(dtype) 对量化参数的副作用。

讨论亮点
  • gemini-code-assist[bot] 提出高优先级意见:相同的 dtype 跳过逻辑也应应用到 mm_projector(行 355-357),因为 mm_projector 如果量化同样会因强制 dtype 转换而出错。
  • DarkLight1337 要求作者搜索其他模型中的类似问题并修复。作者回复称目前仅在 Kimi 系列模型中发现,会继续监控其他模型。
  • 最终审核:DarkLight1337 批准合并,但未明确讨论 mm_projector 的问题是否已解决。

实现拆解

  1. 修改 kimi_k25.py 中的 __init__ 方法:将 vision_tower 的 .to() 调用由无条件转换为条件判断。
  2. 调用 _maybe_ignore_quant_config 两次:第一次用于初始化 vision_tower 时的 quant_config 参数;第二次在 .to() 之前决定是否跳过 dtype——若返回非 None(量化后端支持 ViT),则只传入 device=self.device;若返回 None(无量化或量化后端不支持 ViT),则传入 device=self.device, dtype=model_config.dtype
  3. mm_projector 未修改:mm_projector 的 .to() 仍然保持原样,未应用同样保护。
  4. 无测试或配置变更:仅源码修改,未补充对应的单元测试。
文件 模块 状态 重要度
vllm/model_executor/models/kimi_k25.py 模型执行器 modified 6.38

关键源码片段

vllm/model_executor/models/kimi_k25.py data-contract

核心修改文件,新增条件判断避免量化时 dtype 转换破坏参数。

# 文件 : vllm/model_executor/models/kimi_k25.py
# 此 is None 判断复用 _maybe_ignore_quant_config 的调用结果
# 若返回非 None,表示量化后端支持 ViT(如 AscendModelSlimConfig),
# 此时只移动 device 而不转换 dtype,保护量化参数
# 若返回 None,则按原有逻辑转换 device 和 dtype
if self._maybe_ignore_quant_config(quant_config) is not None:
    self.vision_tower = self.vision_tower.to(device=self.device)
else:
    self.vision_tower = self.vision_tower.to(
        device=self.device, dtype=model_config.dtype
    )

评论区精华

mm_projector 也应跳过 dtype 转换 正确性

gemini-code-assist[bot] 指出 mm_projector 初始化时同样有 `.to(dtype=model_config.dtype)`,若 mm_projector 量化则会导致同样问题。

结论:未在本次 PR 中处理;作者未回应此评论,审核者 DarkLight1337 仍批准合并。 · 待处理

搜索其他模型中的类似问题 设计

DarkLight1337 要求作者搜索其他模型并修复,作者回复称目前仅 Kimi 系列发现,会继续监控。

结论:作者承诺监控但未在本 PR 扩展修复范围。 · acknowledged

风险与影响

  1. mm_projector 未同步修复:review 明确指出 projector 也应跳过 dtype,未修复可能导致后续量化场景下 mm_projector 的量化参数被破坏。
  2. 测试缺失:没有针对量化后 ViT 的测试,无法验证修复正确性,回归风险存在。
  3. 范围局限:仅修复了 Kimi-K2.5 一个模型,可能其他多模态模型有类似问题(作者承诺会监控但未在本 PR 处理)。
  • 用户影响:使用 Kimi-K2.5 模型且启用支持 ViT 的量化后端(如 AscendModelSlimConfig)的用户将避免量化参数破坏,推理结果正确。
  • 系统影响:仅影响 vision_tower 初始化路径,无性能或兼容性退化。
  • 团队开发影响:提供了一种修复模式,可供其他模型参考,但需跟踪其余实例。
缺少测试覆盖 mm_projector 未同步修复 可能还有其他模型存在同类问题

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论