已合并
feat: add fsdp2 video processor #2922
feat: add fsdp2 video processor #2922
已合并
chenpeizhe创建于 8月4日
chenpeizhe成员
8月4日

What this PR does / why we need it?

Support video processor for generative model training in FSDP2 backend.
https://gitcode.com/Ascend/MindSpeed-MM/issues/576

Does this PR introduce any user-facing change?

New video processor for generative model training in FSDP2 backend.

How was this patch tested?

UT/ST will be presented in other PR.

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 chenpeizhe 的贡献)
Cchenpeizhe成员
8月4日 创建了 pull request,commit 351ddecc
atomgit-bot
atomgit-bot
8月4日 评论:

变更摘要

此次变更主要为 mindspeed_mm 项目的 FSDP2 训练管线新增视频数据处理模块,包含两个核心文件:video_processor.py 定义视频帧采样、分辨率校验与数据过滤的抽象流水线及其具体实现,video_reader.py 则提供统一的视频解码读取抽象层。整体上建立了从视频读取、帧序列采样到数据增强的完整链路,并通过 Registry 注册机制支持可扩展的后端切换。

主要改动

  • 新增 VideoProcessor 工厂及 AbstractVideoProcessor 抽象基类:定义了视频处理器的统一调用接口 __call__ 和数据筛选方法 select_valid_data,子类通过重写实现差异化处理逻辑。
  • 新增 OpensoraplanVideoProcessor:实现了面向 OpenSoraPlan 模型的专用处理器,支持自动帧间隔计算、速度因子控制、时序随机裁剪、find_closest_y VA E 对齐帧数计算,以及基于分辨率、宽高比、美学评分的多阶段数据过滤管线。
  • 新增 VACEVideoProcessor:面向 VACE 模型的处理器,实现了三种帧采样策略(_get_frameid_bbox_default、_get_frameid_bbox_adjust_last、_get_frameid_bbox_fixed),支持多视频源同步帧提取与下采样对齐的潜空间尺寸推算。
  • 新增 Video 抽象基类及 DecordVideo / TorchvisionVideo 实现:统一了视频文件的读取接口(get_batch、get_video_fps、get_len),DecordVideo 通过类级共享解码器优化性能,TorchvisionVideo 基于 torchvision 后端读取,并支持 TCHW/THWC 布局与 torch/numpy 数组类型切换。
  • 新增 VideoReader 工厂类:通过别名映射(如 "decord" → "DecordVideo")与 Registry 查找机制,提供统一的视频读取器创建入口。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月4日 评论:

代码审查

我已经完成了对所有问题的审查,现在进行最终汇总。


审查总结

各文件审查结果

文件 结论
mindspeed_mm/fsdp/data/data_utils/generative_data_utils/video_processor.py 发现 6 个问题(P0×3, P2×1, P3×2)
mindspeed_mm/fsdp/data/data_utils/generative_data_utils/video_reader.py 发现 2 个问题(P0×1, P1×1)

按优先级统计

  • P0: 4 个 — 全部为导入路径错误,会导致模块无法加载、代码完全不可用
  • P1: 1 个 — TorchvisionVideo.get_batch() 中 self.layout 与 self.array_type 混淆,导致 numpy 输出模式静默失效
  • P2: 1 个 — _apply_final_filters 中所有样本被过滤后 zip(*) 解包崩溃
  • P3: 2 个 — 重复调用 get_video_fps() 和 _get_frameid_bbox_fixed 死代码

整体风险评估

高风险。4 个 P0 导入错误意味着这两个新文件在当前状态下完全无法使用——任何导入 video_processor 或 video_reader 模块的代码都会立即抛出 ModuleNotFoundError 或 ImportError。导入路径需要从 mindspeed_mm.fsdp.data.data_utils.generative_data_utils.* / mindspeed_mm.fsdp.utils.utils 修正为实际存在的模块位置(mindspeed_mm.data.data_utils.* / mindspeed_mm.utils.utils),或者需要在 fsdp 路径下创建对应的模块副本/重新导出。在导入问题解决之前,这些代码无法进入任何测试或生产流程。

类型 数量
🔴 阻塞 5
🟡 建议 1

⛔ 需要修改

likedislike
不准确?
ascend-robotascend-robot成员
8月4日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
8月4日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-Ascend/MindSpeed-MM ✅ 王海涛, MoCuishle-M (2/2) ✅ 王海涛 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

chenpeizhe, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了79条消息 查看更多
ascend-robotascend-robot成员
8月7日 添加了label:lgtm
htwang成员
8月7日 评论:

/approve

likedislike
ascend-robotascend-robot成员
8月7日 添加了label:approved
ascend-robotascend-robot成员
8月7日 合入了pull request
ascend-robot
ascend-robot成员
8月7日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike