| | --- |
| | language: |
| | - en |
| | license: other |
| | pipeline_tag: text-to-video |
| | tags: |
| | - video-generation |
| | - thudm |
| | - image-to-video |
| | inference: false |
| | library_name: diffusers |
| | --- |
| | |
| | # CogVideoX1.5-5B |
| |
|
| | <p style="text-align: center;"> |
| | <div align="center"> |
| | <img src=https://github.com/THUDM/CogVideo/raw/main/resources/logo.svg width="50%"/> |
| | </div> |
| | <p align="center"> |
| | <a href="https://huggingface.co/THUDM/CogVideoX1.5-5B/blob/main/README_zh.md">📄 中文阅读</a> | |
| | <a href="https://huggingface.co/spaces/THUDM/CogVideoX-5B-Space">🤗 Huggingface Space</a> | |
| | <a href="https://github.com/THUDM/CogVideo">🌐 Github </a> | |
| | <a href="https://arxiv.org/pdf/2408.06072">📜 arxiv </a> |
| | </p> |
| | <p align="center"> |
| | 📍 Visit <a href="https://chatglm.cn/video?lang=en?fr=osm_cogvideo">QingYing</a> and <a href="https://open.bigmodel.cn/?utm_campaign=open&_channel_track_key=OWTVNma9">API Platform</a> to experience larger-scale commercial video generation models. |
| | </p> |
| |
|
| | ## Model Introduction |
| |
|
| | CogVideoX is an open-source video generation model similar to [QingYing](https://chatglm.cn/video?lang=en?fr=osm_cogvideo). The table below displays the list of video generation models we currently offer, along with their foundational information. |
| |
|
| | <table style="border-collapse: collapse; width: 100%;"> |
| | <tr> |
| | <th style="text-align: center;">Model Name</th> |
| | <th style="text-align: center;">CogVideoX1.5-5B (Latest)</th> |
| | <th style="text-align: center;">CogVideoX1.5-5B-I2V (Latest)</th> |
| | <th style="text-align: center;">CogVideoX-2B</th> |
| | <th style="text-align: center;">CogVideoX-5B</th> |
| | <th style="text-align: center;">CogVideoX-5B-I2V</th> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Release Date</td> |
| | <th style="text-align: center;">November 8, 2024</th> |
| | <th style="text-align: center;">November 8, 2024</th> |
| | <th style="text-align: center;">August 6, 2024</th> |
| | <th style="text-align: center;">August 27, 2024</th> |
| | <th style="text-align: center;">September 19, 2024</th> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Video Resolution</td> |
| | <td colspan="1" style="text-align: center;">1360 * 768</td> |
| | <td colspan="1" style="text-align: center;"> Min(W, H) = 768 <br> 768 ≤ Max(W, H) ≤ 1360 <br> Max(W, H) % 16 = 0 </td> |
| | <td colspan="3" style="text-align: center;">720 * 480</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Number of Frames</td> |
| | <td colspan="2" style="text-align: center;">Should be <b>16N + 1</b> where N <= 10 (default 81)</td> |
| | <td colspan="3" style="text-align: center;">Should be <b>8N + 1</b> where N <= 6 (default 49)</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Inference Precision</td> |
| | <td colspan="2" style="text-align: center;"><b>BF16 (Recommended)</b>, FP16, FP32, FP8*, INT8, Not supported: INT4</td> |
| | <td style="text-align: center;"><b>FP16*(Recommended)</b>, BF16, FP32, FP8*, INT8, Not supported: INT4</td> |
| | <td colspan="2" style="text-align: center;"><b>BF16 (Recommended)</b>, FP16, FP32, FP8*, INT8, Not supported: INT4</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Single GPU Memory Usage<br></td> |
| | <td colspan="2" style="text-align: center;"><a href="https://github.com/THUDM/SwissArmyTransformer">SAT</a> BF16: 76GB <br><b>diffusers BF16: from 10GB*</b><br><b>diffusers INT8(torchao): from 7GB*</b></td> |
| | <td style="text-align: center;"><a href="https://github.com/THUDM/SwissArmyTransformer">SAT</a> FP16: 18GB <br><b>diffusers FP16: 4GB minimum* </b><br><b>diffusers INT8 (torchao): 3.6GB minimum*</b></td> |
| | <td colspan="2" style="text-align: center;"><a href="https://github.com/THUDM/SwissArmyTransformer">SAT</a> BF16: 26GB <br><b>diffusers BF16 : 5GB minimum* </b><br><b>diffusers INT8 (torchao): 4.4GB minimum* </b></td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Multi-GPU Memory Usage</td> |
| | <td colspan="2" style="text-align: center;"><b>BF16: 24GB* using diffusers</b><br></td> |
| | <td style="text-align: center;"><b>FP16: 10GB* using diffusers</b><br></td> |
| | <td colspan="2" style="text-align: center;"><b>BF16: 15GB* using diffusers</b><br></td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Inference Speed<br>(Step = 50, FP/BF16)</td> |
| | <td colspan="2" style="text-align: center;">Single A100: ~1000 seconds (5-second video)<br>Single H100: ~550 seconds (5-second video)</td> |
| | <td style="text-align: center;">Single A100: ~90 seconds<br>Single H100: ~45 seconds</td> |
| | <td colspan="2" style="text-align: center;">Single A100: ~180 seconds<br>Single H100: ~90 seconds</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Prompt Language</td> |
| | <td colspan="5" style="text-align: center;">English*</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Prompt Token Limit</td> |
| | <td colspan="2" style="text-align: center;">224 Tokens</td> |
| | <td colspan="3" style="text-align: center;">226 Tokens</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Video Length</td> |
| | <td colspan="2" style="text-align: center;">5 seconds or 10 seconds</td> |
| | <td colspan="3" style="text-align: center;">6 seconds</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Frame Rate</td> |
| | <td colspan="2" style="text-align: center;">16 frames / second </td> |
| | <td colspan="3" style="text-align: center;">8 frames / second </td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Position Encoding</td> |
| | <td colspan="2" style="text-align: center;">3d_rope_pos_embed</td> |
| | <td style="text-align: center;">3d_sincos_pos_embed</td> |
| | <td style="text-align: center;">3d_rope_pos_embed</td> |
| | <td style="text-align: center;">3d_rope_pos_embed + learnable_pos_embed</td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Download Link (Diffusers)</td> |
| | <td style="text-align: center;"><a href="https://huggingface.co/THUDM/CogVideoX1.5-5B">🤗 HuggingFace</a><br><a href="https://modelscope.cn/models/ZhipuAI/CogVideoX1.5-5B">🤖 ModelScope</a><br><a href="https://wisemodel.cn/models/ZhipuAI/CogVideoX1.5-5B">🟣 WiseModel</a></td> |
| | <td style="text-align: center;"><a href="https://huggingface.co/THUDM/CogVideoX1.5-5B-I2V">🤗 HuggingFace</a><br><a href="https://modelscope.cn/models/ZhipuAI/CogVideoX1.5-5B-I2V">🤖 ModelScope</a><br><a href="https://wisemodel.cn/models/ZhipuAI/CogVideoX1.5-5B-I2V">🟣 WiseModel</a></td> |
| | <td style="text-align: center;"><a href="https://huggingface.co/THUDM/CogVideoX-2b">🤗 HuggingFace</a><br><a href="https://modelscope.cn/models/ZhipuAI/CogVideoX-2b">🤖 ModelScope</a><br><a href="https://wisemodel.cn/models/ZhipuAI/CogVideoX-2b">🟣 WiseModel</a></td> |
| | <td style="text-align: center;"><a href="https://huggingface.co/THUDM/CogVideoX-5b">🤗 HuggingFace</a><br><a href="https://modelscope.cn/models/ZhipuAI/CogVideoX-5b">🤖 ModelScope</a><br><a href="https://wisemodel.cn/models/ZhipuAI/CogVideoX-5b">🟣 WiseModel</a></td> |
| | <td style="text-align: center;"><a href="https://huggingface.co/THUDM/CogVideoX-5b-I2V">🤗 HuggingFace</a><br><a href="https://modelscope.cn/models/ZhipuAI/CogVideoX-5b-I2V">🤖 ModelScope</a><br><a href="https://wisemodel.cn/models/ZhipuAI/CogVideoX-5b-I2V">🟣 WiseModel</a></td> |
| | </tr> |
| | <tr> |
| | <td style="text-align: center;">Download Link (SAT)</td> |
| | <td colspan="2" style="text-align: center;"><a href="https://huggingface.co/THUDM/CogVideoX1.5-5b-SAT">🤗 HuggingFace</a><br><a href="https://modelscope.cn/models/ZhipuAI/CogVideoX1.5-5b-SAT">🤖 ModelScope</a><br><a href="https://wisemodel.cn/models/ZhipuAI/CogVideoX1.5-5b-SAT">🟣 WiseModel</a></td> |
| | <td colspan="3" style="text-align: center;"><a href="./sat/README_zh.md">SAT</a></td> |
| | </tr> |
| | </table> |
| | |
| | **Data Explanation** |
| |
|
| | + Testing with the `diffusers` library enabled all optimizations included in the library. This scheme has not been |
| | tested on non-NVIDIA A100/H100 devices. It should generally work with all NVIDIA Ampere architecture or higher |
| | devices. Disabling optimizations can triple VRAM usage but increase speed by 3-4 times. You can selectively disable |
| | certain optimizations, including: |
| |
|
| | ``` |
| | pipe.enable_sequential_cpu_offload() |
| | pipe.vae.enable_slicing() |
| | pipe.vae.enable_tiling() |
| | ``` |
| |
|
| | + In multi-GPU inference, `enable_sequential_cpu_offload()` optimization needs to be disabled. |
| | + Using an INT8 model reduces inference speed, meeting the requirements of lower VRAM GPUs while retaining minimal video |
| | quality degradation, at the cost of significant speed reduction. |
| | + [PytorchAO](https://github.com/pytorch/ao) and [Optimum-quanto](https://github.com/huggingface/optimum-quanto/) can be |
| | used to quantize the text encoder, Transformer, and VAE modules, reducing CogVideoX’s memory requirements, making it |
| | feasible to run the model on smaller VRAM GPUs. TorchAO quantization is fully compatible with `torch.compile`, |
| | significantly improving inference speed. `FP8` precision is required for NVIDIA H100 and above, which requires source |
| | installation of `torch`, `torchao`, `diffusers`, and `accelerate`. Using `CUDA 12.4` is recommended. |
| | + Inference speed testing also used the above VRAM optimizations, and without optimizations, speed increases by about |
| | 10%. Only `diffusers` versions of models support quantization. |
| | + Models support English input only; other languages should be translated into English during prompt crafting with a |
| | larger model. |
| |
|
| | **Note** |
| |
|
| | + Use [SAT](https://github.com/THUDM/SwissArmyTransformer) for inference and fine-tuning SAT version models. Check our |
| | GitHub for more details. |
| |
|
| | ## Getting Started Quickly 🤗 |
| |
|
| | This model supports deployment using the Hugging Face diffusers library. You can follow the steps below to get started. |
| |
|
| | **We recommend that you visit our [GitHub](https://github.com/THUDM/CogVideo) to check out prompt optimization and |
| | conversion to get a better experience.** |
| |
|
| | 1. Install the required dependencies |
| |
|
| | ```shell |
| | # diffusers (from source) |
| | # transformers>=4.46.2 |
| | # accelerate>=1.1.1 |
| | # imageio-ffmpeg>=0.5.1 |
| | pip install git+https://github.com/huggingface/diffusers |
| | pip install --upgrade transformers accelerate diffusers imageio-ffmpeg |
| | ``` |
| |
|
| | 2. Run the code |
| |
|
| | ```python |
| | 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](https://github.com/pytorch/ao) and [Optimum-quanto](https://github.com/huggingface/optimum-quanto/) can be |
| | used to quantize the text encoder, transformer, and VAE modules to reduce CogVideoX's memory requirements. This allows |
| | the model to run on free T4 Colab or GPUs with lower VRAM! Also, note that TorchAO quantization is fully compatible |
| | with `torch.compile`, which can significantly accelerate inference. |
| |
|
| | ```python |
| | # 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) |
| | ``` |
| |
|
| | Additionally, these models can be serialized and stored using PytorchAO in quantized data types to save disk space. You |
| | can find examples and benchmarks at the following links: |
| |
|
| | - [torchao](https://gist.github.com/a-r-r-o-w/4d9732d17412888c885480c6521a9897) |
| | - [quanto](https://gist.github.com/a-r-r-o-w/31be62828b00a9292821b85c1017effa) |
| |
|
| | ## Further Exploration |
| |
|
| | Feel free to enter our [GitHub](https://github.com/THUDM/CogVideo), where you'll find: |
| |
|
| | 1. More detailed technical explanations and code. |
| | 2. Optimized prompt examples and conversions. |
| | 3. Detailed code for model inference and fine-tuning. |
| | 4. Project update logs and more interactive opportunities. |
| | 5. CogVideoX toolchain to help you better use the model. |
| | 6. INT8 model inference code. |
| |
|
| | ## Model License |
| |
|
| | This model is released under the [CogVideoX LICENSE](LICENSE). |
| |
|
| | ## Citation |
| |
|
| | ``` |
| | @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} |
| | } |
| | ``` |