一、 介绍
CogVideo 是一款在开源社区 GitHub 上备受瞩目的 AI 驱动视频生成解决方案,其核心技术依托于前沿的深度学习算法和模型架构。以下是对 CogVideo 的详细介绍:
1. 模型介绍
CogVideoX是 清影 同源的开源版本视频生成模型。
下表展示我们提供的视频生成模型相关基础信息:
模型名 | CogVideoX-2B | CogVideoX-5B |
---|---|---|
模型介绍 | 入门级模型,兼顾兼容性。运行,二次开发成本低。 | 视频生成质量更高,视觉效果更好的更大尺寸模型。 |
推理精度 | FP16*(推荐), BF16, FP32,FP8*(E4M3,E5M2),INT8,不支持INT4 | BF16(推荐), FP16, FP32,FP8*(E4M3,E5M2),INT8,不支持INT4 |
单GPU显存消耗 | FP16: 18GB using SAT / 12.5GB* using diffusers INT8: 7.8GB* using diffusers with torchao | BF16: 26GB using SAT / 20.7GB* using diffusers INT8: 11.4GB* using diffusers with torchao |
多GPU推理显存消耗 | FP16: 10GB* using diffusers | BF16: 15GB* using diffusers |
推理速度 (Step = 50) | FP16: ~90* s | BF16: ~180* s |
微调精度 | FP16 | BF16 |
微调显存消耗(每卡) | 47 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) |
提示词语言 | English* | |
提示词长度上限 | 226 Tokens | |
视频长度 | 6 秒 | |
帧率 | 8 帧 / 秒 | |
视频分辨率 | 720 * 480,不支持其他分辨率(含微调) | |
位置编码 | 3d_sincos_pos_embed | 3d_rope_pos_embed |
下载链接 (Diffusers) | 🤗 HuggingFace 🤖 ModelScope 🟣 WiseModel | 🤗 HuggingFace 🤖 ModelScope 🟣 WiseModel |
下载链接 (SAT) | SAT |
数据解释
- 使用 diffusers 库进行测试时,启用了
enable_model_cpu_offload()
选项 和pipe.vae.enable_tiling()
优化,该方案未测试在非NVIDIA A100 / H100 外的设备上的实际显存 / 内存占用。通常,该方案可以适配于所有 NVIDIA 安培架构以上的设备。若关闭优化,显存占用会成倍增加,峰值显存约为表格的3倍。 - 多GPU推理时,需要关闭
enable_model_cpu_offload()
优化。 - 使用 INT8 模型会导致推理速度降低,此举是为了满足显存较低的显卡能正常推理并保持较少的视频质量损失,推理速度大幅降低。
- 2B 模型采用
FP16
精度训练, 5B模型采用BF16
精度训练。我们推荐使用模型训练的精度进行推理。
- PytorchAO 和 Optimum-quanto可以用于量化文本编码器、Transformer 和 VAE 模块,以降低 CogVideoX 的内存需求。这使得在免费的 T4 Colab 或更小显存的 GPU上运行模型成为可能!同样值得注意的是,TorchAO 量化完全兼容
torch.compile
,这可以显著提高推理速度。在NVIDIA H100
及以上设备上必须使用FP8
精度,这需要源码安装torch
、torchao
、diffusers
和accelerate
Python包。建议使用CUDA 12.4
。
- 推理速度测试同样采用了上述显存优化方案,不采用显存优化的情况下,推理速度提升约10%。 只有
diffusers
版本模型支持量化。 - 模型仅支持英语输入,其他语言可以通过大模型润色时翻译为英语。
2. 技术特点
- 大规模预训练模型 :CogVideo 是目前最大的通用领域文本到视频生成预训练模型,含有 94 亿参数。它通过将预训练文本到图像生成模型(如 CogView2)有效地利用到文本到视频生成模型中,并采用了多帧率分层训练策略,能够理解和汲取文本中的深层次语义信息,生成连续、清晰且视觉质量极高的视频片段。
- 先进的动态场景构建 :CogVideo 具备先进的动态场景构建功能,能够根据用户提供的详细文本描述,运用 AI 驱动的 3D 环境生成及动画编排技术,自动创建丰富多变且高度逼真的三维空间与角色动作序列。
- 跨模态信息融合 :除了视频画面的生成,CogVideo 还集成了语音合成与背景音乐等多种感官元素的智能生成机制,实现跨模态的信息深度融合。系统能够依据文本内容自动生成情感匹配的声音对话与旁白,并搭配适宜的背景音乐和音效。
- 高效显存利用与多尺寸模型支持 :CogVideoX 系列模型,如 CogVideoX-2B,在 FP-16 精度下推理仅需 18GB 显存,微调需要 40GB,使得单张高端显卡即可完成复杂任务。同时,CogVideoX 包含多个不同尺寸的模型,满足从个人创作到企业级应用的不同需求。
3. 应用场景
CogVideo 的应用场景广泛,包括但不限于以下几个方面:
- 影视创作 :影视创作人员可以使用 CogVideo 将剧本概念快速转化为可视化演示,直观评估剧情走向和场景设置是否合理。
- 教育 :教育工作者可利用 CogVideo 批量制作互动性强、内容生动的教学视频,提升在线教育的吸引力与教学质量。
- 广告与营销 :品牌或广告公司通过 CogVideo 可根据文案直接生成多种风格的广告视频,在节省成本的同时提高创意灵活性。
- 社交媒体与短视频制作 :社交媒体博主、短视频制作者借助 CogVideo 将创作的文字内容迅速转换为引人入胜的视频故事,吸引更多的粉丝关注。
4. 未来展望
随着 AI 技术的不断发展,CogVideo 将继续在视频生成领域发挥重要作用。它有望在未来开启一个全新的数字化视频创作时代,为新闻报道、教育辅导、广告宣传、影视娱乐等多个行业带来颠覆性的内容创作体验。同时,CogVideo 作为一个开源项目,将不断吸引全球开发者共同参与技术迭代与功能优化,推动视频生成技术领域的革新与发展。
二、部署过程
基础环境最低要求说明:
环境名称 | 版本信息1 | |
---|---|---|
Ubuntu | 22.04.4 LTS | |
Cuda | V12.1.105 | |
Python | 3.12 | |
NVIDIA Corporation | RTX 3090 可以进行命令行推理,无法使用 Gradio 页面 | Gradio 页面需要 32G 以上的显存(比如v100) |
1. 更新基础软件包
查看系统版本信息
# 查看系统版本信息,包括ID(如ubuntu、centos等)、版本号、名称、版本号ID等
cat /etc/os-release
配置 apt 国内源
# 更新软件包列表
apt-get update
这个命令用于更新本地软件包索引。它会从所有配置的源中检索最新的软件包列表信息,但不会安装或升级任何软件包。这是安装新软件包或进行软件包升级之前的推荐步骤,因为它确保了您获取的是最新版本的软件包。
# 安装 Vim 编辑器
apt-get install -y vim
这个命令用于安装 Vim 文本编辑器。-y
选项表示自动回答所有的提示为“是”,这样在安装过程中就不需要手动确认。Vim 是一个非常强大的文本编辑器,广泛用于编程和配置文件的编辑。
为了安全起见,先备份当前的 sources.list
文件之后,再进行修改:
# 备份现有的软件源列表
cp /etc/apt/sources.list /etc/apt/sources.list.bak
这个命令将当前的 sources.list
文件复制为一个名为 sources.list.bak
的备份文件。这是一个好习惯,因为编辑 sources.list
文件时可能会出错,导致无法安装或更新软件包。有了备份,如果出现问题,您可以轻松地恢复原始的文件。
# 编辑软件源列表文件
vim /etc/apt/sources.list
这个命令使用 Vim 编辑器打开 sources.list
文件,以便您可以编辑它。这个文件包含了 APT(Advanced Package Tool)用于安装和更新软件包的软件源列表。通过编辑这个文件,您可以添加新的软件源、更改现有软件源的优先级或禁用某些软件源。
在 Vim 中,您可以使用方向键来移动光标,
i
键进入插入模式(可以开始编辑文本),
Esc
键退出插入模式,
:wq
命令保存更改并退出 Vim,
或 :q!
命令不保存更改并退出 Vim。
编辑 sources.list
文件时,请确保您了解自己在做什么,特别是如果您正在添加新的软件源。错误的源可能会导致软件包安装失败或系统安全问题。如果您不确定,最好先搜索并找到可靠的源信息,或者咨询有经验的 Linux 用户。
使用 Vim 编辑器打开 sources.list
文件,复制以下代码替换 sources.list
里面的全部代码,配置 apt 国内阿里源。
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
安装常用软件和工具
# 更新源列表,输入以下命令:
apt-get update
# 更新系统软件包,输入以下命令:
apt-get upgrade
# 安装常用软件和工具,输入以下命令:
apt-get -y install vim wget git git-lfs unzip lsof net-tools gcc cmake build-essential
出现以下页面,说明国内apt源已替换成功,且能正常安装apt软件和工具
2. 安装 NVIDIA CUDA Toolkit 12.1
- 下载 CUDA Keyring :
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
这个命令用于下载 CUDA 的 GPG 密钥环,它用于验证 CUDA 软件包的签名。这是确保软件包安全性的一个重要步骤。
- 安装 CUDA Keyring :
dpkg -i cuda-keyring_1.0-1_all.deb
使用 dpkg
安装下载的密钥环。这是必要的,以便 apt
能够验证从 NVIDIA 仓库下载的软件包的签名。
- 删除旧的 apt 密钥(如果必要) :
apt-key del 7fa2af80
这一步可能不是必需的,除非您知道 7fa2af80
是与 CUDA 相关的旧密钥,并且您想从系统中删除它以避免混淆。通常情况下,如果您只是安装 CUDA 并使用 NVIDIA 提供的最新密钥环,这一步可以跳过。
- 更新 apt 包列表 :
apt-get update
更新 apt 的软件包列表,以便包括刚刚通过 cuda-keyring
添加的 NVIDIA 仓库中的软件包。
- 安装 CUDA Toolkit :
apt-get -y install cuda-toolkit-12-1
出现以下页面,说明 NVIDIA CUDA Toolkit 12.1 安装成功
注意:这里可能有一个问题。NVIDIA 官方 Ubuntu 仓库中可能不包含直接名为 cuda-toolkit-12-1
的包。通常,您会安装一个名为 cuda
或 cuda-12-1
的元包,它会作为依赖项拉入 CUDA Toolkit 的所有组件。请检查 NVIDIA 的官方文档或仓库,以确认正确的包名。
如果您正在寻找安装特定版本的 CUDA Toolkit,您可能需要安装类似 cuda-12-1
的包(如果可用),或者从 NVIDIA 的官方网站下载 CUDA Toolkit 的 .run
安装程序进行手动安装。
请确保您查看 NVIDIA 的官方文档或 Ubuntu 的 NVIDIA CUDA 仓库以获取最准确的包名和安装指令。
- 出现以上情况,需要配置 NVIDIA CUDA Toolkit 12.1 系统环境变量
编辑 ~/.bashrc 文件
# 编辑 ~/.bashrc 文件
vim ~/.bashrc
插入以下环境变量
# 插入以下环境变量
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
激活 ~/.bashrc 文件
# 激活 ~/.bashrc 文件
source ~/.bashrc
查看cuda系统环境变量
which nvcc
nvcc -V
3. 安装 Miniconda
- 下载 Miniconda 安装脚本 :
- 使用
wget
命令从 Anaconda 的官方仓库下载 Miniconda 的安装脚本。Miniconda 是一个更小的 Anaconda 发行版,包含了 Anaconda 的核心组件,用于安装和管理 Python 包。
- 使用
- 运行 Miniconda 安装脚本 :
- 使用
bash
命令运行下载的 Miniconda 安装脚本。这将启动 Miniconda 的安装过程。
- 使用
# 下载 Miniconda 安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 运行 Miniconda 安装脚本
bash Miniconda3-latest-Linux-x86_64.sh
# 初次安装需要激活 base 环境
source ~/.bashrc
按下回车键(enter)
输入yes
输入yes
安装成功如下图所示
pip配置清华源加速
# 编辑 /etc/pip.conf 文件
vim /etc/pip.conf
加入以下代码
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
注意事项:
- 请确保您的系统是 Linux x86_64 架构,因为下载的 Miniconda 版本是为该架构设计的。
- 在运行安装脚本之前,您可能需要使用
chmod +x Miniconda3-latest-Linux-x86_64.sh
命令给予脚本执行权限。 - 安装过程中,您将被提示是否同意许可协议,以及是否将 Miniconda 初始化。通常选择 "yes" 以完成安装和初始化。
- 安装完成后,您可以使用
conda
命令来管理 Python 环境和包。 - 如果链接无法访问或解析失败,可能是因为网络问题或链接本身的问题。请检查网络连接,并确保链接是最新的和有效的。如果问题依旧,请访问 Anaconda 的官方网站获取最新的下载链接。
4. 从 github 仓库 克隆项目
-
克隆存储库:
- git clone https://github.com/THUDM/CogVideo.git
- 这个命令使用
git clone
从指定的 GitHub 地址克隆 "CodeGeeX4" 项目,默认情况下 Git 会克隆整个项目的所有提交历史。
# 克隆 CogVideo 项目
git clone https://github.com/THUDM/CogVideo.git
出现以上页面,说明无法访问GitHub官网,使用 国内镜像 进行项目克隆
# 克隆 CogVideo 项目
git clone https://gitee.com/empty-snow/CogVideo.git
出现以上页面即是克隆项目成功!
请注意,如果 git clone https://github.com/THUDM/CogVideo.git
这个链接不存在或者无效,git clone
命令将不会成功克隆项目,并且会报错。确保链接是有效的,并且您有足够的权限访问该存储库。
5. 创建虚拟环境
# 创建一个名为 CogVideo 的新虚拟环境,并指定 Python 版本为 3.12
conda create --name CogVideo python=3.12 -y
等待安装完成
6. 安装模型依赖库
# 切换到 CogVideo 项目工作目录
cd /CogVideo
# 激活 CogVideo 虚拟环境
conda activate CogVideo
# 安装 requirements.txt 依赖
pip install -r requirements.txt
出现以上报错,需要安装apt依赖包:
apt-get update
apt-get -y install libjpeg-dev zlib1g-dev libpng-dev libfreetype6-dev
apt依赖包安装成功
再次运行 requirements.txt 依赖安装
# 安装 requirements.txt 依赖
pip install -r requirements.txt
依赖安装成功如下图所示:
7. 下载预训练模型
安装 modelscope 依赖包
pip install modelscope
创建一个Python下载脚本
vim modelscope_download.py
插入以下下载代码
# Python 代码下载模型
from modelscope import snapshot_download
model_dir = snapshot_download('ZhipuAI/CogVideoX-2b', cache_dir='./', revision='master')
保存文件:Esc --》Shift + :--》输入英文的 :--》输入:wq
执行 modelscope_download.py 文件进行模型下载
python modelscope_download.py
8. 运行 inference/gradio_web_demo.py 文件
python inference/gradio_web_demo.py
出现以上问题,需要修改 inference/gradio_web_demo.py 文件的模型路径
# 修改 inference/gradio_web_demo.py 文件
vim inference/gradio_web_demo.py
替换为
pipe = CogVideoXPipeline.from_pretrained("./ZhipuAI/CogVideoX-2b", torch_dtype=dtype).to(device)
再次运行 inference/gradio_web_demo.py 文件
python inference/gradio_web_demo.py
出现以上结果,还需要设置 设置 Gradio 服务器名称和端口,才能进入 Gradio 页面
# 设置 Gradio 服务器名称和端口
export GRADIO_SERVER_NAME=0.0.0.0
export GRADIO_SERVER_PORT=8080
# 运行 inference/gradio_web_demo.py 文件
python inference/gradio_web_demo.py
出现以上页面,即可访问 gradio 网页
9. 使用 Gradio 页面时,RTX 3090 报显存不足,解决方法
命令行运行推理代码,不使用界面
python inference/cli_demo.py --prompt "The camera follows behind a white vintage SUV with a black roof rack as it speeds up a steep dirt road surrounded by pine trees on a steep mountain slope, dust kicks up from its tires, the sunlight shines on the SUV as it speeds along the dirt road, casting a warm glow over the scene. The dirt road curves gently into the distance, with no other cars or vehicles in sight. The trees on either side of the road are redwoods, with patches of greenery scattered throughout. The car is seen from the rear following the curve with ease, making it seem as if it is on a rugged drive through the rugged terrain. The dirt road itself is surrounded by steep hills and mountains, with a clear blue sky above with wispy clouds." --model_path './ZhipuAI/CogVideoX-2b' --output_path 'output/video.mp4'
在给出的命令中,python inference/cli_demo.py
是执行 Python 脚本的命令,该脚本是用于生成视频或进行某种形式的视觉内容推理的命令行界面(CLI)工具。:
--prompt
:这个参数后面跟着的是一个文本描述,即“提示”或“指令”。在这个例子中,它描述了一个场景,包括一辆白色的复古 SUV、黑色车顶架、陡峭的泥土路、松树、阳光、红杉树、尘土飞扬、以及周围的自然环境等。这个描述被用作生成视频内容的指导或基础,具体取决于cli_demo.py
脚本内部使用的模型或算法。--model_path
:这个参数指定了模型文件的路径。在这个例子中,它指向了'./ZhipuAI/CogVideoX-2b'
。这很可能是一个预训练的模型文件或模型文件夹,用于根据给定的提示生成视频。CogVideoX-2b
听起来像是一个特定的模型名称,可能是基于某种深度学习架构,特别是针对视频生成的模型。--output_path
:这个参数指定了输出文件的路径和名称。在这个例子中,它设置为'output/video.mp4'
。这意味着生成的视频将被保存为当前目录下output
文件夹中的video.mp4
文件。如果output
文件夹不存在,一些系统或脚本可能会自动创建它。
总结来说,这个命令通过 cli_demo.py
脚本,使用 './ZhipuAI/CogVideoX-2b'
路径下的模型,根据提供的文本描述(即提示)生成一个视频,并将该视频保存为 output/video.mp4
。