Open-Sora 如何用 stage1_i2v 配置同时训练 t2v 与 i2v?
2026/9/12 21:39:09 网站建设 项目流程

Open-Sora 如何用 stage1_i2v 配置同时训练 t2v 与 i2v?

【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora

如果你想在 256px 分辨率下训练一个模型,让它同时具备文本生成视频(t2v)和图生视频(i2v)能力,Open-Sora 提供的 stage1_i2v.py 配置就是为此设计的:它在 stage1 视频训练的基础上,通过condition_config为每个训练样本按权重随机分配 t2v、i2v_head、i2v_loop、i2v_tail 四种训练条件,从而在一次训练中混合覆盖 t2v 与 i2v 任务。本文按“准备 → 理解配置 → 启动训练 → 验证”的顺序给出可直接执行的操作路径。

stage1_i2v 配置改了什么

stage1_i2v.py 的完整内容如下:

_base_ = ["stage1.py"] # Define model components model = dict(cond_embed=True) condition_config = dict( t2v=1, i2v_head=5, # train i2v (image as first frame) with weight 5 i2v_loop=1, # train image connection with weight 1 i2v_tail=1, # train i2v (image as last frame) with weight 1 ) lr = 1e-5 optim = dict(lr=lr)

它相对 stage1.py 的差异有三处:

  1. model = dict(cond_embed=True):开启模型的视觉条件嵌入分支,用于接收图像条件。
  2. condition_config:定义混合训练条件的键和权重。训练脚本 prepare_visual_condition_uncausal 会在每个 batch 内按random.choices(mask_cond_options, weights=mask_cond_weights, ...)为每个样本抽取一种条件,因此这里的数值就是各条件被抽中的相对权重:
    • i2v_head:将首个 latent 帧 mask 掉,仅以单独编码的图像作为条件(image as first frame),权重 5;
    • i2v_loop:mask 首、末两个 latent 帧,训练首尾图像衔接(image connection),权重 1;
    • i2v_tail:mask 末尾 latent 帧,以末帧图像作为条件(image as last frame),权重 1;
    • t2v:不施加视觉条件的文本到视频训练,权重 1。
  3. 学习率从 stage1 的5e-5覆盖为1e-5

condition_config只覆盖 video 样本(代码中if T > 1分支才读取该配置),图像样本不受影响。由于_base_继承机制,stage1 的bucket_config(256px 分桶、按帧数区分的 batch size)、grad_ckpt_settings = (8, 100)ckpt_every = 2000等设置都会继续生效,无需在 i2v 配置中重复。

准备条件

1. 安装环境

按 README 的基础安装:

# create a virtual env and activate (conda as an example) conda create -n opensora python=3.10 conda activate opensora # download the repo git clone https://github.com/hpcaitech/Open-Sora cd Open-Sora # Ensure torch >= 2.4.0 pip install -v . # for development mode, `pip install -v -e .` pip install xformers==0.0.27.post2 --index-url https://download.pytorch.org/whl/cu121 # install xformers according to your cuda version pip install flash-attn --no-build-isolation

训练还需要额外安装 docs/train.md 中列出的两个包(TensorNVMe 需要系统装有 cmake,用于保存 checkpoint):

pip install git+https://github.com/hpcaitech/TensorNVMe.git # requires cmake, for checkpoint saving pip install pandarallel # for parallel processing

2. 准备数据集

数据集需为csvparquet格式。文档以 45k pexels 数据集为例(约 250GB,下载与解压会占用大量磁盘空间):

mkdir datasets cd datasets # For Chinese users, export HF_ENDPOINT=https://hf-mirror.com to speed up the download huggingface-cli download --repo-type dataset hpcai-tech/open-sora-pexels-45k --local-dir open-sora-pexels-45k # 250GB cd open-sora-pexels-45k cat tar/pexels_45k.tar.* > pexels_45k.tar tar -xvf pexels_45k.tar mv pexels_45k .. # make sure the path is Open-Sora/datasets/pexels_45k

