清华大学开源 CogVideoX-5B-I2V 模型,以支持图生视频

server/2024/9/25 11:10:47/

CogVideoX 是源于清影的开源视频生成模型。 下表列出了我们在此版本中提供的视频生成模型的相关信息。

在这里插入图片描述

Model NameCogVideoX-2BCogVideoX-5BCogVideoX-5B-I2V (This Repository)
Model DescriptionEntry-level model, balancing compatibility. Low cost for running and secondary development.Larger model with higher video generation quality and better visual effects.CogVideoX-5B image-to-video version.
Inference PrecisionFP16*(recommended), BF16, FP32, FP8*, INT8, not supported: INT4BF16 (recommended), FP16, FP32, FP8*, INT8, not supported: INT4
Single GPU Memory Usage
SAT FP16: 18GB
diffusers FP16: from 4GB*
diffusers INT8 (torchao): from 3.6GB*
SAT BF16: 26GB
diffusers BF16: from 5GB*
diffusers INT8 (torchao): from 4.4GB*
Multi-GPU Inference Memory UsageFP16: 10GB* using diffusers
BF16: 15GB* using diffusers
Inference Speed
(Step = 50, FP/BF16)
Single A100: ~90 seconds
Single H100: ~45 seconds
Single A100: ~180 seconds
Single H100: ~90 seconds
Fine-tuning PrecisionFP16BF16
Fine-tuning Memory Usage47 GB (bs=1, LORA)
61 GB (bs=2, LORA)
62GB (bs=1, SFT)
63 GB (bs=1, LORA)
80 GB (bs=2, LORA)
75GB (bs=1, SFT)
78 GB (bs=1, LORA)
75GB (bs=1, SFT, 16GPU)
Prompt LanguageEnglish*
Maximum Prompt Length226 Tokens
Video Length6 Seconds
Frame Rate8 Frames / Second
Video Resolution720 x 480, no support for other resolutions (including fine-tuning)
Position Embedding3d_sincos_pos_embed3d_rope_pos_embed3d_rope_pos_embed + learnable_pos_embed

数据说明

  • 在使用 diffusers 库进行测试时,启用了 diffusers 库中包含的所有优化功能。 本方案尚未在英伟达™(NVIDIA®)A100/H100 架构以外的设备上进行实际内存使用测试。 一般来说,此方案适用于所有英伟达安培架构及以上的设备。 如果禁用优化功能,内存消耗将成倍增加,峰值内存使用量约为表中数值的 3 倍。 不过,速度会提高约 3-4 倍。 您可以有选择性地禁用某些优化功能,包括

    pipe.enable_sequential_cpu_offload()
    pipe.vae.enable_slicing()
    pipe.vae.enable_tiling()

  • 对于多 GPU 推理,需要禁用 enable_sequential_cpu_offload() 优化。

  • 使用 INT8 模型会降低推理速度,这样做是为了适应较低内存的 GPU,同时保持最低的视频质量损失,不过推理速度会明显降低。

  • CogVideoX-2B 模型是以 FP16 精度训练的,而所有 CogVideoX-5B 模型都是以 BF16 精度训练的。 我们建议使用模型训练时的精度进行推理。

  • PytorchAO 和 Optimum-quanto 可用于量化文本编码器、转换器和 VAE 模块,以降低 CogVideoX 的内存需求。 这样,模型就可以在免费的 T4 Colab 或内存较小的 GPU 上运行! 此外,请注意 TorchAO 量化完全兼容 torch.compile,可显著提高推理速度。 FP8 精度必须在英伟达 H100 及以上的设备上使用,需要安装 torch、torchao、diffusers 和加速 Python 软件包的源代码。 建议使用 CUDA 12.4。

  • 推理速度测试也采用了上述内存优化方案。 在不进行内存优化的情况下,推理速度提高了约 10%。 只有扩散器版本的模型支持量化。

  • 该模型仅支持英文输入,其他语言可通过大型模型细化翻译成英文使用。

  • 模型微调的内存使用情况在 8 * H100 环境中进行了测试,程序自动使用 Zero 2 优化。 如果表格中标注了特定的 GPU 数量,则必须使用该数量或更多 GPU 进行微调。

提醒

使用 SAT 进行推理和微调 SAT 版本模型。 欢迎访问我们的 GitHub 了解更多详情。

Getting Started Quickly 🤗

该模型支持使用拥抱面扩散器库进行部署。 您可以按照以下步骤开始操作。

我们建议您访问我们的 GitHub,查看提示优化和转换,以获得更好的体验。

  1. 安装所需的依赖项
# diffusers>=0.30.3
# transformers>=0.44.2
# accelerate>=0.34.0
# imageio-ffmpeg>=0.5.1
pip install --upgrade transformers accelerate diffusers imageio-ffmpeg
  1. 运行代码
import torch
from diffusers import CogVideoXImageToVideoPipeline
from diffusers.utils import export_to_video, load_imageprompt = "A little girl is riding a bicycle at high speed. Focused, detailed, realistic."
image = load_image(image="input.jpg")
pipe = CogVideoXImageToVideoPipeline.from_pretrained("THUDM/CogVideoX-5b-I2V",torch_dtype=torch.bfloat16
)pipe.enable_sequential_cpu_offload()
pipe.vae.enable_tiling()
pipe.vae.enable_slicing()video = pipe(prompt=prompt,image=image,num_videos_per_prompt=1,num_inference_steps=50,num_frames=49,guidance_scale=6,generator=torch.Generator(device="cuda").manual_seed(42),
).frames[0]export_to_video(video, "output.mp4", fps=8)

量化推理

PytorchAO 和 Optimum-quanto 可用于量化文本编码器、转换器和 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, load_image
from transformers import T5EncoderModel
from torchao.quantization import quantize_, int8_weight_onlyquantization = int8_weight_onlytext_encoder = T5EncoderModel.from_pretrained("THUDM/CogVideoX-5b-I2V", subfolder="text_encoder", torch_dtype=torch.bfloat16)
quantize_(text_encoder, quantization())transformer = CogVideoXTransformer3DModel.from_pretrained("THUDM/CogVideoX-5b-I2V",subfolder="transformer", torch_dtype=torch.bfloat16)
quantize_(transformer, quantization())vae = AutoencoderKLCogVideoX.from_pretrained("THUDM/CogVideoX-5b-I2V", subfolder="vae", torch_dtype=torch.bfloat16)
quantize_(vae, quantization())# Create pipeline and run inference
pipe = CogVideoXImageToVideoPipeline.from_pretrained("THUDM/CogVideoX-5b-I2V",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."
image = load_image(image="input.jpg")
video = pipe(prompt=prompt,image=image,num_videos_per_prompt=1,num_inference_steps=50,num_frames=49,guidance_scale=6,generator=torch.Generator(device="cuda").manual_seed(42),
).frames[0]export_to_video(video, "output.mp4", fps=8)

此外,这些模型可以序列化,并使用 PytorchAO 以量化数据类型存储,以节省磁盘空间。 您可以在以下链接中找到示例和基准:

  • torchao
  • quanto

更多探索

欢迎访问我们的 GitHub,在那里您可以找到: 更详细的技术解释和代码 优化的提示示例和转换 用于模型推理和微调的详细代码 项目更新日志和更多互动机会 CogVideoX 工具链,帮助您更好地使用模型 INT8 模型推理代码。

Github https://github.com/THUDM/CogVideo


http://www.ppmy.cn/server/121797.html

相关文章

K8s安装部署(v1.28)--超详细(cri-docker作为运行时)

1、准备环境 ip角色系统主机名cpumem192.168.40.129mastercentos7.9k8smaster48192.168.40.130node1centos7.9k8snode148192.168.40.131node2centos7.9k8snode248192.168.40.132node3centos7.9k8snode348 2、系统配置(所有节点) 重要:首先…

docker仓库

一、创建 Docker 镜像仓库 启动私有仓库容器 通过 Docker 启动一个私有镜像仓库。这里使用官方的 registry 镜像。 #docker run -d:在后台运行一个容器。 #-p 5000:5000:将容器内的 5000 端口映射到宿主机的 5000 端口,私有仓库将通过此端口…

【系统架构设计师】专题:基于架构的软件开发方法 ABSD(详细知识点及历年真题)

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 一、ABSD概述二、ABSD开发过程1、架构需求2、架构设计3、架构文档化4、架构复审5、架构实现6、对架构进行改变一、ABSD概述 基于体系结构(架构)的软件设计(Architecture-Based Software Design,ABSD) 方法是体系结构…

springframework Ordered接口学习

Ordered接口介绍 完整路径: org.springframework.core.Ordered Ordered 接口是 Spring 框架中的一个核心接口,用于定义对象的顺序。这个接口通常用于需要排序的组件,例如 Spring 中的 Bean、过滤器(Filters)、拦截器…

Java 之泛型详解

1. 泛型是什么? 泛型是 Java 中一种强大的机制,它允许你编写可以与多种数据类型一起工作的代码,而无需在编译时指定具体的类型。这样可以提高代码的灵活性、可读性和安全性。 2. 为什么要使用泛型? 泛型可以帮助我们编写更安全…

chorme浏览器 您的连接不是私密连接

‌当浏览器显示“您的连接不是私密连接,攻击者可能会试图从 localhost 窃取您的信息(例如:密码、消息或信用卡信息)”的警告时,这通常意味着您正在尝试访问的网站的安全证书存在问题,可能是因为它使用的是自…

C语言之初阶指针

目录 前言1. 什么是指针代码展示 2. 计算机如何编址3. 指针类型指针类型的定义指针类型的意义 4. 野指针4.1. **指针未初始化**4.2. **指针越界访问**4.3. **指针指向的空间被释放** 5. 指针运算6. 指针和数组7. 二级指针8. 指针数组总结 前言 本篇将深入探讨C语言中至关重要的…

【C++】托管类和托管函数

托管类和托管函数 1. 托管类 托管类是指在 .NET 环境中运行的类,它们由公共语言运行时(CLR)管理。托管类具有以下特点: 自动内存管理:托管类的实例由 CLR 的垃圾回收机制管理,自动处理内存的分配和释放。…