Skip to content

Latest commit

 

History

History
119 lines (90 loc) · 5.43 KB

README_zh.md

File metadata and controls

119 lines (90 loc) · 5.43 KB

CogVideoX diffusers 微调方案

Read this in English

日本語で読む

本功能尚未完全完善,如果您想查看SAT版本微调,请查看这里。其数据集格式与本版本不同。

硬件要求

  • CogVideoX-2B / 5B T2V LORA: 1 * A100 (5B need to use --use_8bit_adam)
  • CogVideoX-2B SFT: 8 * A100 (制作中)
  • CogVideoX-5B-I2V 暂未支持

安装依赖

由于相关代码还没有被合并到diffusers发行版,你需要基于diffusers分支进行微调。请按照以下步骤安装依赖:

git clone https://github.com/huggingface/diffusers.git
cd diffusers # Now in Main branch
pip install -e .

准备数据集

首先,你需要准备数据集,数据集格式如下,其中,videos.txt 存放 videos 中的视频。

.
├── prompts.txt
├── videos
└── videos.txt

你可以从这里下载 迪士尼汽船威利号

视频微调数据集作为测试微调。

配置文件和运行

accelerate 配置文件如下:

  • accelerate_config_machine_multi.yaml 适合多GPU使用
  • accelerate_config_machine_single.yaml 适合单GPU使用

finetune 脚本配置文件如下:

accelerate launch --config_file accelerate_config_machine_single.yaml --multi_gpu \  # 使用 accelerate 启动多GPU训练,配置文件为 accelerate_config_machine_single.yaml
  train_cogvideox_lora.py \  # 运行的训练脚本为 train_cogvideox_lora.py,用于在 CogVideoX 模型上进行 LoRA 微调
  --gradient_checkpointing \  # 启用梯度检查点功能,以减少显存使用
  --pretrained_model_name_or_path $MODEL_PATH \  # 预训练模型路径,通过 $MODEL_PATH 指定
  --cache_dir $CACHE_PATH \  # 模型缓存路径,由 $CACHE_PATH 指定
  --enable_tiling \  # 启用tiling技术,以分片处理视频,节省显存
  --enable_slicing \  # 启用slicing技术,将输入切片,以进一步优化内存
  --instance_data_root $DATASET_PATH \  # 数据集路径,由 $DATASET_PATH 指定
  --caption_column prompts.txt \  # 指定用于训练的视频描述文件,文件名为 prompts.txt
  --video_column videos.txt \  # 指定用于训练的视频路径文件,文件名为 videos.txt
  --validation_prompt "" \  # 验证集的提示语 (prompt),用于在训练期间生成验证视频
  --validation_prompt_separator ::: \  # 设置验证提示语的分隔符为 :::
  --num_validation_videos 1 \  # 每个验证回合生成 1 个视频
  --validation_epochs 100 \  # 每 100 个训练epoch进行一次验证
  --seed 42 \  # 设置随机种子为 42,以保证结果的可复现性
  --rank 128 \  # 设置 LoRA 参数的秩 (rank) 为 128
  --lora_alpha 64 \  # 设置 LoRA 的 alpha 参数为 64,用于调整LoRA的学习率
  --mixed_precision bf16 \  # 使用 bf16 混合精度进行训练,减少显存使用
  --output_dir $OUTPUT_PATH \  # 指定模型输出目录,由 $OUTPUT_PATH 定义
  --height 480 \  # 视频高度为 480 像素
  --width 720 \  # 视频宽度为 720 像素
  --fps 8 \  # 视频帧率设置为 8 帧每秒
  --max_num_frames 49 \  # 每个视频的最大帧数为 49 帧
  --skip_frames_start 0 \  # 跳过视频开头的帧数为 0
  --skip_frames_end 0 \  # 跳过视频结尾的帧数为 0
  --train_batch_size 4 \  # 训练时的 batch size 设置为 4
  --num_train_epochs 30 \  # 总训练epoch数为 30
  --checkpointing_steps 1000 \  # 每 1000 步保存一次模型检查点
  --gradient_accumulation_steps 1 \  # 梯度累计步数为 1,即每个 batch 后都会更新梯度
  --learning_rate 1e-3 \  # 学习率设置为 0.001
  --lr_scheduler cosine_with_restarts \  # 使用带重启的余弦学习率调度器
  --lr_warmup_steps 200 \  # 在训练的前 200 步进行学习率预热
  --lr_num_cycles 1 \  # 学习率周期设置为 1
  --optimizer AdamW \  # 使用 AdamW 优化器
  --adam_beta1 0.9 \  # 设置 Adam 优化器的 beta1 参数为 0.9
  --adam_beta2 0.95 \  # 设置 Adam 优化器的 beta2 参数为 0.95
  --max_grad_norm 1.0 \  # 最大梯度裁剪值设置为 1.0
  --allow_tf32 \  # 启用 TF32 以加速训练
  --report_to wandb  # 使用 Weights and Biases 进行训练记录与监控

运行脚本,开始微调

单机(单卡,多卡)微调:

bash finetune_single_rank.sh

多机多卡微调:

bash finetune_multi_rank.sh #需要在每个节点运行

载入微调的模型

  • 请关注cli_demo.py 以了解如何加载微调的模型。

最佳实践

  • 包含70个分辨率为 200 x 480 x 720(帧数 x 高 x 宽)的训练视频。通过数据预处理中的帧跳过,我们创建了两个较小的49帧和16帧数据集,以加快实验速度,因为CogVideoX团队建议的最大帧数限制是49帧。我们将70个视频分成三组,分别为10、25和50个视频。这些视频的概念性质相似。
  • 25个及以上的视频在训练新概念和风格时效果最佳。
  • 现使用可以通过 --id_token 指定的标识符token进行训练效果更好。这类似于 Dreambooth 训练,但不使用这种token的常规微调也可以工作。
  • 原始仓库使用 lora_alpha 设置为 1。我们发现这个值在多次运行中效果不佳,可能是因为模型后端和训练设置的不同。我们的建议是将 lora_alpha 设置为与 rank 相同或 rank // 2。
  • 建议使用 rank 为 64 及以上的设置。