官方提供pexels_45k_necessary.csv(含训练所需的全部信息),可直接作为--dataset.data-path使用。如果使用自定义数据集,csv 至少包含以下列,并需先用scripts/cnv/meta.py补充元信息(用于任意宽高比、分辨率和帧数的训练):

path,text,num_frames,height,width,aspect_ratio,resolution,fps
# single process python scripts/cnv/meta.py --input datasets/pexels_45k.csv --output datasets/pexels_45k_nec.csv --num_workers 0 # parallel process python scripts/cnv/meta.py --input datasets/pexels_45k.csv --output datasets/pexels_45k_nec.csv --num_workers 64

启动训练

训练命令格式为:

torchrun --nproc_per_node 8 scripts/diffusion/train.py [path/to/config] --dataset.data-path [path/to/dataset] [override options]

因此用 stage1_i2v 配置混合训练 t2v 与 i2v 的主命令是:

torchrun --nproc_per_node 8 scripts/diffusion/train.py configs/diffusion/train/stage1_i2v.py --dataset.data-path datasets/pexels_45k_necessary.csv

命令行参数可以覆盖配置文件中的任意项(例如--lr 1e-5覆盖lr),但 i2v 配置里的condition_config权重不建议随手改,它直接决定 t2v 与三种 i2v 条件的混合比例。

训练过程中 checkpoint 每ckpt_every = 2000步保存一次,保留最近keep_n_latest = 20个,输出在outputs/下。可选:

  • 多机训练改用colossalai run --hostfile hostfiles ...hostfiles中每行一个节点 IP;
  • --wandb True把训练过程记录到 wandb;
  • --async-io True异步保存 checkpoint(依赖 ColossalAI 支持)。

中断后恢复训练用--load,它会同时加载 optimizer 和 dataloader 状态:

torchrun --nproc_per_node 8 scripts/diffusion/train.py configs/diffusion/train/stage1_i2v.py --dataset.data-path datasets/pexels_45k_necessary.csv --load outputs/your_experiment/epoch*-global_step*

注意:如果数据集、batch size 或 GPU 数量发生变化,dataloader 状态不再有参考意义,此时加--start-step 0 --start-epoch 0只加载 optimizer 状态。

训练完成后验证

docs/train.md 的验证方式是对 checkpoint 直接跑推理。checkpoint 路径用outputs/your_experiment/epoch*-global_step*通配符指定。

t2v 侧(text-to-image-to-video 流水线,即 t2i2v 配置):

torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --model.from_pretrained outputs/your_experiment/epoch*-global_step*

i2v 侧(给定参考图,验证i2v_head条件是否生效):

torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/256px.py --cond_type i2v_head --prompt "A plump pig wallows in a muddy pond on a rustic farm, ..." --ref assets/texts/i2v.png --model.from_pretrained outputs/your_experiment/epoch*-global_step*

其中--ref指向参考图片,仓库自带示例图 i2v.png 可直接用于冒烟测试;也可以用--dataset.data-path assets/texts/i2v.csv批量生成。生成结果保存在--save-dir指定目录,文档未给出量化成功标准,以人工检查视频是否符合 prompt 和参考图为准。

限制与边界

  • stage1_i2v.py训练的是256px 分辨率的 t2v + i2v 混合模型。要升级到 768px 并继续混合训练,文档提供对应的stage2_i2v.py配置,可视为本配置之后的延伸路径。
  • 各配置的 batch size 是在 H200(140GB 显存)上搜出来的,更小显存的 GPU 需要自行通过命令行覆盖 batch size 相关项。
  • condition_configi2v_head权重为 5,明显高于其余条件,说明官方混合比例偏向“首帧条件”这一 i2v 形态;调整该比例属于自定义实验,文档未给出推荐取值。
  • 训练细节(tensor parallelism、sequence parallelism、Zero 2、data prefetching 等)文档指向 tech report,本文不展开。

【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询