小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2026-04-29 / 6 阅读
0
0

模型显存占用估算指南

下面是一份从零开始、完全面向新手的教程,我会把“怎么看懂显存占用”“怎么估算模型需要多少显存”一步一步讲清楚。

我们不会预设你有任何技术背景,所有的概念都会先用生活化类比讲明白,再回到你前面见过的真实文件名和参数面板上,把它们全部串联起来。


第1步:一个文件,为什么需要显存?

想象你在厨房做菜:

  • 菜谱 = 模型文件(例如 .safetensors.gguf
  • 大脑 = 显卡的计算芯片(GPU)
  • 切菜板/台面 = 显存(VRAM),所有临时东西都放这,用完就端走

模型文件就像一本厚菜谱,现在你想照着菜谱做菜(推理)。
你必须先把菜谱翻开放在台面上,同时还要在台面上准备要切的菜、半成品、成品盘子

显存就是要同时容纳:

  1. 模型本身(菜谱)
  2. 正在处理的视频帧数据(要切的菜)
  3. 运算过程中的半成品(切好的菜、调好的酱汁)

这三样加起来,就是总显存占用。下面我们一个个看。


第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 的解决方法,按效果从好到坏:

  1. 减小 batch_size:这是最直接的。把 5 改成 3 甚至 2。
  2. 使用更低精度的模型:FP16 换成 FP8 混合,或量化版 Q4/Q8。
  3. 使用更小参数的模型:7B 换成 3B。
  4. 启用 CPU 卸载(offloading):你的界面里有 offload_device cuda:0,如果软件允许,可以把部分层放到 CPU 内存上,但速度会变慢。
  5. 降低输出分辨率resolution 设置成 720 可以大幅度减少激活值。

第7步:总结成一个“查表口诀”

你以后看到任何新模型,都可以用这套口诀预估显存:

  1. 先看参数多少 B → 乘精度大小(FP16=2,FP8=1,Q4=0.5) → 得到权重 GB 数。
  2. 基础开销加 5 GB(大模型 7B 级别),3B 加 3 GB。
  3. batch_size 看额外:每多并行一帧 +1 GB(从 batch_size=1 开始算)。
  4. VAE 统一加 1 GB
  5. 四数相加,得到总需显存

例如,新模型 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 模型显存估算与选型


评论