下面是一份从零开始、完全面向新手的教程,我会把“怎么看懂显存占用”“怎么估算模型需要多少显存”一步一步讲清楚。
我们不会预设你有任何技术背景,所有的概念都会先用生活化类比讲明白,再回到你前面见过的真实文件名和参数面板上,把它们全部串联起来。
第1步:一个文件,为什么需要显存?
想象你在厨房做菜:
- 菜谱 = 模型文件(例如
.safetensors、.gguf) - 大脑 = 显卡的计算芯片(GPU)
- 切菜板/台面 = 显存(VRAM),所有临时东西都放这,用完就端走
模型文件就像一本厚菜谱,现在你想照着菜谱做菜(推理)。
你必须先把菜谱翻开放在台面上,同时还要在台面上准备要切的菜、半成品、成品盘子。
显存就是要同时容纳:
- 模型本身(菜谱)
- 正在处理的视频帧数据(要切的菜)
- 运算过程中的半成品(切好的菜、调好的酱汁)
这三样加起来,就是总显存占用。下面我们一个个看。
第2步:看懂模型名里的数字——参数量与精度
你前面见过这些文件:
seedvr2_ema_3b_fp16.safetensors
seedvr2_ema_7b-Q4_K_M.gguf
2.1 什么是“参数量”?3B、7B 是什么?
- B = Billion = 10亿
- 3B = 30亿个参数
- 7B = 70亿个参数
参数你可以理解成大脑里一个一个的小开关,模型就是由这些小开关组成的。
每个开关都记着一个数字,比如 0.342 或 -1.567。
模型学习的所有知识,就藏在这几十亿个数字里。
一个参数需要用多大的纸去写,取决于你用什么“格式”去记,这就是精度。
2.2 精度:FP16、FP32、FP8、量化
把参数想象成电话号码。
- FP32(全精度):用非常详细的笔迹记录,比如“135-7924-6801”,每个数字占 4 字节(32位)。
- FP16(半精度):压缩成“135-7924”,只记主要部分,每个数占 2 字节。
- FP8:再压缩成“13-79”,每个数占 1 字节。
- 量化(Q4、Q8):把数字映射成更短的编码,比如“高、中、低”,只用半个字节甚至更少。
字节(Byte) 是计算机存东西的基本单位。
1 KB = 1024 字节,1 MB = 1024 KB,1 GB = 1024 MB。
一个 FP16 的参数需要 2 字节,那么:
- 3B 参数 × 2 字节 = 6B 字节 ≈ 6 GB(这就是 3B_fp16 模型文件的大小)
- 7B 参数 × 2 字节 = 14B 字节 ≈ 14 GB(7B_fp16 模型文件的大小)
你看到的文件名里就藏着这个信息:
| 文件名片段 | 参数量 | 精度 | 每个参数大小 | 模型权重大小 ≈ |
|---|---|---|---|---|
3b_fp16 |
3B | FP16 | 2 字节 | 6 GB |
7b_fp16 |
7B | FP16 | 2 字节 | 14 GB |
7b_fp8_e4m3fn |
7B | FP8 | 1 字节 | 7 GB |
7b-Q4_K_M |
7B | 4-bit 量化 | 0.5 字节 | 3.5 GB |
7b-Q8_0 |
7B | 8-bit 量化 | 1 字节 | 7 GB |
注:实际文件会稍大几 MB,因为有结构信息,这里忽略不计。
所以,模型文件大小 ≈ 模型加载进显存后占用的第一个部分,我们叫它 “权重显存”。
第3步:计算时的“副本次”——激活值
切菜时,光有菜谱不够,你得有地方放切好的菜丝,还得有地方放半成品。
推理过程中,每一层的计算都会产生临时的数据,这个就叫激活值(activations)。
激活值占用的显存和几个因素有关:输入尺寸、batch_size、模型结构。
3.1 输入尺寸怎么算?
SeedVR2 是一个视频超分模型,它的输入不是一整段视频同时扔进去,而是一次送进去 batch_size 帧图像。
你在界面里看到的分辨率是 1080,指的是短边 1080,假设宽高比是常见的 16:9,那实际输入帧的大小约为:
- 宽度 1920,高度 1080
但是 SeedVR2 这样的扩散模型其实是在潜在空间(latent space) 里工作的,不是直接对像素操作。
通过 VAE 编码后,图像会被压缩成更小的潜在表示,通常压缩比是 8倍。
也就是说:
- 原图 1920×1080 → 潜在空间尺寸:240×135
- 每个像素点有几个通道(通常 4 或 16),我们假设是 16 个通道。
- 潜在表示一个“点”的数据量:16 个数值,如果用 FP16,每个数值 2 字节,即 32 字节/点。
于是一帧图像在潜空间里的体积:
240 × 135 × 32 字节 ≈ 1.04 MB(大约 1 兆)
看起来很小对吧?但激活值会随着网络深度而膨胀。
3.2 batch_size 的影响
你在设置中 batch_size = 5,意味着一次同时处理 5 帧。
那么输入端的初始潜在张量大小就是:
5 × 1.04 MB ≈ 5.2 MB
但送入 DiT(扩散变换器)后,每一层神经网络都会产生中间结果,这些结果比输入大得多。
DiT 内部会把通道数扩展到很大的维度(例如 3072 甚至 4096),并且要存储注意力矩阵等,激活显存会急剧增加。
经验规律:对于中等规模的扩散模型,batch_size 每增加 1,激活显存大约会多占 0.5–1 GB(FP16 下)。
我们保守按 1 GB 估算,batch_size=5 会让激活显存比 batch_size=1 时多出约 4–5 GB。
3.3 别忘了 VAE
VAE 也有自己的参数量(通常远小于 DiT,比如几百 MB),以及编码解码过程产生的激活。
这部分一般额外占 0.5–1 GB。
第4步:总显存估算公式
把上述加在一起,推理时总显存占用 ≈ 模型权重 + 固定激活基值 + batch额外激活 + VAE 开销
- 模型权重:根据文件精度可算(6 GB / 14 GB / 7 GB …)
- 固定激活基值:模型结构决定,即使 batch_size=1 也要占的中间结果,对 7B 扩散模型通常 4–6 GB
- batch额外激活:batch_size 每多 1 帧,加 0.8–1 GB 左右(我们取 1 GB)
- VAE 开销:1 GB
所以我们来算几个典型场景:
例子1:7B FP16,batch_size=5
权重:14 GB
固定激活基值:~5 GB
batch额外激活:1 GB × 4(因为第一帧算在基数里,额外4帧)= 4 GB
VAE开销:1 GB
总计 ≈ 14+5+4+1 = 24 GB
建议显卡:RTX 4090 (24GB),可能刚好跑起来,但有时会爆,需要稍微降低 batch_size 到 3 就安全。
例子2:7B FP8 混合精度,batch_size=5
权重:7 GB
基值:由于内部部分层还是 FP16,基值不变约 5 GB
额外激活:4 GB
VAE:1 GB
总计 ≈ 7+5+4+1 = 17 GB
建议显卡:RTX 4080 16GB 可能危险(16 < 17),需要降低 batch_size=3 就能在 4080 上用。
例子3:7B Q4_K_M 量化,batch_size=5
权重:3.5 GB
基值:量化模型激活仍多用 FP16 或 FP32,基值不变 ~5 GB
额外激活:4 GB
VAE:1 GB
总计 ≈ 3.5+5+4+1 = 13.5 GB
适合 12GB 显卡(如 RTX 4070 12GB)勉强能跑,建议调降 batch_size 到 4 更稳。
例子4:3B FP16,batch_size=5
权重:6 GB
3B 模型的基值比 7B 小些,约 3 GB
额外激活:4 GB
VAE:1 GB
总计 ≈ 6+3+4+1 = 14 GB
适合 12GB 显卡,14GB < 12GB? 不对,14>12 可能会超,需要减到 batch_size=2~3。
例子5:3B Q4_K_M,batch_size=5
权重:2.5 GB
基值:3 GB
额外激活:4 GB
VAE:1 GB
总计 ≈ 2.5+3+4+1 = 10.5 GB
8GB 显卡勉强不够,但可将 batch_size 调成 3,则额外激活=2 GB,总计 8.5 GB;或换用 12GB 卡。
第5步:对照你的参数,调整建议
你设置的参数:
- 分辨率
1080(1920×1080 潜空间 240×135) - batch_size=5
- 无输入噪声、无潜在噪声(噪声几乎不增加显存)
结合你有的模型,如果你想流畅运行,可以这样匹配:
| 你的显卡显存 | 推荐模型 + 配置 |
|---|---|
| ≤ 8 GB | 3B Q4_K_M,batch_size=2~3 |
| 12 GB | 3B FP16 (batch_size=2) 或 7B Q4_K_M (batch_size=3) |
| 16 GB | 7B FP8 (batch_size=3~4) 或 7B Q8_0 (batch_size=5) |
| 24 GB | 7B FP16 (batch_size=4~5 可能要稍微调小) 或 7B Sharp FP16 |
第6步:如果还是超显存怎么办?
出现 CUDA out of memory 的解决方法,按效果从好到坏:
- 减小 batch_size:这是最直接的。把 5 改成 3 甚至 2。
- 使用更低精度的模型:FP16 换成 FP8 混合,或量化版 Q4/Q8。
- 使用更小参数的模型:7B 换成 3B。
- 启用 CPU 卸载(offloading):你的界面里有
offload_device cuda:0,如果软件允许,可以把部分层放到 CPU 内存上,但速度会变慢。 - 降低输出分辨率:
resolution设置成 720 可以大幅度减少激活值。
第7步:总结成一个“查表口诀”
你以后看到任何新模型,都可以用这套口诀预估显存:
- 先看参数多少 B → 乘精度大小(FP16=2,FP8=1,Q4=0.5) → 得到权重 GB 数。
- 基础开销加 5 GB(大模型 7B 级别),3B 加 3 GB。
- batch_size 看额外:每多并行一帧 +1 GB(从 batch_size=1 开始算)。
- VAE 统一加 1 GB。
- 四数相加,得到总需显存。
例如,新模型 AnyVideo-10B-FP8, batch=4, 1080p:
- 权重:10B × 1 字节 = 10 GB
- 基值:10B 模型取 6 GB
- batch额外:3×1 = 3 GB
- VAE:1 GB
- 总计 20 GB → 需要 24G 显卡。
现在你已经完全掌握了如何评估一个模型、一套参数需要多少显存。你可以随时用这个方法来分析未来遇到的任何新模型。
下篇笔记 AI 模型显存估算与选型