Prhub

#52441 [Bugfix][Multimodal] Keep Gemma 4 video frame counts on CPU

原始 PR 作者 chaunceyjiang 合并时间 2026-08-16 17:17 文件变更 2 提交数 3 评论 8 代码增减 +7 / -1

执行摘要

修复 Gemma 4 视频帧计数被误搬 GPU 引发的崩溃

PR body 直接指向 Buildkite CI #84014 的引擎崩溃,并附带了 dump_input.py 的完整输入转储。转储显示 Gemma 4 视频请求中 video_frame_counts 的字段配置为 MultiModalBatchedField(keep_on_cpu=False),即该标量 tensor(16) 被当作 GPU 输入字段传输;而同批次的 video_timestampsvideo_num_soft_tokens 均为 keep_on_cpu=True。帧计数是 CPU 端按视频拆分扁平帧的元数据,被搬上 GPU 后破坏了 encoder cudagraph 捕获路径的稳定性假设,最终触发 EngineCore 异常。修复目标就是消除这一字段契约不一致。

实现拆解

1. 修正多模态字段契约(数据契约)

vllm/model_executor/models/gemma4_mm.py_get_mm_fields_config() 中,为视频字段 video_frame_counts 增加 keep_on_cpu=True。该字段是 CPU 端用于 MultiModalFieldConfig.flat_from_sizes() 按视频拆分扁平帧的元数据,此前未标记 keep_on_cpu 导致其被当作 GPU 输入字段搬移至设备端,在 encoder cudagraph 捕获/重放路径上与固定 shape 的稳定要求冲突,触发 Buildkite #84014 的异常转储。修复后该字段与 video_num_soft_tokensvideo_timestamps 两个既有 CPU 元数据字段保持一致,是纯粹的字段契约对齐。

2. 收紧 gemma4 的 encoder cudagraph 测试预算

tests/models/multimodal/generation/test_vit_cudagraph.py 中为 gemma4 配置新增 `compilation_config_overrides={

文件 模块 状态 重要度
vllm/model_executor/models/gemma4_mm.py vllm/model_executor modified 4.89
tests/models/multimodal/generation/test_vit_cudagraph.py vit/cudagraph modified 4.54

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

评论区精华

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

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

风险与影响

关联 Issue

#1 Fix a bug in tying OPT embeddings

完整报告

参与讨论