1- # CogVideoX Factory
1+ # CogVideoX Factory 🧪
22
3- ## 简介
3+ 在 24GB GPU 内存下微调 Cog 系列视频模型以生成自定义视频 ⚡️📼
44
5- 这是用于 CogVideoX 微调的仓库。
5+ TODO:添加有趣的视频结果表
6+
7+ ## 快速开始
8+
9+ 确保已安装所需的依赖:` pip install -r requirements.txt ` 。
10+
11+ 然后下载数据集:
12+
13+ ``` bash
14+ # 安装 `huggingface_hub`
15+ huggingface-cli download --repo-type dataset Wild-Heart/Disney-VideoGeneration-Dataset --local-dir video-dataset-disney
16+ ```
17+
18+ 然后启动文本到视频的 LoRA 微调:
19+
20+ ``` bash
21+ TODO
22+ ```
23+
24+ 我们现在可以使用训练好的模型进行推理:
25+
26+ ``` python
27+ TODO
28+ ```
29+
30+ 我们还可以使用 LoRA 微调 5B 版本:
31+
32+ ``` python
33+ TODO
34+ ```
35+
36+ 在下方的部分中,我们提供了有关更多选项的详细信息,这些选项旨在使视频模型的微调尽可能易于使用。
637
738## 数据集准备
839
9- 创建两个文件,一个文件包含以换行符分隔的提示词,另一个文件包含以换行符分隔的视频数据路径 (视频文件的路径必须相对于您在指定 ` --data_root ` 时传递的路径)。让我们通过一个例子来更好地理解这一点 !
40+ 创建两个文件,一个文件包含逐行分隔的提示,另一个文件包含逐行分隔的视频数据路径 (视频文件的路径必须相对于您在指定 ` --data_root ` 时传递的路径)。让我们通过一个示例来更好地理解这一点 !
1041
11- 假设您将 ` --data_root ` 指定为 ` /dataset ` ,并且该目录包含文件 :` prompts.txt ` 和 ` videos.txt ` 。
42+ 假设您指定的 ` --data_root ` 为 ` /dataset ` ,并且该目录包含以下文件 :` prompts.txt ` 和 ` videos.txt ` 。
1243
13- ` prompts.txt ` 文件应包含以换行符分隔的提示词 :
44+ ` prompts.txt ` 文件应包含逐行分隔的提示 :
1445
1546```
16- 一段黑白动画序列,主角是一只名为 Rabbity Ribfried 的兔子和一只拟人化的山羊,在一个充满音乐和趣味的环境中,展示他们不断发展的互动 。
17- 一段黑白动画序列,场景在船甲板上 ,主角是一只名为 Bully Bulldoger 的斗牛犬角色,展示了夸张的面部表情和肢体语言。角色从自信到专注,再到紧张和痛苦,展示了一系列情绪,随着它克服挑战 。船的内部在背景中保持静止,只有简单的细节,如钟声和开着的门。角色的动态动作和变化的表情推动了故事的发展,没有镜头移动,确保观众专注于其不断变化的反应和肢体动作 。
47+ 一段黑白动画序列,主角是一只名为 Rabbity Ribfried 的兔子和一只拟人化的山羊,展示了它们在音乐与游戏环境中的互动演变 。
48+ 一段黑白动画序列,发生在船甲板上 ,主角是一只名为 Bully Bulldoger 的斗牛犬,展现了夸张的面部表情和肢体语言。角色从自信、专注逐渐转变为紧张与痛苦,展示了随着挑战出现的情感变化 。船的内部在背景中保持静止,只有一些简单的细节,如钟声和敞开的门。角色的动态动作和不断变化的表情推动了叙事,没有摄像机运动来分散注意力 。
1849...
1950```
2051
21- ` videos.txt ` 文件应包含以换行符分隔的视频文件路径 。请注意,路径应相对于 ` --data_root ` 目录。
52+ ` videos.txt ` 文件应包含逐行分隔的视频文件路径 。请注意,路径应相对于 ` --data_root ` 目录。
2253
2354``` bash
2455videos/00000.mp4
2556videos/00001.mp4
2657...
2758```
2859
29- 总体而言,如果您在数据集根目录运行 ` tree ` 命令,您的数据集应如下所示:
60+ 整体而言,如果在数据集根目录运行 ` tree ` 命令,您的数据集应如下所示:
3061
3162``` bash
3263/dataset
@@ -38,58 +69,51 @@ videos/00001.mp4
3869 ├── ...
3970```
4071
41- 使用此格式时,` --caption_column ` 必须是 ` prompts.txt ` ,` --video_column ` 必须是 ` videos.txt ` 。如果您的数据存储在 CSV 文件中,您也可以指定 ` --dataset_file ` 为 CSV 的路径,` --caption_column ` 和 ` --video_column ` 为 CSV 文件中的实际列名。
72+ 使用此格式时,` --caption_column ` 必须是 ` prompts.txt ` ,` --video_column ` 必须是 ` videos.txt ` 。如果您将数据存储在 CSV 文件中,还可以指定 ` --dataset_file ` 为 CSV 的路径,` --caption_column ` 和 ` --video_column ` 为 CSV 文件中的实际列名。
4273
43- 例如,让我们使用这个 [ Disney 数据集 ] ( https://huggingface.co/datasets/Wild-Heart/Disney-VideoGeneration-Dataset ) 进行微调 。要下载,可以使用 🤗 Hugging Face CLI。
74+ 例如,让我们使用 [ 这个 ] ( https://huggingface.co/datasets/Wild-Heart/Disney-VideoGeneration-Dataset ) Disney 数据集进行微调 。要下载,您可以使用 🤗 Hugging Face CLI。
4475
4576``` bash
4677huggingface-cli download --repo-type dataset Wild-Heart/Disney-VideoGeneration-Dataset --local-dir video-dataset-disney
4778```
4879
80+ TODO:添加一个关于创建和使用预计算嵌入的部分。
81+
4982## 训练
5083
51- TODO
84+ 我们提供了与 [ Cog 系列模型 ] ( https://huggingface.co/collections/THUDM/cogvideo-66c08e62f1685a3ade464cce ) 兼容的文本到视频和图像到视频生成的训练脚本。
5285
53- 请查看 ` training/ *.sh`
86+ 查看 ` *.sh ` 文件
5487
5588注意:未在 MPS 上测试
5689
5790## 内存需求
5891
59- 训练支持并验证的内存优化包括:
92+ <table align =" center " >
93+ <tr >
94+ <td align =" center " ><a href =" https://www.youtube.com/watch?v=UvRl4ansfCg " > 使用 PyTorch 消除 OOM</a ></td >
95+ </tr >
96+ <tr >
97+ <td align =" center " ><img src =" assets/slaying-ooms.png " style =" width : 480px ; height : 480px ;" ></td >
98+ </tr >
99+ </table >
60100
61- - 来自 [ TorchAO] ( https://github.com/pytorch/ao ) 的 ` CPUOffloadOptimizer ` 。
62- - 来自 [ bitsandbytes] ( https://huggingface.co/docs/bitsandbytes/optimizers ) 的低位优化器。
101+ 支持和验证的内存优化训练选项包括:
63102
64- ### LoRA 微调
103+ - [ ` torchao ` ] ( https://github.com/pytorch/ao ) 中的 ` CPUOffloadOptimizer ` 。您可以阅读它的能力和限制 [ 此处] ( https://github.com/pytorch/ao/tree/main/torchao/prototype/low_bit_optim#optimizer-cpu-offload ) 。简而言之,它允许您使用 CPU 存储可训练的参数和梯度。这导致优化器步骤在 CPU 上进行,需要一个快速的 CPU 优化器,例如 ` torch.optim.AdamW(fused=True) ` 或在优化器步骤上应用 ` torch.compile ` 。此外,建议不要将模型编译用于训练。梯度裁剪和积累尚不支持。
104+ - [ ` bitsandbytes ` ] ( https://huggingface.co/docs/bitsandbytes/optimizers ) 中的低位优化器。TODO:测试并使 [ ` torchao ` ] ( https://github.com/pytorch/ao/tree/main/torchao/prototype/low_bit_optim ) 工作
105+ - DeepSpeed Zero2:由于我们依赖 ` accelerate ` ,请按照[ 本指南] ( https://huggingface.co/docs/accelerate/en/usage_guides/deepspeed ) 配置 ` accelerate ` 以启用 DeepSpeed Zero2 优化。
106+
107+ > [ !IMPORTANT]
108+ > 内存需求是在运行 ` training/prepare_dataset.py ` 后报告的,它将视频和字幕转换为潜变量和嵌入。在训练过程中,我们直接加载潜变量和嵌入,而不需要 VAE 或 T5 文本编码器。但是,如果您执行验证/测试,则必须加载这些内容,并增加所需的内存量。不执行验证/测试可以节省大量内存,对于使用较小 VRAM 的 GPU,这可以用于专注于训练。
109+ >
110+ > 如果您选择运行验证/测试,可以通过指定 ` --enable_model_cpu_offload ` 在较低 VRAM 的 GPU 上节省一些内存。
65111
66- <details >
67- <summary > AdamW </summary >
68-
69- With ` train_batch_size = 1 ` :
70-
71- | model | lora rank | gradient_checkpointing | memory_before_training | memory_before_validation | memory_after_validation | memory_after_testing |
72- | :------------------:| :---------:| :----------------------:| :----------------------:| :------------------------:| :-----------------------:| :--------------------:|
73- | THUDM/CogVideoX-2b | 16 | False | 12.945 | 43.764 | 46.918 | 24.234 |
74- | THUDM/CogVideoX-2b | 16 | True | 12.945 | 12.945 | 21.121 | 24.234 |
75- | THUDM/CogVideoX-2b | 64 | False | 13.035 | 44.314 | 47.469 | 24.469 |
76- | THUDM/CogVideoX-2b | 64 | True | 13.036 | 13.035 | 21.564 | 24.500 |
77- | THUDM/CogVideoX-2b | 256 | False | 13.095 | 45.826 | 48.990 | 25.543 |
78- | THUDM/CogVideoX-2b | 256 | True | 13.094 | 13.095 | 22.344 | 25.537 |
79- | THUDM/CogVideoX-5b | 16 | True | 19.742 | 19.742 | 28.746 | 38.123 |
80- | THUDM/CogVideoX-5b | 64 | True | 20.006 | 20.818 | 30.338 | 38.738 |
81- | THUDM/CogVideoX-5b | 256 | True | 20.771 | 22.119 | 31.939 | 41.537 |
82-
83- With ` train_batch_size = 4 ` :
84-
85- | model | lora rank | gradient_checkpointing | memory_before_training | memory_before_validation | memory_after_validation | memory_after_testing |
86- | :------------------:| :---------:| :----------------------:| :----------------------:| :------------------------:| :-----------------------:| :--------------------:|
87- | THUDM/CogVideoX-2b | 16 | True | 12.945 | 21.803 | 21.814 | 24.322 |
88- | THUDM/CogVideoX-2b | 64 | True | 13.035 | 22.254 | 22.254 | 24.572 |
89- | THUDM/CogVideoX-2b | 256 | True | 13.094 | 22.020 | 22.033 | 25.574 |
90- | THUDM/CogVideoX-5b | 16 | True | 19.742 | 46.492 | 46.492 | 38.197 |
91- | THUDM/CogVideoX-5b | 64 | True | 20.006 | 47.805 | 47.805 | 39.365 |
92- | THUDM/CogVideoX-5b | 256 | True | 20.771 | 47.268 | 47.332 | 41.008 |
112+ ### LoRA 微调
93113
94114> [ !NOTE]
95- >
115+ > 图像到视频 LoRA 微调的内存需求与 ` THUDM/CogVideoX-5b ` 上的文本到视频类似,因此未明确报告。
116+ >
117+ > 此外,要为 I2V 微调准备测试图像,您可以通过修改脚本动态生成它们,或使用以下命令从您的训练数据中提取一些帧:
118+ > ` ffmpeg -i input.mp4 -frames:v 1 frame.png ` ,
119+ > 或提供一个有效且可访问的图像 URL。
0 commit comments