Prhub

#38018 [Model] Use helper function to run MM processors with token inputs (where applicable)

原始 PR 作者 DarkLight1337 合并时间 2026-03-26 16:44 文件变更 12 提交数 7 评论 3 代码增减 +215 / -145

执行摘要

为多模态处理器引入助手函数,避免在 token-only 输入时生成虚拟文本。

根据 PR body,定义助手函数 call_hf_processor_mm_only 以替换 ProcessorMixin.__call__,从而处理 token 输入,因为不是所有 HF 处理器都支持空文本,避免生成 dummy text。

建议团队精读此 PR,重点关注 call_hf_processor_mm_only 的设计决策,以及各模型特定重写(如 pixtral.py 中的 batch 维度处理)的逻辑,以理解多模态输入处理的最佳实践和潜在风险。

讨论亮点

review 中,gemini-code-assist[bot] 在 vllm/transformers_utils/processor.py:547 指出,在 call_hf_processor_mm_only 函数中直接使用 pop('attention_mask') 可能导致 KeyError,建议检查键存在性。作者 DarkLight1337 回应无需修改,遵循 HF 实现。此风险未解决,可能影响代码健壮性。

实现拆解

实现主要分为三部分:

1) 在 vllm/transformers_utils/processor.py 中新增 call_hf_processor_mm_only 函数,处理多模态输入(图像、视频、音频);
2) 在多个模型文件(如 keye.py、qwen2_5_vl.py)中重写 _call_hf_processor 方法,以使用文本路径或处理特定逻辑(如视频、音频);
3) 在 vllm/multimodal/processing/processor.py 中修改 _apply_hf_processor_mm_only 方法,集成新助手函数,并优化空输入处理。同时,修复了 Isaac、Pixtral、Voxtral 等处理器的兼容性问题。

文件 模块 状态 重要度
vllm/transformers_utils/processor.py transformers_utils modified 7.0
vllm/multimodal/processing/processor.py multimodal/processing modified 6.0
vllm/model_executor/models/qwen2_5_vl.py model_executor/models modified 5.0
vllm/model_executor/models/pixtral.py model_executor/models modified 5.0

关键符号

call_hf_processor_mm_only _call_hf_processor _apply_hf_processor_mm_only

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

评论区精华

KeyError 风险 in call_hf_processor_mm_only 正确性

gemini-code-assist[bot] 指出在 `call_hf_processor_mm_only` 函数中使用 `pop('attention_mask')` 可能引发 KeyError,建议检查键存在性。DarkLight1337 回应无需修改,遵循 HF 实现。

结论:风险未解决,作者坚持原实现,可能影响代码稳定性。 · unresolved

风险与影响

技术风险包括:

1) 在 call_hf_processor_mm_only 函数中潜在 KeyError,如果 attention_mask 不存在于 audio_inputs 中;
2) 修改多个模型处理器(如 keye.py、pixtral.py)可能引入回归错误,特别是视频或音频特定逻辑;
3) 依赖 Hugging Face 实现可能导致兼容性问题,如不同 Transformers 版本行为差异;
4) 在 context.pyprocessor.py 中对 return_tensors 的改动可能影响其他处理路径。

影响范围:对用户透明,提升多模态处理性能,避免虚拟文本生成,减少计算开销;系统层面,更高效处理 token-only 输入,增强多模态模型支持;团队需要更新对新助手函数和重写逻辑的理解,并在未来模型集成中应用此模式。

潜在 KeyError 多模型变更风险 依赖外部实现

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论