Prhub

#47750 [Feature] Add VidCom2 video token pruning

原始 PR 作者 nvbfalk 合并时间 2026-07-28 11:20 文件变更 17 提交数 1 评论 13 代码增减 +421 / -48

执行摘要

新增 VidCom2 视频 token 剪枝方法

VidCom2 (Video Compression Commander) 是一种训练无关视频 token 剪枝方法,相比 EVS 在相同压缩率下能更好保留关键帧信息,提升下游任务准确率。作者在 H100 上的 500 MCQ 测试显示 VidCom2 一致优于 EVS。参考论文《Video Compression Commander: Plug-and-Play Inference Acceleration for Video Large Language Models》(EMNLP 2025)。

推荐关注该 PR 的设计模式,特别是统一参数接口 get_video_pruning_spec()、协议方法声明 supported_video_pruning_methods、配置 fail-fast 校验等,可作为后续功能扩展的模板。

讨论亮点
  • 命名争论:作者最初引入 video_retention_ratio,Isotr0py 认为易混淆,建议使用 video_pruning_method + 共享 video_pruning_rate,作者采纳。
  • 验证时机:Isotr0py 建议在模型加载时校验而非 model runner 中 panic,最终在 ModelConfig.__post_init__ 实现 fail-fast。
  • 目录结构:Isotr0py 提议创建 video_prune 子目录,作者实施并迁移 evs。
  • 文档并发使用:2ez4bz 询问是否允许两种方法同时使用,确认互斥。

实现拆解

  1. 创建核心剪枝模块 (vllm/multimodal/video_prune/vidcom2.py,新增 124 行):实现 compute_retained_tokens_countcompute_retention_mask。算法步骤:低方差通道选取 → 多尺度高斯相似性 → 动态每帧预算 (softmax) → 每帧保留最低相似性 token → 精确计数协调。

  2. 配置层统一参数 (vllm/config/multimodal.py):新增 VideoPruningMethod = Literal['evs', 'vidcom2']MultiModalConfig 新增 video_pruning_method 字段;添加 get_video_pruning_spec() 返回 (method, rate) 元组。

  3. 模型接口与校验:在 SupportsMultiModalPruning 协议中添加 supported_video_pruning_methods 类变量;ModelConfig.__post_init__ 中实现 fail-fast 校验。

  4. 模型集成与导入迁移qwen3_vl.py 根据 pruning_spec 选择 vidcom2 或 evs 函数;同时迁移 evs 导入路径至 video_prune 子目录,更新所有引用该路径的模型。

  5. 引擎参数与测试文档arg_utils.py 添加 --video-pruning-method;新增 tests/multimodal/test_vidcom2.py (7 个测试);更新 docs/features/multimodal_inputs.mddocs/design/cuda_graphs_multimodal.md

文件 模块 状态 重要度
vllm/multimodal/video_prune/vidcom2.py 核心剪枝 added 8.42
tests/multimodal/test_vidcom2.py 测试 added 7.58
vllm/config/multimodal.py 配置层 modified 6.55
vllm/model_executor/models/qwen3_vl.py 模型集成 modified 7.52
vllm/config/model.py 配置层 modified 6.44
vllm/model_executor/models/interfaces.py 接口协议 modified 5.65

关键符号

compute_retained_tokens_count compute_retention_mask _multi_scale_gaussian get_video_pruning_spec _init_video_pruning

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

评论区精华

参数命名:video_retention_ratio vs pruning_method + pruning_rate 设计

Isotr0py 认为引入 retention_ratio 易与 pruning_rate 混淆,建议使用 `video_pruning_method` 和共享 `video_pruning_rate`

结论:作者采纳,移除 retention_ratio,统一为 pruning_method + pruning_rate · 已解决

校验时机:模型加载时 vs model runner 设计

Isotr0py 建议在模型加载时提前校验剪枝方法支持,而非在 model runner 中 panic

结论:在 ModelConfig.__post_init__ 中实现快速失败校验 · 已解决

目录结构:创建 video_prune 子目录 other

Isotr0py 提议创建 `video_prune` 子目录聚合视频剪枝方法,以便未来扩展

结论:创建 `vllm/multimodal/video_prune/` 并将 evs 和 vidcom2 均移入该目录 · 已解决

文档:是否允许两种方法并发使用 documentation

2ez4bz 询问文档是否应说明两种方法是否可以同时使用

结论:确认参数互斥,通过 `--video-pruning-method` 选择单一方法 · 已解决

风险与影响

  • 回归风险:evs 导入路径从 vllm.multimodal.evs 改为 vllm.multimodal.video_prune.evs,涉及至少 5 个模型文件,若遗漏更新会导致 ImportError。当前已全部更新,但需仔细审查。
  • 性能风险:VidCom2 的多尺度高斯计算开销略大,作者报告 TTFT 与 EVS 持平,但未在更长视频或更大模型上验证。
  • 兼容性:新参数 video_pruning_method 默认 "evs",向后兼容;旧参数 video_retention_ratio 已移除。
  • 测试覆盖:单元测试使用伪造数据,未覆盖真实 ViT 输出;缺少端到端 GPU 正确性测试。
  • 用户:可通过 --video-pruning-method vidcom2 选用更高准确率的剪枝方法,但需注意模型支持情况。
  • 系统:视频剪枝框架扩展性增强,未来新增方法只需实现两个函数并在模型声明中添加即可。
  • 团队:维护成本略有增加,但模块化设计降低了长期风险。
evs 导入路径迁移 缺少 GPU 测试覆盖 配置参数新增

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论