微调 Open-Sora
创建包含 OpenSora 镜像的实例
登录潞晨云平台
- 使用您的账号信息登录到潞晨云的管理控制台。
进入云主机界面
- 在控制台中找到并点击进入“实例”的服务选项。
创建实例
- 点击“创建实例”按钮开始创建新的算力机器实例。
配置实例
- 选择合适的 GPU 类型,确保它满足您的运算需求。
- 选择系统镜像时,挑选 OpenSora 镜像。
创建或选择共享存储(如果需要)
- 如果之前已经创建了共享存储,可以直接跳过此步骤。
- 否则,前往“共享存储”或者相应的存储服务页面,创建一个新的共享存储卷。
- 创建时需注意设置好存储大小和其他参数,以适应多个实例同时访问的需求。
挂载共享存储
- 在创建实例的过程中,允许您添加或挂载已有的存储卷。
- 选择之前创建的共享存储,并正确配置挂载点。
初始化实例
- 完成上述所有配置后,提交创建请求。
- 实例创建完成后,通常会经历一个初始化过程,在这期间请耐心等待。
使用实例
- 初始化完成后,您可以通过 SSH 或其他远程连接方式登录到新创建的实例。
- 根据需要配置环境,并开始使用 OpenSora 镜像进行工作。
微调 OpenSora 训练配置
在 OpenSora 镜像中,已为多种训练和推理任务提供了详尽的配置选项。具体配置文件位于 ~/Open-Sora/configs
目录下。本文档将指导如何使用 opensora-v1-2/train/stage3.py
中的配置来微调个性化 OpenSora 模型。
1. 数据集配置
dataset = dict(
type="VariableVideoTextDataset",
transform_name="resize_crop",
)
说明:
- 类型:指定训练数据集的类型。在此配置中,使用了一个可变视频文本数据集,这意味着数据集中的视频和文本内容可以有不同的长度和格式。
- 转换:
transform_name="resize_crop"
表示在数据加载过程中应用的变换操作。这里执行的是缩放和裁剪,目的是将视频帧调整至统一尺寸。
注意:本文档使用的是 OpenSora 镜像中已处理的数据集。如需创建个性化训练数据集,请参照数据处理指南。
2. 桶配置
bucket_config = { # 20s/it
"144p": {1: (1.0, 475), 51: (1.0, 51), 102: (1.0, 27), 204: (1.0, 13), 408: (1.0, 6)},
"256": {1: (1.0, 297), 51: (0.5, 20), 102: (0.5, 10), 204: (0.5, 5), 408: ((0.5, 0.5), 2)},
"240p": {1: (1.0, 297), 51: (0.5, 20), 102: (0.5, 10), 204: (0.5, 5), 408: ((0.5, 0.4), 2)},
"360p": {1: (1.0, 141), 51: (0.5, 8), 102: (0.5, 4), 204: (0.5, 2), 408: ((0.5, 0.3), 1)},
"512": {1: (1.0, 141), 51: (0.5, 8), 102: (0.5, 4), 204: (0.5, 2), 408: ((0.5, 0.2), 1)},
"480p": {1: (1.0, 89), 51: (0.5, 5), 102: (0.5, 3), 204: ((0.5, 0.5), 1), 408: (0.0, None)},
"720p": {1: (0.3, 36), 51: (0.2, 2), 102: (0.1, 1), 204: (0.0, None)},
"1024": {1: (0.3, 36), 51: (0.1, 2), 102: (0.1, 1), 204: (0.0, None)},
"1080p": {1: (0.1, 5)},
"2048": {1: (0.05, 5)},
}
说明:
- 定义:此配置定义了不同分辨率视频的处理方式。每个分辨率对应一个字典,其中键为帧数,值为一个元组,表示保留率和最大批量大小。
- 保留率:控制视频被分配到特定桶的概率。
- 最大批量大小:控制每个桶的批处理大小。例如,对于 480p 分辨率的 102 帧视频,最大批处理大小为 3。
建议:根据您的数据集特性和硬件资源选择合适的桶配置。例如,如果您的数据集包含大量低分辨率视频,可以适当增加低分辨率视频的保留率和最大批量大小。
3. 梯度检查点技术
grad_checkpoint = True
说明:当内存受限时,建议启用梯度检查点技术。
4. 加速设置
num_workers = 4
num_bucket_build_workers = 16
dtype = "bf16"
plugin = "zero2"
说明:
num_workers
:确定分布式场景下的数据采样线程数。本配置适用于四卡数据并行(由数据并行度确定)。num_bucket_build_workers
:构建桶索引时使用的线程数。增加线程数可加快索引构建速度,但也消耗更多资源。dtype
:使用的数值类型。bf16 可减少内存占用和计算时间,并且防止梯度溢出。plugin
:使用的 ColossalAI 加速插件。zero2 是一种高效的分布式训练技术,有助于减少内存占用
5. 模型配置
model = dict(
type="STDiT3-XL/2",
from_pretrained="hpcai-tech/OpenSora-STDiT-v3",
qk_norm=True,
enable_flash_attn=True,
enable_layernorm_kernel=True,
freeze_y_embedder=True,
)
vae = dict(
type="OpenSoraVAE_V1_2",
from_pretrained="hpcai-tech/OpenSora-VAE-v1.2",
micro_frame_size=17,
micro_batch_size=4,
)
text_encoder = dict(
type="t5",
from_pretrained="DeepFloyd/t5-v1_1-xxl",
model_max_length=300,
shardformer=True,
)
scheduler = dict(
type="rflow",
use_timestep_transform=True,
sample_method="logit-normal",
)
Open-Sora 使用的模型可在 Hugging Face 中下载,模型名称对应如下:
TypeModel NameSTDiT3-XL/2hpcai-tech/OpenSora-STDiT-v3OpenSoraVAE_V1_2hpcai-tech/OpenSora-VAE-v1.2t5DeepFloyd/t5-v1_1-xxl
说明:可在 common data 中找到对应模型,并更新对应的 from_pretrained 路径。
6. 掩码设置
Python复制
mask_ratios = {
"random": 0.01,
"intepolate": 0.002,
"quarter_random": 0.002,
"quarter_head": 0.002,
"quarter_tail": 0.002,
"quarter_head_tail": 0.002,
"image_random": 0.0,
"image_head": 0.22,
"image_tail": 0.005,
"image_head_tail": 0.005,
}
说明:通过在训练时添加噪声,增强模型的鲁棒性。
7. 实验管理
seed = 42
outputs = "outputs"
wandb = False
epochs = 1000
log_every = 10
ckpt_every = 200
说明:
seed
:设置随机种子以确保结果的可复现性。outputs
:输出目录,用于保存训练过程中生成的日志文件和模型检查点。wandb
:是否使用 WandB 进行实验跟踪。epochs
:总的训练轮次。log_every
:每多少个迭代轮次打印一次日志。ckpt_every
:每多少个迭代轮次保存一次检查点。
8. 优化设置
load = None
grad_clip = 1.0
lr = 1e-4
ema_decay = 0.99
adam_eps = 1e-15
warmup_steps = 1000
说明:
load
:从何处加载模型权重。若设为 None,则从头开始微调。grad_clip
:梯度裁剪值,防止梯度爆炸。lr
:学习率,影响模型的收敛速度和性能。ema_decay
:指数移动平均的衰减率,平滑模型更新。adam_eps
:Adam 优化器的 ε 值,防止除零错误。warmup_steps
:学习率预热步数,避免训练初期的不稳定。
训练启动命令
以使用开源 Disney 数据为例,请上传 Disney-VideoGeneration-Dataset.zip 到 /root,并解压。同时,上传 modified_data.csv 到 /root。
torchrun --standalone --nproc_per_node 4 scripts/train.py configs/opensora-v1-2/train/stage3.py --data-path modified_data.csv
说明:
--standalone
:允许 torchrun 自动配置环境变量(仅限单机模式)。--nproc_per_node
:指定使用的 GPU 数量。scripts/train.py
:OpenSora 提供的训练脚本。configs/opensora-v1-2/train/stage3.py
:配置文件路径。--data-path
:指定数据集的路径。
表明训练已开始。