Open-Sora项目训练与微调完整指南

Open-Sora项目训练与微调完整指南

Open-Sora Open-Sora:为所有人实现高效视频制作 Open-Sora 项目地址: https://gitcode.com/gh_mirrors/op/Open-Sora

前言

Open-Sora是一个开源的视频生成模型项目,能够根据文本描述生成高质量的视频内容。本文将详细介绍如何从零开始训练或微调自己的Open-Sora模型,包括环境准备、数据集处理、模型训练与微调等完整流程。

环境准备

在开始训练前,需要安装一些额外的依赖包:

pip install TensorNVMe  # 用于检查点保存,需要cmake支持
pip install pandarallel  # 用于并行处理

TensorNVMe是一个高性能的存储库,能够加速模型检查点的保存过程。pandarallel则提供了数据并行处理能力,可以显著提高大规模数据集的处理效率。

数据集准备

数据集选择与下载

我们以Pexels 45k数据集为例,这是一个经过剪辑和评分筛选的高质量视频数据集。下载数据集到本地:

mkdir datasets
cd datasets
huggingface-cli download --repo-type dataset hpcai-tech/open-sora-pexels-45k --local-dir open-sora-pexels-45k

下载完成后,需要解压并整理数据集:

cd open-sora-pexels-45k
cat tar/pexels_45k.tar.* > pexels_45k.tar
tar -xvf pexels_45k.tar
mv pexels_45k ..

数据集格式要求

数据集需要提供以下关键信息:

  • 视频路径(path)
  • 文本描述(text)
  • 帧数(num_frames)
  • 高度(height)
  • 宽度(width)
  • 宽高比(aspect_ratio)
  • 分辨率(resolution)
  • 帧率(fps)

数据集预处理

使用提供的脚本处理原始数据集:

# 单进程处理
python scripts/cnv/meta.py --input datasets/pexels_45k.csv --output datasets/pexels_45k_nec.csv --num_workers 0

# 多进程处理(推荐)
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 [配置文件路径] --dataset.data-path [数据集路径] [覆盖选项]

例如,使用256px分辨率从头开始训练:

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

配置详解

所有训练配置位于configs/diffusion/train/目录下,支持以下特性:

  1. 配置继承:使用_base_ = ["config_to_inherit"]语法继承其他配置
  2. 命令行参数覆盖:命令行参数会覆盖配置文件中的设置
桶配置(bucket_config)

桶配置用于控制不同训练阶段的数据采样策略,格式如下:

bucket_config = {
    "分辨率": {
        最小帧数: (采样概率, 批量大小),
        ...
    },
    ...
}

例如,256px分辨率下不同帧数的采样策略:

"256px": {
    1: (1.0, 45),   # 图像,100%采样,批量45
    33: (1.0, 12),  # ≥33帧视频,100%采样,批量12
    65: (1.0, 6),   # ≥65帧视频,100%采样,批量6
    ...
}

提供的训练配置

项目提供了多种预设配置:

  1. image.py:仅训练图像生成
  2. stage1.py:256px分辨率视频训练
  3. stage2.py:768px分辨率视频训练(使用序列并行)
  4. stage1_i2v.py:256px分辨率图文视频联合训练
  5. stage2_i2v.py:768px分辨率图文视频联合训练
  6. demo.py:小批量调试配置

模型微调

从Open-Sora v2微调

torchrun --nproc_per_node 8 scripts/diffusion/train.py configs/diffusion/train/stage1.py --dataset.data-path datasets/pexels_45k_necessary.csv --model.from_pretrained ckpts/Open_Sora_v2.safetensors

从Flux-dev模型微调

torchrun --nproc_per_node 8 scripts/diffusion/train.py configs/diffusion/train/stage1.py --dataset.data-path datasets/pexels_45k_necessary.csv --model.from_pretrained ckpts/flux1-dev-fused-rope.safetensors

多GPU训练

使用ColossalAI进行多节点训练:

colossalai run --hostfile hostfiles --nproc_per_node 8 scripts/diffusion/train.py configs/diffusion/train/stage1.py --dataset.data-path datasets/pexels_45k_necessary.csv

其中hostfiles文件包含各节点的IP地址。

训练恢复

完整恢复

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

仅恢复优化器状态

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

注意:如果数据集、批量大小或GPU数量发生变化,数据加载器状态将不再有效。

高级技巧

梯度检查点

通过选择性梯度检查点节省内存:

grad_ckpt_setting = (100, 100)  # (双层检查点数, 单层完整梯度数)
model = dict(
    grad_ckpt_setting=grad_ckpt_setting,
)

可进一步将梯度检查点卸载到CPU:

grad_ckpt_buffer_size = 25 * 1024**3  # 25GB缓冲区

异步检查点保存

启用异步IO加速检查点保存:

--async-io True

大数据集处理

对于超大数据集,可将其分片处理:

python scripts/cnv/shard.py /path/to/dataset.parquet

训练时启用内存高效模式:

--dataset.memory_efficient True

模型推理

训练完成后,可使用以下命令进行推理:

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*

结语

本文详细介绍了Open-Sora项目的完整训练流程,从环境准备到模型微调,涵盖了实际训练中可能遇到的各种情况。通过合理配置训练参数和利用提供的高级功能,开发者可以高效地训练出满足特定需求的视频生成模型。

Open-Sora Open-Sora:为所有人实现高效视频制作 Open-Sora 项目地址: https://gitcode.com/gh_mirrors/op/Open-Sora

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花琼晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值