CogVideo 模型部署教程CogVideo 是一款在开源社区 GitHub 上备受瞩目的 AI 驱动视频生成解决方案,其核心技术依托于前沿的深度学习算法和模型架构。以下是对 CogVideo 的详细介绍:
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 | |
数据解释
enable_model_cpu_offload() 选项 和 pipe.vae.enable_tiling() 优化,该方案未测试在非NVIDIA A100 / H100 外的设备上的实际显存 / 内存占用。通常,该方案可以适配于所有 NVIDIA 安培架构以上的设备。若关闭优化,显存占用会成倍增加,峰值显存约为表格的3倍。enable_model_cpu_offload() 优化。FP16 精度训练, 5B模型采用 BF16 精度训练。我们推荐使用模型训练的精度进行推理。torch.compile,这可以显著提高推理速度。在 NVIDIA H100及以上设备上必须使用 FP8 精度,这需要源码安装 torch、torchao、diffusers 和 accelerate Python包。建议使用 CUDA 12.4。diffusers版本模型支持量化。CogVideo 的应用场景广泛,包括但不限于以下几个方面:
随着 AI 技术的不断发展,CogVideo 将继续在视频生成领域发挥重要作用。它有望在未来开启一个全新的数字化视频创作时代,为新闻报道、教育辅导、广告宣传、影视娱乐等多个行业带来颠覆性的内容创作体验。同时,CogVideo 作为一个开源项目,将不断吸引全球开发者共同参与技术迭代与功能优化,推动视频生成技术领域的革新与发展。
基础环境最低要求说明:
| 环境名称 | 版本信息1 | |
|---|---|---|
| Ubuntu | 22.04.4 LTS | |
| Cuda | V12.1.105 | |
| Python | 3.12 | |
| NVIDIA Corporation | RTX 3090 可以进行命令行推理,无法使用 Gradio 页面 | Gradio 页面需要 32G 以上的显存(比如v100) |
查看系统版本信息
# 查看系统版本信息,包括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软件和工具

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
这个命令用于下载 CUDA 的 GPG 密钥环,它用于验证 CUDA 软件包的签名。这是确保软件包安全性的一个重要步骤。
dpkg -i cuda-keyring_1.0-1_all.deb
使用 dpkg 安装下载的密钥环。这是必要的,以便 apt 能够验证从 NVIDIA 仓库下载的软件包的签名。

apt-key del 7fa2af80
这一步可能不是必需的,除非您知道 7fa2af80 是与 CUDA 相关的旧密钥,并且您想从系统中删除它以避免混淆。通常情况下,如果您只是安装 CUDA 并使用 NVIDIA 提供的最新密钥环,这一步可以跳过。
apt-get update
更新 apt 的软件包列表,以便包括刚刚通过 cuda-keyring 添加的 NVIDIA 仓库中的软件包。
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 仓库以获取最准确的包名和安装指令。

编辑 ~/.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

wget 命令从 Anaconda 的官方仓库下载 Miniconda 的安装脚本。Miniconda 是一个更小的 Anaconda 发行版,包含了 Anaconda 的核心组件,用于安装和管理 Python 包。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
注意事项:
chmod +x Miniconda3-latest-Linux-x86_64.sh 命令给予脚本执行权限。conda 命令来管理 Python 环境和包。克隆存储库:
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 命令将不会成功克隆项目,并且会报错。确保链接是有效的,并且您有足够的权限访问该存储库。
# 创建一个名为 CogVideo 的新虚拟环境,并指定 Python 版本为 3.12
conda create --name CogVideo python=3.12 -y

等待安装完成

# 切换到 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
依赖安装成功如下图所示:

安装 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

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 网页

命令行运行推理代码,不使用界面
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。
点击此处,立即体验CogVideo!
