Prhub

#23501 [VLM] Fix Kimi-K2.5 CPU path: rename grid_thws -> image_grid_thw

原始 PR 作者 klshuster 合并时间 2026-04-28 04:34 文件变更 1 提交数 2 评论 4 代码增减 +5 / -1

执行摘要

修复 Kimi-K2.5 CPU 路径 grid 键名不一致

GPU 路径已在 #22858 中统一为 SGL 标准键名 image_grid_thw,但 CPU 路径 (_cpu_call) 直接返回 HF processor 的原始输出(键名为 grid_thws),导致下游 KimiK25ForConditionalGeneration.get_image_feature 读取 item.image_grid_thw 时抛出 AttributeError。该问题在使用 gpu_image_decode=False(例如为保持训练/推理像素一致性)时触发 VLM server warmup 失败。

可快速合并。对于涉及多路径(CPU/GPU)的键名重构,建议统一检查所有路径避免遗漏。

讨论亮点

无实质性 review 讨论,仅有一个 bot 配额警告和两个 CI 触发命令,以及一个 LGTM 评论。两位 reviewer 均直接批准。

实现拆解

  1. python/sglang/srt/multimodal/processors/kimi_k25.pyKimiGPUProcessorWrapper._cpu_call 方法中,将原本直接返回 HF processor 结果的语句改为先保存结果到局部变量 out
  2. out 中 pop 出 grid_thws 键(如果存在),并将其值赋给 image_grid_thw 键。
  3. 返回修改后的 out 字典。
文件 模块 状态 重要度
python/sglang/srt/multimodal/processors/kimi_k25.py 多模态处理器 modified 4.95

关键源码片段

python/sglang/srt/multimodal/processors/kimi_k25.py core-logic

对 Kimi-K2.5 多模态处理器的 _cpu_call 方法进行键名映射修复,使其返回 SGL 标准键名 image_grid_thw,与 GPU 路径一致。

# python/sglang/srt/multimodal/processors/kimi_k25.py# ... 之前代码 ...def _cpu_call(self, text, images, **kwargs):
    """Fallback: token expansion + medias kwarg -> original HF processor."""
    input_text = text[0] if isinstance(text, list) else text
​
    if images:
        # Token expansion via media_tokens_calculator
        parts = input_text.split(self._image_token)
        result = [parts[0]]
        for image, part in zip(images, parts[1:]):
            num_tokens = self._hf_processor.media_processor.media_tokens_calculator(
                {"type": "image", "image": image}
            )
            result.append(self._image_token * num_tokens + part)
        input_text = "".join(result)
​
        # Convert to medias format for Kimi's HF processor
        kwargs["medias"] = [{"type": "image", "image": img} for img in images]
​
    out = self._hf_processor(text=[input_text], **kwargs)
    # 从 HF processor 原生输出中取出 grid_thws(可能的键名),
    # 重新映射为 SGL 标准键名 image_grid_thw,与 GPU 路径保持一致。
    grid_thws = out.pop("grid_thws", None)
    if grid_thws is not None:
        out["image_grid_thw"] = grid_thws
    return out# ... 后续代码 ...

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

极低风险。仅修改一个键名映射,且 GPU 路径已使用相同映射稳定运行;修改仅影响 gpu_image_decode=False 的 CPU 路径。无需测试配套,因为行为不变(只是键名对齐)。

影响范围窄:仅修复 Kimi-K2.5 模型在使用 CPU 图像解码时的启动崩溃。对 GPU 路径无影响。

遗漏同步修改

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论