CogVideoX1.5-5B
📄 Read in English | 🤗 Huggingface Space | 🌐 Github | 📜 arxiv
模型介绍
CogVideoX是 清影 同源的开源版本视频生成模型。下表展示我们在本代提供的视频生成模型列表相关信息:
模型名 | CogVideoX1.5-5B (当前仓库) | CogVideoX1.5-5B-I2V | |||
---|---|---|---|---|---|
视频分辨率 | 1360 * 768 | 256 <= W <=1360 256 <= H <=768 W,H % 16 == 0 |
|||
推理精度 | BF16(推荐), FP16, FP32,FP8*,INT8,不支持INT4 | ||||
单GPU显存消耗 | BF16: 9GB minimum* | ||||
多GPU显存消耗 | BF16: 15GB* |
||||
推理速度 (Step = 50, BF16) |
单卡A100: ~1000秒(5秒视频) 单卡H100: ~550秒(5秒视频) |
||||
提示词语言 | English* | ||||
提示词长度上限 | 224 Tokens | ||||
视频长度 | 5 秒 或 10 秒 | ||||
帧率 | 16 帧 / 秒 |
数据解释
- 使用 diffusers 库进行测试时,启用了全部
diffusers
库自带的优化,该方案未测试在非NVIDIA A100 / H100 外的设备上的实际显存 / 内存占用。通常,该方案可以适配于所有 NVIDIA 安培架构 以上的设备。若关闭优化,显存占用会成倍增加,峰值显存约为表格的3倍。但速度提升3-4倍左右。你可以选择性的关闭部分优化,这些优化包括:
pipe.enable_sequential_cpu_offload()
pipe.vae.enable_slicing()
pipe.vae.enable_tiling()
- 多GPU推理时,需要关闭
enable_sequential_cpu_offload()
优化。 - 使用 INT8 模型会导致推理速度降低,此举是为了满足显存较低的显卡能正常推理并保持较少的视频质量损失,推理速度大幅降低。
- PytorchAO 和 Optimum-quanto
可以用于量化文本编码器、Transformer 和 VAE 模块,以降低 CogVideoX 的内存需求。这使得在较小显存的 GPU
上运行模型成为可能!同样值得注意的是,TorchAO 量化完全兼容
torch.compile
,这可以显著提高推理速度。在NVIDIA H100
及以上设备上必须使用FP8
精度,这需要源码安装torch
、torchao
、diffusers
和accelerate
Python 包。建议使用CUDA 12.4
。 - 推理速度测试同样采用了上述显存优化方案,不采用显存优化的情况下,推理速度提升约10%。 只有
diffusers
版本模型支持量化。 - 模型仅支持英语输入,其他语言可以通过大模型润色时翻译为英语。
提醒
- 使用 SAT 推理和微调SAT版本模型。欢迎前往我们的github查看。
快速上手 🤗
本模型已经支持使用 huggingface 的 diffusers 库进行部署,你可以按照以下步骤进行部署。
我们推荐您进入我们的 github 并查看相关的提示词优化和转换,以获得更好的体验。
- 安装对应的依赖
# diffusers>=0.32.0
# transformers>=0.46.2
# accelerate>=1.0.1
# imageio-ffmpeg>=0.5.1
pip install --upgrade transformers accelerate diffusers imageio-ffmpeg
- 运行代码
import torch
from diffusers import CogVideoXPipeline
from diffusers.utils import export_to_video
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."
pipe = CogVideoXPipeline.from_pretrained(
"THUDM/CogVideoX1.5-5B",
torch_dtype=torch.bfloat16
)
pipe.enable_sequential_cpu_offload()
pipe.vae.enable_tiling()
pipe.vae.enable_slicing()
video = pipe(
prompt=prompt,
num_videos_per_prompt=1,
num_inference_steps=50,
num_frames=81,
guidance_scale=6,
generator=torch.Generator(device="cuda").manual_seed(42),
).frames[0]
export_to_video(video, "output.mp4", fps=8)
Quantized Inference
PytorchAO 和 Optimum-quanto
可以用于对文本编码器、Transformer 和 VAE 模块进行量化,从而降低 CogVideoX 的内存需求。这使得在免费的 T4 Colab 或较小 VRAM 的
GPU 上运行该模型成为可能!值得注意的是,TorchAO 量化与 torch.compile
完全兼容,这可以显著加快推理速度。
# To get started, PytorchAO needs to be installed from the GitHub source and PyTorch Nightly.
# Source and nightly installation is only required until the next release.
import torch
from diffusers import AutoencoderKLCogVideoX, CogVideoXTransformer3DModel, CogVideoXImageToVideoPipeline
from diffusers.utils import export_to_video
from transformers import T5EncoderModel
from torchao.quantization import quantize_, int8_weight_only
quantization = int8_weight_only
text_encoder = T5EncoderModel.from_pretrained("THUDM/CogVideoX1.5-5B", subfolder="text_encoder", torch_dtype=torch.bfloat16)
quantize_(text_encoder, quantization())
transformer = CogVideoXTransformer3DModel.from_pretrained("THUDM/CogVideoX1.5-5B",subfolder="transformer", torch_dtype=torch.bfloat16)
quantize_(transformer, quantization())
vae = AutoencoderKLCogVideoX.from_pretrained("THUDM/CogVideoX1.5-5B", subfolder="vae", torch_dtype=torch.bfloat16)
quantize_(vae, quantization())
# Create pipeline and run inference
pipe = CogVideoXImageToVideoPipeline.from_pretrained(
"THUDM/CogVideoX1.5-5B",
text_encoder=text_encoder,
transformer=transformer,
vae=vae,
torch_dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
pipe.vae.enable_tiling()
pipe.vae.enable_slicing()
prompt = "A little girl is riding a bicycle at high speed. Focused, detailed, realistic."
video = pipe(
prompt=prompt,
num_videos_per_prompt=1,
num_inference_steps=50,
num_frames=81,
guidance_scale=6,
generator=torch.Generator(device="cuda").manual_seed(42),
).frames[0]
export_to_video(video, "output.mp4", fps=8)
此外,这些模型可以通过使用PytorchAO以量化数据类型序列化并存储,从而节省磁盘空间。你可以在以下链接中找到示例和基准测试。
深入研究
欢迎进入我们的 github,你将获得:
- 更加详细的技术细节介绍和代码解释。
- 提示词的优化和转换。
- 模型推理和微调的详细代码。
- 项目更新日志动态,更多互动机会。
- CogVideoX 工具链,帮助您更好的使用模型。
- INT8 模型推理代码。
模型协议
该模型根据 CogVideoX LICENSE 许可证发布。
引用
@article{yang2024cogvideox,
title={CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer},
author={Yang, Zhuoyi and Teng, Jiayan and Zheng, Wendi and Ding, Ming and Huang, Shiyu and Xu, Jiazheng and Yang, Yuanming and Hong, Wenyi and Zhang, Xiaohan and Feng, Guanyu and others},
journal={arXiv preprint arXiv:2408.06072},
year={2024}
}