
Open-Sora 1.1 技术报告精读ST-DiT-2 架构演进、动态分辨率训练与 Masked DiT 图像/视频条件生成【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora本篇指南以 Open-Sora 1.1 技术报告docs/report_02.md为核心系统讲解 700M 参数视频扩散模型在 10M 级数据上的训练方案ST-DiT-2 的架构改动、基于 Bucket 的多分辨率/时长/宽高比/fps 联合训练、Masked DiT 的图像/视频条件生成策略、数据管线与多阶段训练细节。读完本文你将掌握 Open-Sora 1.1 从架构设计到训练落地的完整技术链路并能对照仓库源码与实际配置文件理解每个设计决策的动机与实现。Open-Sora 1.1 概览从 400K 到 10M 数据的跃迁Open-Sora 1.1 是 Open-Sora 系列迈向视频生成世界模型目标的重要里程碑。相比基于 400K 数据训练的 Open-Sora 1.01.1 版本将模型规模提升至700M 参数训练数据扩充至10M 条并针对 Sora 报告中提出的几项关键能力做了工程化落地可变时长、分辨率与宽高比采样灵活性、改善构图与取景以图像和视频作为提示图像动画化、生成视频续接、视频到视频编辑、视频拼接图像生成能力。实现上述能力的手段是多任务预训练。对扩散模型而言对不同 timestep 采样本身就是一种多任务学习Open-Sora 1.1 进一步把这一思想扩展到分辨率、宽高比、帧长、fps以及图像/视频条件生成所需的掩码策略。最终模型在0s~15s 时长、144p~720p 分辨率、多种宽高比的视频上训练。由于算力受限时间一致性质量有限但已经能看到该路线的潜力。ST-DiT-2针对训练稳定性与性能的架构改造Open-Sora 1.1 在原始 ST-DiTSpatial-Temporal Diffusion Transformer基础上做了五项关键修改形成 ST-DiT-2改动项核心思想依据/来源时间注意力改用RoPE 旋转位置编码时间维度的注意力本质上是序列预测任务参考 LLM 的最佳实践用 RoPE 替代正弦位置编码RoPE 论文时间注意力外层包裹AdaIN 与 LayerNorm与空间注意力保持一致稳定训练—全部注意力应用QK-Normalization RMSNorm参考 SD3在半精度训练下稳定收敛SD3 论文动态输入尺寸与视频信息条件注入模型接受任意输入尺寸并自动缩放位置编码参照 PixArt-alpha 的思路把视频的高、宽、宽高比、帧长、fps 作为条件PixArt-alphaT5 文本 token 上限从 120 扩展到200训练集 caption 通常不足 200 token模型能更好地处理长文本—其中 QK-Normalization 与 RoPE 在仓库源码中有直接对应实现。opensora/models/mmdit/layers.py 中的QKNorm类即为 SD3 式 QK 归一化——对 query 与 key 分别施加 RMSNormclass QKNorm(torch.nn.Module): ... self.query_norm FusedRMSNorm(dim) self.key_norm FusedRMSNorm(dim)而EmbedND类负责 RoPE 位置嵌入其构造函数接收dim、theta与axes_dim三个参数axes_dim列表指定了空间H/W与时间T各轴各自分配的位置编码维度。在 opensora/models/mmdit/model.py 中MMDiTModel会校验sum(config.axes_dim) pe_dimpe_dim hidden_size // num_heads即各轴 RoPE 维度之和必须等于单头维度确保位置信息完整覆盖。需要说明的是当前仓库主分支的 mmdit 模型已经演进为类似 Flux 的双流/单流混合架构报告中所述 ST-DiT-2 的具体实现细节可结合 docs/report_01.md 与后续报告交叉印证但其 QK-Norm、RoPE 动态尺寸等核心设计思想一脉相承。多时长/分辨率/宽高比/fps 训练三种方案与 Bucket 落地训练数据若保留原始视频的分辨率、宽高比与时长可以提升采样灵活性与构图质量。报告对比了三种业界主流做法NaViT 方案通过掩码在同一个 batch 内支持动态尺寸效率损失小但系统实现复杂且难以受益于 flash attention 等优化内核Padding 方案FiT、Open-Sora-Plan同样支持 batch 内动态尺寸但把不同分辨率 padding 到同一尺寸并不高效Bucket 方案SDXL、PixArt在不同 batch 之间支持动态尺寸同一 batch 内尺寸必须一致。batch 内尺寸一致意味着无需实现复杂的掩码或 padding。Open-Sora 1.1 基于实现简洁性选择了Bucket 方案预定义若干固定分辨率把不同样本分配到不同 bucket。针对该方案的三点常见顾虑报告逐一给出了实际结论bucket 尺寸种类受限实际应用中常用宽高比9:16、3:4与分辨率240p、1080p就那么几种且训练好的模型对未见过的分辨率有不错的泛化能力batch 内尺寸一致破坏 i.i.d. 假设多 GPU 训练时各卡本地 batch 尺寸本就不同未观察到显著性能下降bucket 填充不均、分布有偏数据集足够大即可填满各 bucket同时应先分析数据尺寸分布再定义 bucket此外不均衡分布对训练影响不大。一个 bucket 是(resolution, num_frame, aspect_ratio)的三元组。每个 epoch 前打乱数据集并按图中规则分配样本把样本放入分辨率与帧长均不超过视频本身的最大 bucket。keep_prob 与 batch_size控制算力开销的两把钥匙由于算力有限报告为每个(resolution, num_frame)引入了两个额外属性keep_prob高分辨率视频以1 - keep_prob的概率被降采样到更低分辨率batch_size每个 bucket 的 batch 大小用于控制各 bucket 的样本数量、均衡 GPU 负载。通过为每个 bucket 调优 batch size可以精确控制不同 bucket 的样本量占比并平衡各 GPU 的算力消耗。仓库中的 bucket 实现与配置文件对照Bucket 逻辑的完整实现位于 opensora/datasets/bucket.py。Bucket类的构造函数接收bucket_config字典其结构为{ bucket_name: { time: (probability, batch_size), ... }, ... }bucket_name为 bucket 名称即分辨率档位如256pxtime为视频帧数probability即keep_prob取 0~1 之间的浮点数若传入二元组((next_hw_prob, next_t_prob), batch_size)第二个概率表示跳过到下一个 time 档位的阈值batch_size为整数。get_bucket_id方法接收视频的帧数T、高H、宽W、fps 等参数先按map_target_fps计算采样间隔折算有效帧数再按分辨率阈值逐档筛选低于 bucket 分辨率约 80% 则跳过最后用get_closest_ratio匹配最接近的宽高比并以keep_prob概率决定是否降级到低档 bucket。训练配置中configs/diffusion/train/stage1.py 与 configs/diffusion/train/stage2.py 均以bucket_config定义全套 bucket。以 stage2 为例256px档从 1 帧图片到 129 帧逐帧配置例如1: (1.0, 130)表示图片帧的 keep_prob 为 1.0、batch size 为 1305: (1.0, 14)表示 5 帧视频 batch size 为 14帧数越长 batch size 越小129 帧降至 6以平衡不同 token 数的计算负载。768px档同样逐帧配置且 batch size 更小5 帧仅 6这正是用 batch_size 均衡 GPU 负载的工程体现。在 scripts/diffusion/train.py 中bucket_config会传入prepare_dataloader由数据加载器据此构建桶化采样器。更完整的 bucket 使用说明见 docs/train.md 的训练章节。Masked DiT用掩码策略统一图像/视频条件生成Transformer 很容易扩展支持图像到图像、视频到视频任务。Open-Sora 1.1 提出一种掩码策略通常把要作为条件的帧去掩码unmaskST-DiT 前向时被去掩码的帧 timestep 为 0其余帧保持原始 timestept。报告特别强调直接把该策略套用在已训练好的模型上效果很差——因为扩散模型在训练时并没有学会在同一份样本中处理不同的 timestep。受UL2启发训练阶段引入随机掩码策略随机去掩码若干帧包括首帧、前 k 帧、末帧、末 k 帧、首末各 k 帧、随机若干帧等。基于 Open-Sora 1.0 的实验显示以 50% 概率应用掩码30% 概率学习能力较弱训练 10k 步即可学会图像条件生成仅伴随轻微的文生视频性能下降。因此在 Open-Sora 1.1 中模型从头预训练时就启用掩码策略。推理侧用五元组定义掩码策略灵活度很高通过以已生成帧作为条件可以自回归式地生成无限帧尽管误差会传播累积。掩码策略的推理配置详解见 docs/config.md 的进阶推理配置章节。数据收集与处理管线10M 数据集的规模化实践Open-Sora 1.0 的经验表明数据的数量与质量是训练好模型的关键因此 1.1 在数据集规模化上投入了大量工作参照SVD构建了自动化处理管线包括场景切分、打标captioning、多种打分与过滤、数据集管理脚本与约定详见 docs/data_processing.md原计划使用Panda-70M等数据源约 30M 数据但磁盘 IO 同时成为训练与数据处理的瓶颈最终只准备了 10M 数据集且未跑完整个处理管线最终预训练使用9.7M 视频 2.6M 图片微调使用560K 视频 1.6M 图片。报告还给出了预训练数据集的统计特征图片与视频的 T5 文本 token 分布视频直接使用 Panda 的短 caption其余数据集的 caption 由自身生成通常不足 200 token、以及视频时长分布。训练细节多阶段、动态调整的 9 天攻坚由于算力有限、无法做消融实验Open-Sora 1.1 的训练采用边监控边调整的策略训练中途经历了多次策略变更因此最终未启用 EMA。整个训练在64 张 H800 GPU上耗时约9 天分为以下阶段阶段配置步数耗时要点预热从Pixart-alpha-1024检查点微调不同分辨率图片6k—模型很容易适应多分辨率图像生成使用 SpeeDiTiddpm-speed加速扩散训练Stage 1开启梯度检查点gradient-checkpointing预训练24k4 天主要 240p 视频训练慢推断早期步数比 batch size 更重要掩码比例 10%Stage 1关闭梯度检查点、减小 batch size 以增加步数引入 fps 条件40k2 天主要 144p 视频低分辨率下更容易学习时序知识Stage 1针对长视频学习不佳与半精度噪声问题引入 QK-Normalizationiddpm-speed 换回 iddpm掩码比例提高到 25%17k14 小时主要 144p 视频QK-Norm 下模型快速适应Stage 2切换到更高分辨率22k1 天主要 240p/480p 视频Stage 3切换到高分辨率高质量数据4k1 天主要 480p/720p 视频发现加载上一阶段 optimizer 状态可加速学习Stage 1 合计约 81k 步训练约一周。对应配置文件在 configs/diffusion/train/stage1.pystage1 主体与 configs/diffusion/train/stage2.pystage2/3 主体中其中 stage1 的grad_ckpt_settings (8, 100)即梯度检查点每隔 8 层、最近 100 层启用的配置项stage2 则切换为(100, 100)配合sp_size4的序列并行ring attention等混合并行策略scripts/diffusion/train.py 中的create_colossalai_plugin会按plugin hybrid与plugin_config组装完整并行方案。关键经验总结步数优先模型看到的总样本数相同时早期更小的 batch size、更多步数学习效果更好低分辨率学时序Open-Sora 1.0 的经验表明相对低的分辨率足以学习时序知识半精度稳定性训练中途出现的噪声生成结果被推断为半精度问题QK-Normalization 有效稳定了训练掩码比例影响条件学习10% 掩码时图像条件学习不佳提升到 25% 后改善优化器状态复用Stage 3 加载上一阶段的 optimizer 状态可加速收敛。局限性与未来工作在逼近 Sora 复刻的道路上报告坦承当前模型存在多项局限并一一给出了未来的改进方向生成失败token 总数较大或内容复杂时模型常生成失败疑似时间注意力存在坍缩并已定位到代码潜在 bug后续将修复并增大模型规模与数据量噪声与不流畅长视频生成易出现噪声、不流畅推测原因是未使用时序 VAE参考 PixArt-Sigma 的结论计划开发时序 VAE时间一致性不足推测是训练 FLOPs 不足计划扩充数据并继续训练人物生成质量差缺少人物数据计划补充人物数据继续训练美学评分低受 IO 瓶颈影响未做美学分数过滤计划按美学评分过滤数据并微调长视频质量退化相同 prompt 下视频越长质量越差说明图像质量未能等同适配不同序列长度。这些局限性直接为后续版本Open-Sora 1.2 及之后的技术路线指明了方向也是阅读后续技术报告docs/report_03.md、docs/report_04.md时可以对照追踪的演进主线。延伸阅读模型架构源码opensora/models/mmdit/model.py、opensora/models/mmdit/layers.pyBucket 数据装载实现opensora/datasets/bucket.py、opensora/datasets/sampler.py训练脚本与配置scripts/diffusion/train.py、configs/diffusion/train/stage1.py、configs/diffusion/train/stage2.py配套文档docs/train.md训练指南、docs/config.md配置说明、docs/data_processing.md数据处理、docs/datasets.md数据集【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考