Self-Forcing DMD / FRRF / Predictor v4 实验记录
结果总览
数据划分与统一设置
- 训练集:从
vidprom_filtered_extended.txt以随机种子 0 采样的 1000 条提示词。 - 本文只展示验证集结果:
MovieGenVideoBench_extended.txt第 101–200 条非空提示词,即 Python 切片[100:200];保存在prompts/MovieGenVideoBench_extended_101_200.txt。 - 训练集与该验证集的精确字符串重合数为 0。
- 评测使用随机种子 0、每条提示词生成 1 个 81 帧、832 × 480
视频,并在 VBench
custom_input模式下计算相同六个维度。 - 六维均值是六项等权算术平均,仅用于本实验横向比较,不是 VBench 官方加权总分。
预测器与速度场复用调度的首个分块均为 FFFF,FPPF/FPPP/FRRF/FRRR
描述其后续分块;FFFF 则在所有分块都使用完整生成器。F 表示完整
生成器,P 表示预测器,R 表示复用同一分块第一步的速度场。
验证集(第 101–200 条)VBench
| 训练方案 | 推理方式 | 主体一致性 | 背景一致性 | 运动平滑度 | 动态程度 | 美学质量 | 成像质量 | 六维均值 | 相对 FFFF |
|---|---|---|---|---|---|---|---|---|---|
| DMD 基线 | FFFF | 0.9317 | 0.9443 | 0.9762 | 0.7000 | 0.6204 | 0.7004 | 0.8122 | 0.0000 |
| 无需训练(速度场复用) | FRRF | 0.9079 | 0.9334 | 0.9729 | 0.7100 | 0.6167 | 0.6865 | 0.8046 | -0.0076 |
| 阶段 1 | FPPF | 0.9186 | 0.9409 | 0.9803 | 0.7100 | 0.6132 | 0.6908 | 0.8089 | -0.0032 |
| 阶段 2-A 在线策略 | FPPF | 0.9161 | 0.9400 | 0.9820 | 0.7000 | 0.6120 | 0.6873 | 0.8062 | -0.0060 |
| 阶段 2-B 离线 FFFF | FPPF | 0.8959 | 0.9319 | 0.9825 | 0.6900 | 0.6086 | 0.6741 | 0.7972 | -0.0150 |
| 无需训练(速度场复用) | FRRR | 0.5739 | 0.7704 | 0.9179 | 1.0000 | 0.4117 | 0.4464 | 0.6867 | -0.1255 |
| 阶段 1 | FPPP | 0.8239 | 0.8979 | 0.9744 | 0.5100 | 0.5619 | 0.6636 | 0.7386 | -0.0736 |
| 阶段 2-A 在线策略 | FPPP | 0.8420 | 0.9074 | 0.9815 | 0.4400 | 0.5516 | 0.6238 | 0.7244 | -0.0878 |
| 阶段 2-B 离线 FFFF | FPPP | 0.7767 | 0.8816 | 0.9820 | 0.2900 | 0.4873 | 0.5085 | 0.6544 | -0.1578 |
在验证集上,阶段 1 FPPF 的运动平滑度比 FFFF 高 0.0041,动态程度高 0.01;其均值损失主要来自主体一致性、美学质量和成像质量。阶段 2-A FPPF 的动态程度与 FFFF 相同,但其余质量项略低。
与 FFFF 的逐帧相似度
每个方案均按同名视频和帧位置与验证集 FFFF 配对,统计 100 个视频、8,100 对原始分辨率 RGB 帧。PSNR/SSIM 越高、LPIPS 越低 表示越接近 FFFF,但这些指标不代表对真实视频的保真度。
| 训练方案 | 推理方式 | VBench 六维均值 | PSNR | SSIM | LPIPS |
|---|---|---|---|---|---|
| 无需训练(速度场复用) | FRRF | 0.8046 | 18.2527 | 0.5706 | 0.2828 |
| 阶段 1 | FPPF | 0.8089 | 18.8213 | 0.6032 | 0.2497 |
| 阶段 2-A 在线策略 | FPPF | 0.8062 | 18.9809 | 0.6105 | 0.2497 |
| 阶段 2-B 离线 FFFF | FPPF | 0.7972 | 19.1423 | 0.6066 | 0.2721 |
| 无需训练(速度场复用) | FRRR | 0.6867 | 14.6036 | 0.2631 | 0.6725 |
| 阶段 1 | FPPP | 0.7386 | 18.3280 | 0.5483 | 0.3371 |
| 阶段 2-A 在线策略 | FPPP | 0.7244 | 18.7079 | 0.5867 | 0.3362 |
| 阶段 2-B 离线 FFFF | FPPP | 0.6544 | 18.7494 | 0.5700 | 0.4340 |
结论
- 质量上限仍是 FFFF。 它在验证集上的六维均值为 0.8122。
- 当前推荐部署阶段 1 FPPF。 它是验证集上最接近 FFFF 的 方案,均值为 0.8089,比 FFFF 低 0.0032。
- FRRF 是当前最好的无预测器复用方案。 它的均值为 0.8046, 比 FFFF 低 0.0076,比阶段 1 FPPF 低 0.0044;其动态程度为 0.7100,但主体一致性、背景一致性、运动平滑度和成像质量仍低于 FFFF。
- FRRR 不适合当前部署。 虽然其动态程度达到 1.0000,但六维均值 只有 0.6867;相对 FFFF 的 PSNR/SSIM/LPIPS 也恶化到 14.6036/0.2631/0.6725,说明连续三步复用导致明显漂移。
- 阶段 2 展开训练仍未超过阶段 1。 阶段 2-A 在线策略 FPPF 比阶段 1 FPPF 低 0.0027;阶段 2-B 低 0.0118。
- 阶段 2 内部仍是在线策略优于固定的离线 FFFF 标签。 验证集中,FPPF 高 0.0090,FPPP 高 0.0700。
- P3 暂时不能替代最终的完整模型步骤。 同一检查点从 FPPF 改为 FPPP 后,验证集均值在阶段 1、阶段 2-A、阶段 2-B 分别 下降 0.0703、0.0818、0.1428。
- 当前结论来自 100 条独立验证提示词、单一随机种子、每条单样本; 正式报告统计显著性时仍建议补充多随机种子实验或置信区间。
训练完成状态
| 模型 | 训练标签 | 步数 | 最终损失 | 推荐推理方式 | 状态 |
|---|---|---|---|---|---|
| 阶段 1 | 离线 FFFF 相邻步骤 | 2000 | 0.0635 | FPPF(当前最佳) | 已完成并同步 |
| 阶段 2-A | 在线策略完整教师模型 | 2000 | 0.0787 | FPPF(次选) | 已完成并同步 |
| 阶段 2-B | 固定离线 FFFF | 2000 | 0.3685 | 不推荐 | 已完成并同步 |
这些损失来自不同监督目标,不能把其绝对值直接当作模型质量差异;部署 选择以上述统一 VBench 评测为准。
结果入口
- 完整实验记录和配置:本文后续“详细实验记录”
- 验证集(第 101–200 条)机器可读汇总:
evaluation_results/moviegen_101_200/summary.json - 验证集完整流水线日志:
evaluation_results/moviegen_101_200/evaluation_suite.log和evaluation_results/moviegen_101_200/reuse_schedules_evaluation.log - 验证集提示词清单与清单文件:
prompts/MovieGenVideoBench_extended_101_200.txt和prompts/MovieGenVideoBench_extended_101_200.json - 验证集九组视频:
videos/moviegenvideobench_extended_101_200_dmd_*_seed0
已完成事项(原待办)
首个分块全为完整模型步骤的 FRRF / FRRR
状态:已完成。评测于 2026-07-29T04:12:19Z 开始,于
2026-07-29T04:37:17Z 完成。
所需调度:
FRRF:分块 0 为 F-F-F-F;分块 1–6 为 F-R-R-F
FRRR:分块 0 为 F-F-F-F;分块 1–6 为 F-R-R-R
其中,R 表示复用同一分块第 0 步预测的速度场。两种调度的最终干净上下文
更新仍使用完整生成器。
- 增加明确的
frrf/frrr速度场复用调度。 - 强制两种调度的首个分块均使用 FFFF。
- 增加调度测试和随机种子 0 的空跑测试。
- 增加可恢复的九方案评测与汇总支持。
- 使用八张 GPU,在验证集第 101–200 条提示词上生成 FRRF 和 FRRR 视频。
- 验证每个样本(包括 FFFF 和两种复用调度)都在生成初始噪声前, 将所有随机数生成器重置为随机种子 0。
- 验证每种调度均有 100 个视频,每个视频为 81 帧、832 × 480。
- 运行 VBench 的六个维度。
- 以已有的随机种子 0 验证集 FFFF 为参照,计算 PSNR/SSIM/LPIPS;每种调度统计 100 个视频和 8,100 对配对帧。
- 更新
evaluation_results/moviegen_101_200/summary.json。 - 替换“结果总览”中的 FRRF 行,增加 FRRR,并更新结论。
“结果总览”已替换为新协议结果。旧 FRRF 调度的产物仍保留,但不再纳入 九方案汇总。
输出目录:
videos/moviegenvideobench_extended_101_200_dmd_frrf_chunk0_ffff_seed0
videos/moviegenvideobench_extended_101_200_dmd_frrr_chunk0_ffff_seed0
配对结果文件:
evaluation_results/moviegen_101_200/ffff_vs_frrf_chunk0_ffff_psnr_ssim_lpips.json
evaluation_results/moviegen_101_200/ffff_vs_frrr_chunk0_ffff_psnr_ssim_lpips.json
运行入口:
scripts/run_moviegen_first100_dmd_frrf.shscripts/run_moviegen_first100_dmd_frrr.shscripts/run_moviegen_101_200_evaluation.shscripts/wait_and_run_moviegen_101_200_reuse_schedules.sh
详细实验记录
Predictor v4:1000 条提示词的离线训练
- 提示词来源:
prompts/vidprom_filtered_extended.txt - 选取方式:使用
random.Random(0).sample选取 1000 条非空记录 - 留出集排除规则:排除与
prompts/MovieGenVideoBench_extended.txt前 100 条非空提示词完全 相同的记录 - 构建后重合检查:训练提示词与基准集第 1–100 条、第 101–200 条的精确 重合数均为 0/100;与整个 1003 条提示词基准文件的精确重合数也为 0
- 生成随机种子:每个样本均重置为 0
- 选中提示词数 / 唯一提示词数:1000 / 1000
cases.jsonlSHA-256:e1d9cd6b5261b513f8d2983dde2fbc7e05e19e3c966ad041f9cd8040d2a01cbe- 数据集根目录:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_1000_seed0 - 预测器源模块:
[1, 28] - 捕获干净预特征的候选模块:
[0, 1, 28, 29] - 教师轨迹:7 个各含 3 个潜空间帧的分块,每个分块执行 4 个完整模型步骤
- 训练清单:使用分块 1–6,每个分块包含 3 个相邻状态转换;预计得到 6000 条分块记录 / 18000 对训练数据
- NVMe 训练输出:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_training_1000_seed0 - 最终同步的数据集:
data/self_forcing_predictor_v4_1000_seed0 - 最终同步的训练输出:
checkpoints/predictor_v4_1000_seed0 - 端到端监督进程 PID:
1251561 - 监督进程日志:
checkpoints/predictor_v4_1000_seed0/end_to_end.log - 启动时间:
2026-07-24T10:19:58Z - 初始状态:由于 8 张 H100 GPU 均被已有的 HY-WorldPlay 预测器训练 任务占用,因此进入排队状态。监督进程在等待期间不占用 GPU 显存。
- GPU 冒烟测试和 1000 个样本的八卡离线构建均已成功完成。验证后的数据集 包含 7000 条分块记录,以及 6000 个训练分块 / 18000 对相邻步骤数据。
- 历史状态:数据集构建完成后按要求暂停训练;后续正式训练取代了这一暂停 状态。
- 暂停前的一次短训练运行到第 90 步,尚未到达第 100 步的首个检查点。
其日志保存在
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_training_1000_seed0/aborted_step90_20260724T142101Z; 后续从头训练不会恢复该运行的任何权重。
正式八卡训练
- 启动时间:
2026-07-25T13:16:41Z - GPU:8 × NVIDIA H100 80GB
- 单卡批大小:16
- 全局批大小:128
- 梯度累积步数:1
- 最大训练步数:2000
- 训练从全新初始化开始,不恢复已归档的第 90 步运行。
- 批大小验证:单卡运行 36 步,覆盖全部 6 个上下文长度桶,并且没有发生 显存不足。PyTorch 峰值显存约为 35.18 GiB。
- 正式运行第 10 步状态:损失 1.7726008478、流匹配均方误差 1.7364688764、隐藏状态均方误差 0.3613196773、平均微步耗时 0.9235374251 秒、PyTorch 峰值显存 35.18 GiB。采样检查时 8 张 GPU 的利用率均为 100%。
- SwanLab 项目:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4 - SwanLab 运行记录:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4/runs/4h9zkrjp - 监督进程 PID:
3351068 - 监督进程日志:
checkpoints/predictor_v4_1000_seed0/training_and_sync.log - 训练日志:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_training_1000_seed0/train_log.jsonl - 每 100 步将检查点写入 NVMe。第 2000 步完成后,监督进程会自动将数据集 和训练产物同步到上文列出的项目路径。
批大小 32 续训
- 批大小为 16 的运行在记录第 320 步后被主动停止。最近的完整检查点为 第 300 步,因此从第 300 步的完整状态继续训练,包括模型、优化器、 学习率调度器、训练轮次位置和各进程随机数生成器状态。
- 恢复时间:
2026-07-25T13:35:17Z - 单卡批大小:32
- 全局批大小:256
- 梯度累积步数:1
- 第 330 步验证:损失 0.1543566273、平均微步耗时 1.9139812439 秒、 PyTorch 峰值显存 68.46 GiB。
- 驱动报告的显存稳定在每张 GPU 约 76.5 GiB。训练跨越多个上下文长度桶 时没有发生显存不足,8 个工作进程均保持活跃。
- SwanLab 运行记录:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4/runs/zd7a5ge6 - 监督进程 PID:
3358910
批大小 32 从头重训
- 上述续训在记录第 870 步后按要求停止,其完整文件和检查点保存在:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_training_archives/bs16_then_bs32_resume_stopped_step870_20260725 - 重新启动时间:
2026-07-25T14:41:01Z - 恢复设置:
null - 启动前输出目录为空,新日志从全局第 1 步开始。
- 单卡批大小:32
- 全局批大小:256
- 第 10 步状态:损失 1.7685708122、流匹配均方误差 1.7325291700、 隐藏状态均方误差 0.3604163701、平均微步耗时 1.8527149781 秒、 PyTorch 峰值显存 68.46 GiB。
- SwanLab 运行记录:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4/runs/4kxa9v7b - 监督进程 PID:
3380489 - 最终状态:从头训练至第 2000 步,并于
2026-07-25T19:52:55Z完成同步。 - 最终损失:
0.0635068361。 - 最终检查点:
checkpoints/predictor_v4_1000_seed0/predictor_step_02000.safetensors
Predictor v4 阶段 2:分离梯度的 FPPP 展开训练
- 实现日期:
2026-07-25 - 阶段 2 的两个训练版本分别从阶段 1 第 2000 步的 FP32 模型状态独立 初始化,均不继承阶段 1 的优化器、学习率调度器、训练轮次或全局步数。
- 训练展开调度固定为:
- 分块 0:
F-F-F-F - 分块 1–6:
F-P-P-P
- 分块 0:
- P1、P2 和 P3 均接受隐藏状态与流匹配监督。
- 在每个时间步和分块边界,预测器隐藏状态、预测的干净潜变量和上一分块的 隐藏状态都会分离梯度。
- 每条轨迹包含 18 个受监督状态:
6 个训练分块 × 3 个预测器时间步。 - 持久历史只包含以下 K/V:将最终干净分块潜变量在上下文时间步 0 输入冻结 的完整生成器后写入的 K/V。中间时间步的 K/V 只存在于临时工作区。
- 在线时间步使用以下精确 FP32 值:
[1000.0, 937.5, 833.3333129882812, 625.0]。 - 每条提示词的初始噪声和转换噪声都精确复现推理时随机种子 0 的随机数序列。
两个相互独立的八卡训练版本均已成功完成:
| 版本 | 训练展开调度 | 监督方式 | 最终步数 | 最终损失 |
|---|---|---|---|---|
| 阶段 2-A | FPPP | 在当前学生状态上查询完整教师模型 | 2000 | 0.0786837618 |
| 阶段 2-B | FPPP | 使用已保存的离线 FFFF 轨迹中的固定隐藏状态与流匹配目标 | 2000 | 0.3684817659 |
通用训练配置:
8 张 GPU
每张 GPU 1 条轨迹
每个全局优化步骤 8 条轨迹
2000 个优化步骤
融合模块学习率 5e-5
预测器模块学习率 5e-6
100 步线性预热 + 余弦衰减
BF16 激活值
FP32 可训练参数和 AdamW 状态
随机种子 0
每 100 步保存一次
阶段 2 输出根目录:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_stage2_onpolicy_fppp_1000_seed0
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_stage2_offline_ffff_fppp_1000_seed0
checkpoints/predictor_v4_stage2_onpolicy_fppp_1000_seed0
checkpoints/predictor_v4_stage2_offline_ffff_fppp_1000_seed0
分离梯度训练监督进程在占用 8 张 GPU 前会等待以下条件全部满足:
- NVMe 中阶段 1 的
training_latest.pt明确记录第 2000 步; - NVMe 中存在
predictor_step_02000.safetensors; - 阶段 1 产物已完成向项目目录的同步;
- 阶段 1 训练与同步监督进程已经退出;
- 阶段 2 实现的就绪标记已经存在。
随后,监督进程先为每种监督模式各运行一次完整的八卡轨迹冒烟测试,再依次 训练并同步阶段 2-A 和阶段 2-B。
- 阶段 2 监督进程 PID:
3442042(已成功退出) - 监督进程日志:
checkpoints/predictor_v4_stage2_suite/wait_and_train.log - 等待脚本:
scripts/wait_stage1_then_run_stage2.sh - 套件脚本:
scripts/run_predictor_v4_stage2_suite.sh - 就绪标记:
checkpoints/predictor_v4_stage2_code.ready - 就绪状态:通过 Python 编译、Shell 语法、离线目标形状与数据类型、 缓存分离梯度以及随机种子 0 精确噪声序列检查后释放。两个强制自动八卡 轨迹冒烟测试也均已通过。
- 阶段 2-A 于
2026-07-26T10:02:29Z完成同步。 - 阶段 2-B 及完整套件于
2026-07-26T11:34:47Z完成同步。 - 阶段 2-A SwanLab:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4/runs/vx0szxt9 - 阶段 2-B SwanLab:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4/runs/lhs9t5au - SwanLab 拒绝了每一步中字符串类型的
supervision_mode指标。这只影响 日志记录;数值指标、最终检查点、上传、验证和同步均已成功完成。
每个训练完成的检查点都支持以下两种部署调度:
FPPF:F0 -> P1 -> P2 -> F3
FPPP:F0 -> P1 -> P2 -> P3
MovieGen 验证集评测
- 初始评测日期:
2026-07-26 - 初始评测时间段:
2026-07-26T16:23:11Z至2026-07-26T17:35:53Z - FRRF/FRRR 新协议补充评测时间段:
2026-07-29T04:12:19Z至2026-07-29T04:37:17Z - 提示词来源:
prompts/MovieGenVideoBench_extended.txt - 提示词范围:按从 1 开始计数的第 101–200 条非空记录,共 100 条唯一 提示词
- 提示词文件:
prompts/MovieGenVideoBench_extended_101_200.txt - 提示词 SHA-256:
a3fef56aa8c4a33a8245391888f6f998e2a6a1c278e6492988501d7ad0352621 - 数据划分清单:
prompts/MovieGenVideoBench_extended_101_200.json - 与选中的 1000 条预测器训练提示词的精确重合数:0
- 随机种子:每条提示词均为 0
- 推理设置:8 张 GPU,每条提示词生成 1 个样本,启用 EMA
- 已评测版本:FFFF、FRRF、FRRR、阶段 1 FPPF/FPPP、阶段 2-A FPPF/FPPP 和阶段 2-B FPPF/FPPP
- NVMe 暂存根目录:
/mnt/local_nvme/zoubin/cz/self_forcing_moviegen_101_200_evaluation - 项目视频目录:
videos/moviegenvideobench_extended_101_200_dmd_*_seed0 - 完整性验证:9 组结果均包含 100 个视频;全部 900 个视频都能解码为 81 帧、832 × 480
- VBench 验证:每个版本在六个维度中都恰好包含 100 条逐视频记录
- 配对验证:8 个非基线版本均包含 100 个视频,每个版本都与验证集 FFFF 输出形成 8,100 对配对帧
- 数据划分准备脚本:
scripts/prepare_moviegen_validation_split.py - 可恢复的评测启动脚本:
scripts/run_moviegen_101_200_evaluation.sh - 汇总与完整性检查脚本:
scripts/summarize_moviegen_101_200_evaluation.py - 机器可读汇总:
evaluation_results/moviegen_101_200/summary.json - 初始评测日志:
evaluation_results/moviegen_101_200/evaluation_suite.log - FRRF/FRRR 新协议评测日志:
evaluation_results/moviegen_101_200/reuse_schedules_evaluation.log - 完成标记:
evaluation_results/moviegen_101_200_evaluation.complete
完整的 VBench 与配对指标数值维护在“结果总览”中;未经四舍五入的精确值和 全部源结果路径记录在机器可读汇总文件中。
Wan14B DMD 预测器训练
- 启动日期:
2026-07-29 - 状态:进行中
- 训练顺序:先训练 Predictor-only,再训练 Full + Predictor Joint。
- 两个版本均训练 2000 个 student DMD step。
- 每个 student step 前更新 Fake Score 5 次。
- Predictor-only 随机退出:P1、P2、P3 等概率采样。
- Joint 随机退出:F0、P1、P2、P3 等概率采样;预计约 1500 次 Predictor optimizer 更新。
- Predictor 融合/残差学习率:
1e-5。 - Predictor block 学习率:
1e-6。 - Joint Full Generator 学习率:
2e-7。 - Fake Score 学习率:
4e-7。 - 学生 optimizer:AdamW,
betas=(0.0, 0.999),100 步线性预热后 余弦衰减。 - EMA:第 200 步开始,衰减率
0.99。 - 实模冒烟:Predictor-only 和 Joint 的 DMD 反向均通过;Joint 的 Full/Predictor 梯度、FSDP 后冻结副本同步、Full/Predictor EMA 检查点保存和重新读取均通过。
- 训练托管会话:
tmux predictor_v4_dmd_suite。 - 总日志:
/mnt/local_nvme/zoubin/cz/predictor_v4_dmd_suite.log。 - Predictor-only NVMe 输出:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_dmd_predictor_only。 - Predictor-only SwanLab:
https://swanlab.cn/@ZhuoChen/Self-Forcing-Predictor-v4/runs/yzdlp32v。 - Joint NVMe 输出:
/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_dmd_joint。 - Predictor-only 配置:
configs/predictor_v4_dmd_predictor_only.yaml。 - Joint 配置:
configs/predictor_v4_dmd_joint.yaml。 - 串行训练与评测脚本:
scripts/run_predictor_v4_dmd_suite.sh。
训练完成后自动执行:
- Predictor-only 在 MovieGen 第 101–200 条验证集上评测 FPPF、FPPP;
- Joint 在相同验证集上评测新 Full 的 FFFF、FPPF、FPPP;
- 所有推理 case 使用随机种子 0;
- 计算 VBench 六指标和相对各自 FFFF 的 PSNR、SSIM、LPIPS;
- 将 NVMe 训练产物同步到项目
checkpoints/目录。