ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Open-Sora 如何从零训练 Video DC-AE 并在后期加入判别器?

Open-Sora 如何从零训练 Video DC-AE 并在后期加入判别器? Open-Sora 如何从零训练 Video DC-AE 并在后期加入判别器【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora如果你想在 Open-Sora 中训练自己的视频自动编码器完整路径是先只用重建损失与感知损失把 Video DC-AE 从零训起来等模型接近收敛后再加入一个判别器discriminator继续训练最后用自训权重跑重建推理来检查效果。官方给出的规模参考是Video DC-AE 在 8 块 GPU 上从零训练了 3 周见 docs/ae.md。以下操作均基于仓库内的 训练文档、数据与训练文档 以及configs/vae/train/下的两份配置。准备环境按照 README 的 Quickstart 准备基础环境# create a virtual env and activate (conda as an example) conda create -n opensora python3.10 conda activate opensora # download the repo git clone Open-Sora 仓库地址 cd Open-Sora # Ensure torch 2.4.0 pip install -v . # for development mode, pip install -v -e . pip install xformers0.0.27.post2 --index-url https://download.pytorch.org/whl/cu121 # install xformers according to your cuda version pip install flash-attn --no-build-isolationdocs/train.md 还要求额外安装两个训练依赖pip install githttps://github.com/hpcaitech/TensorNVMe.git # requires cmake, for checkpoint saving pip install pandarallel # for parallel processing其中 TensorNVMe 用于检查点保存且依赖 cmakepandarallel 用于数据并行处理。准备数据集docs/ae.md 要求先按 docs/train.md 准备DATASET可以用官方提供的数据集或自定义数据集。以 45k pexels 数据集为例需要约 250GB 下载空间mkdir datasets cd datasets # For Chinese users, export HF_ENDPOINThttps://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数据集解压后包含三个 csvpexels_45k.csv只有路径与文本需处理后才能训练、pexels_45k_necessary.csv包含训练所需信息和pexels_45k_score.csv评分信息。默认的 AE 训练配置读取的就是datasets/pexels_45k_necessary.csv官方数据集解压后已带此文件可直接使用。如果要从pexels_45k.csv自行生成必要信息仓库提供了处理脚本# 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文档注明该过程耗时取决于视频数量。注意上面示例的输出名是datasets/pexels_45k_nec.csv如果你生成的是这个文件而不是配置默认指向的datasets/pexels_45k_necessary.csv需要在训练命令里用--dataset.data_path your_data_path指到实际文件。使用自定义数据集时同样通过该参数传入自定义 csv 至少需要以下列path,text,num_frames,height,width,aspect_ratio,resolution,fps第一阶段从零训练 Video DC-AE主命令8 卡torchrun --nproc_per_node 8 scripts/vae/train.py configs/vae/train/video_dc_ae.py该命令对应 configs/vae/train/video_dc_ae.py与“从零训练”直接相关的关键配置如下配置项值用途model.type/model_namedc_ae/dc-ae-f32t4c128Video DC-AE 架构model.from_scratchTrue从零开始训练dataset.data_pathdatasets/pexels_45k_necessary.csv训练数据bucket_config{256px_ar1:1: {32: (1.0, 1)}}256px、32 帧的视频桶采样概率 1.0、batch size 1optim.lr5e-5HybridAdam 优化器betas(0.9, 0.98)mixed_strategy/mixed_image_ratiomixed_video_image/0.2视频中混入图像样本dtype/pluginbf16/zero2混合精度与 ZeRO-2grad_checkpointFalse默认关闭梯度检查点ckpt_every/keep_n_latest3000/50每 3000 步保存一次检查点保留最近 50 份outputsoutputs实验输出根目录损失配置只有两项因为 Video DC-AE 基于 DC-AE 架构、没有变分成分vae_loss_config dict( perceptual_loss_weight0.5, # weigh the perceptual loss by 0.5 kl_loss_weight0, # no KL loss )docs/ae.md说明感知损失权重 0.5 是实验上有效取值。训练过程中 scripts/vae/train.py 会把 loss 写入 logger、tensorboard如果想在线跟踪加一个 flag 即可torchrun --nproc_per_node 8 scripts/vae/train.py configs/vae/train/video_dc_ae.py --wandb True检查点会按ckpt_every定期保存到outputs下的实验目录目录名形如epoch*-global_step*训练脚本同时支持--load恢复训练恢复规则见 docs/train.md并按keep_n_latest清理旧检查点。可选更长帧数或更高分辨率docs/ae.md给出了两个可选分支。把帧数提到 96文档建议帧数用 32 的倍数4 的倍数也可行bucket_config { 256px_ar1:1: {96: (1.0, 1)}, } grad_checkpoint True或把分辨率提到 512pxbucket_config { 512px_ar1:1: {32: (1.0, 1)}, } grad_checkpoint True两种情况都必须开启grad_checkpoint文档说明这是为了避免 OOM。代价是 AE 训练变慢但推理时可以把spatial_tile_size、temporal_tile_size调大以加快 AE 推理例如之后训练扩散模型时。第二阶段加入判别器继续训练docs/ae.md的描述是当模型接近收敛almost converged时加入判别器并沿用第一阶段的检查点model_ckpt继续训练。文档没有给出“收敛”的量化判定实际操作中依赖第一阶段的 loss 日志logger / tensorboard / wandb判断训练趋势然后挑选一个检查点目录继续torchrun --nproc_per_node 8 scripts/vae/train.py configs/vae/train/video_dc_ae_disc.py --model.from_pretrained model_ckptmodel_ckpt需替换为第一阶段生成的检查点目录路径位于outputs实验目录下形如epoch*-global_step*这是读者必须自己提供的值。configs/vae/train/video_dc_ae_disc.py 通过_base_ [video_dc_ae.py]继承第一阶段的完整配置只追加判别器相关内容discriminator dict( typeN_Layer_discriminator_3D, from_pretrainedNone, input_nc3, n_layers5, conv_clsconv3d ) disc_lr_scheduler dict(warmup_steps0) gen_loss_config dict( gen_start0, # include generator loss from step 0 onwards disc_weight0.05, # weigh the loss by 0.05 ) disc_loss_config dict( disc_start0, # update the discriminator from step 0 onwards disc_loss_typehinge, # the discriminator loss type ) optim_discriminator dict( clsHybridAdam, lr1e-4, eps1e-8, weight_decay0.0, adamw_modeTrue, betas(0.9, 0.98), ) grad_checkpoint True model dict( disc_off_grad_ckpt True, # set to true if your grad_checkpoint is True )几个关键点判别器from_pretrainedNone即从 scratch 训练判别损失为 hinge loss生成器损失权重取小值 0.05判别器学习率 1e-4。该配置把grad_checkpoint覆盖为True并相应设置disc_off_grad_ckptTrue。docs/ae.md对此的解释是只要判别器训练中启用了grad_checkpointing就需要同时设置disc_off_grad_ckptTrue以保证判别损失在后续自适应损失计算时仍有梯度。第二阶段训练时scripts/vae/train.py 会依据配置中是否定义了discriminator来决定是否构建判别器、优化器及其损失函数并在每次保存检查点时把判别器模型、优化器、学习率调度器分别写入该检查点目录下的discriminator、disc_optimizer、disc_lr_scheduler子目录之后若用--load恢复这些状态会被一并加载配置restart_disc可跳过判别器状态加载。验证用自训权重做重建推理训练完成后docs/ae.md给出的检查方式是用自训模型对视频做重建推理torchrun --nproc_per_node 1 --standalone scripts/vae/inference.py configs/vae/inference/video_dc_ae.py --save-dir samples/dcae --model.from_pretrained your_model_ckpt_pathyour_model_ckpt_path替换为你自己训练得到的检查点路径。默认的 推理配置 会加载官方权重./ckpts/F32T4C128_AE.safetensors这里通过--model.from_pretrained覆盖为自己的权重输出样本保存到--save-dir指定的目录配置默认save_dir samples/video_dc_ae可被命令行覆盖同时该配置复用训练数据集datasets/pexels_45k_necessary.csv作为重建输入桶为512px_ar1:1、96 帧。如果 AE 不是在默认 256px/32 帧条件下训练的注意推理配置中的分块tiling参数需要与训练条件对应model dict( ..., use_spatial_tilingTrue, use_temporal_tilingTrue, spatial_tile_size256, temporal_tile_size32, tile_overlap_factor0.25, ..., )docs/ae.md说明因为 Video DC-AE 是在 256px、32 帧视频上训练的spatial_tile_size应设为 256、temporal_tile_size应设为 32如果用自己训练时的分辨率和时长需要相应调整这两个值。限制说明官方参考规模是 8xGPU 训练 3 周从零训练 Video DC-AE 是一个长时间任务启动前确认数据集、磁盘空间和 GPU 数量。第一、二阶段的桶配置与推理的分块参数需要保持一致性默认 256px/32 帧对应spatial_tile_size256、temporal_tile_size32。换更长帧数或更高分辨率训练时必须同时开启grad_checkpoint判别器阶段则连同disc_off_grad_ckpt文档明确这是避免 OOM 的要求。文档未给出“收敛”的量化标准第二阶段何时启动依赖训练日志的趋势判断文档也没有提供重建质量的固定数值指标重建结果以输出目录中的样本为准。下一步如果要用自训的 Video DC-AE 替换扩散管线中的 VAE可以继续阅读 docs/train.md 中的扩散模型训练流程。【免费下载链接】Open-SoraOpen-Sora: Democratizing Efficient Video Production for All项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表