CogVideoX
CogVideoX: 基于专家Transformer的文本到视频扩散模型,由清华大学和智谱AI共同开发,作者包括朱怡杨、滕嘉彦、郑文迪、丁明、黄诗雨、徐家正、杨元明、洪文毅、张晓涵、冯冠宇、尹达、顾晓涛、张宇轩、王伟涵、程烨、刘婷、徐斌、董宇霄、唐杰。
论文摘要如下:
我们介绍了CogVideoX,这是一个大规模的扩散Transformer模型,旨在根据文本提示生成视频。为了高效地建模视频数据,我们提出利用3D变分自编码器(VAE)来压缩视频的空间和时间维度。为了改进文本与视频的对齐,我们提出了一种专家Transformer,并结合专家自适应LayerNorm来促进两种模态之间的深度融合。通过采用渐进式训练技术,CogVideoX擅长生成具有显著运动的长时视频。此外,我们开发了一种有效的文本视频数据处理管道,包括各种数据预处理策略和视频字幕方法。这显著帮助提升了CogVideoX的性能,提高了生成质量和语义对齐。结果显示,CogVideoX在多个机器指标和人类评估中均表现出了最先进的性能。CogVideoX-2B的模型权重已在https://github.com/THUDM/CogVideo公开发布。
此管道由zRzRzRzRzRzRzR贡献。原始代码库可以在这里找到。原始权重可以在hf.co/THUDM下找到。
有两种模型可用于文本到视频和视频到视频的CogVideoX管道:
THUDM/CogVideoX-2b
:运行此模型的推荐dtype为fp16
。THUDM/CogVideoX-5b
:运行此模型的推荐dtype为bf16
。
有一种模型可用于图像到视频的CogVideoX管道:
THUDM/CogVideoX-5b-I2V
:运行此模型的推荐dtype为bf16
。
有两种模型支持姿态可控生成(由阿里巴巴-PAI团队开发):
alibaba-pai/CogVideoX-Fun-V1.1-2b-Pose
:运行此模型的推荐dtype为bf16
。alibaba-pai/CogVideoX-Fun-V1.1-5b-Pose
:运行此模型的推荐dtype为bf16
。
推理
使用torch.compile
来减少推理延迟。
首先,加载管道:
import torch
from diffusers import CogVideoXPipeline, CogVideoXImageToVideoPipeline
from diffusers.utils import export_to_video,load_image
pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b").to("cuda") # or "THUDM/CogVideoX-2b"
如果你正在使用图像到视频的流水线,请按如下方式加载:
pipe = CogVideoXImageToVideoPipeline.from_pretrained("THUDM/CogVideoX-5b-I2V").to("cuda")
然后将流水线的 transformer
组件的内存布局更改为 torch.channels_last
:
pipe.transformer.to(memory_format=torch.channels_last)
编译组件并运行推理:
pipe.transformer = torch.compile(pipeline.transformer, mode="max-autotune", fullgraph=True)
# CogVideoX works well with long and well-described prompts
prompt = "A panda, dressed in a small, red jacket and a tiny hat, sits on a wooden stool in a serene bamboo forest. The panda's fluffy paws strum a miniature acoustic guitar, producing soft, melodic tunes. Nearby, a few other pandas gather, watching curiously and some clapping in rhythm. Sunlight filters through the tall bamboo, casting a gentle glow on the scene. The panda's face is expressive, showing concentration and joy as it plays. The background includes a small, flowing stream and vibrant green foliage, enhancing the peaceful and magical atmosphere of this unique musical performance."
video = pipe(prompt=prompt, guidance_scale=6, num_inference_steps=50).frames[0]
在 80GB A100 机器上的 T2V 基准测试 结果如下:
Without torch.compile(): Average inference time: 96.89 seconds.
With torch.compile(): Average inference time: 76.27 seconds.
内存优化
CogVideoX-2b 需要大约 19 GB 的 GPU 内存来解码 49 帧(6 秒的视频,帧率为 8 FPS),输出分辨率为 720x480(宽 x 高),这使得它无法在消费级 GPU 或免费层级的 T4 Colab 上运行。以下内存优化方法可以用来减少内存占用。要进行复现,你可以参考这个脚本。
pipe.enable_model_cpu_offload()
:- 未启用 CPU 卸载时,内存使用量为
33 GB
- 启用 CPU 卸载后,内存使用量为
19 GB
- 未启用 CPU 卸载时,内存使用量为
pipe.enable_sequential_cpu_offload()
:- 类似于
enable_model_cpu_offload
,但会显著降低内存使用量,代价是推理速度变慢 - 启用后,内存使用量低于
4 GB
- 类似于
pipe.vae.enable_tiling()
:- 启用 CPU 卸载和分块后,内存使用量为
11 GB
- 启用 CPU 卸载和分块后,内存使用量为
pipe.vae.enable_slicing()
量化推理
torchao 和 optimum-quanto 可以用来量化文本编码器、Transformer 和 VAE 模块,以降低内存需求。这使得模型可以在免费层级的 T4 Colab 或更低 VRAM 的 GPU 上运行!
值得注意的是,torchao 量化与 torch.compile 完全兼容,这使得推理速度大大加快。此外,模型可以序列化并以量化数据类型存储,以节省磁盘空间。请在下面的 gist 中找到示例和基准测试。
CogVideoXPipeline
[[autodoc]] CogVideoXPipeline
- all
- call
CogVideoXImageToVideoPipeline
[[autodoc]] CogVideoXImageToVideoPipeline
- all
- call
CogVideoXVideoToVideoPipeline
[[autodoc]] CogVideoXVideoToVideoPipeline
- all
- call
CogVideoXFunControlPipeline
[[autodoc]] CogVideoXFunControlPipeline
- all
- call
CogVideoXPipelineOutput
[[autodoc]] pipelines.cogvideo.pipeline_output.CogVideoXPipelineOutput