Prhub

#1760 [Multimodal] Add Multimodal OPD support

原始 PR 作者 coding-famer 合并时间 2026-03-27 15:44 文件变更 1 提交数 2 评论 2 代码增减 +6 / -0

执行摘要

为 on-policy distillation 添加多模态输入支持,使 VLMs 能够处理图像数据。

根据关联issue #1758,用户询问SLIME是否支持VLMs的on-policy distillation,因为当前sample.tokens不包含图像信息,导致SGLang teacher server无法处理图像,从而无法进行蒸馏。此PR旨在修复此问题,添加多模态OPD支持,使视觉语言模型能正常工作。

对于使用多模态蒸馏或计划集成VLMs的用户,此PR值得精读,以了解图像数据如何集成到蒸馏流程中。对于其他用户,变更较小,可快速浏览以保持对系统功能的了解。设计决策简单,主要关注向后兼容性和最小化侵入性,值得关注如何处理条件性数据添加。

讨论亮点

在issue评论中,用户GentleZhu确认使用'text': sample.prompt + sample.response可以工作,但'input_ids': sample.response可能不行,因为SGLang teacher server需要视觉标记来识别图像。作者coding-famer回应建议使用'input_ids': sample.tokens,因为sample.tokens包含图像token和扩展填充,并解释input_ids会在SGLang内部转换回文本。讨论突出了多模态数据传递的正确性考虑,但PR最终采用添加image_data字段的方式,可能避开了直接使用input_ids的争议。

实现拆解

实现集中于修改'slime/rollout/on_policy_distillation.py'文件中的reward_func函数。关键改动包括:导入encode_image_for_rollout_engine函数;添加条件检查,如果sample.multimodal_inputs存在且包含'images'键,则使用该函数编码每个图像,并将结果作为'image_data'列表添加到payload中。这确保了在向奖励模型发送请求时包含图像数据。

文件 模块 状态 重要度
slime/rollout/on_policy_distillation.py rollout modified 5.0

关键符号

reward_func

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

多模态数据处理方式 设计

用户 GentleZhu 指出使用 text 字段可以工作但 input_ids 可能不行,因为 SGLang teacher server 需要视觉标记;作者 coding-famer 建议使用 sample.tokens 并解释其包含图像信息,强调直接使用 text 可能更简单。

结论:PR 通过添加 image_data 字段解决了问题,可能避免了直接使用 input_ids 或 text 的争议,采用了一种间接传递图像数据的方式。 · 已解决

风险与影响

技术风险包括:

  1. 依赖新增导入的encode_image_for_rollout_engine函数,需要确保该函数存在、正确实现且与图像处理逻辑兼容;
  2. 条件检查基于sample.multimodal_inputs的数据结构,如果未来结构变化或未正确定义,可能导致运行时错误;
  3. 缺少针对此变更的单元测试或集成测试,可能引入回归问题,尤其是在多模态场景下。但由于改动较小且为条件性添加,对现有非多模态功能影响较低。

对用户影响:现在支持视觉语言模型进行on-policy distillation,扩大了SLIME的应用范围,使多模态训练成为可能。对系统影响:需要确保图像编码与SGLang teacher server的接口兼容,可能增加请求负载大小。对团队影响:可能需要更新文档或示例以反映此功能,并考虑在多模态相关测试中添加覆盖。

依赖新增函数 缺少测试覆盖

关联 Issue

#1758 [Question] VLM Support for on-policy distillation

完整报告

参与讨论