如何从大模型参数量估算显存占用

2026-08-11

引言

看到一个新模型发布,最常问的问题往往不是「它有多强」,而是:我这台机器的显存够不够跑。名字里的 7B70B236B 给出了规模量级,但真正决定显存的,是参数个数 × 每个参数占多少字节,再叠加推理时的上下文缓存与系统开销。

本文整理一条可复用的估算路径:先分清参数量含义,再看常见精度对应的字节数与格式差异,落到一个好记的公式并说明运行时余量;最后说明 TFLOPS / PFLOPS / TOPS 该怎么读、显存带宽为何常成瓶颈,再对照常见 GPU 的显存 / 带宽 / 算力。

先给一个直觉对照:

  • 7B × FP16(2 字节) → 约 14 GB
  • 70B × INT4(0.5 字节) → 约 35 GB

参数量到底指什么

模型名后缀里的 B 一般是 Billion(十亿)Llama 3 8BQwen2 72BDeepSeek 236B 等,都是在说内部大约有多少个 参数(parameter)

可以把参数想成模型里大量可调的「旋钮」。每个旋钮存一个数;推理时,模型靠这些数值的组合去算下一个 token。参数越多,表达能力的上限通常越高,但每个旋钮都要占一块存储——这就是显存压力的第一来源。

需要分清两件事:

  1. 参数量回答的是「有多少个旋钮」;
  2. 显存回答的是「这些旋钮按当前精度摊开来,要占多少字节」。

只看 70B 而不看精度,无法判断能不能跑:同一套参数,FP16 与 INT4 的体积可以差到约 4 倍


显存看的是「个数 × 每参数字节数」

每个参数占多少空间,取决于它用什么数值格式保存。常见精度大致如下:

精度 每参数字节数 说明
FP32 4 早期训练常用;当前推理很少再原样加载
FP16 / BF16 2 很常见的「原始」发布精度
INT8 1 量化后的常见档位
INT4 0.5 更激进的压缩,用精度换空间

因此:

\[V \approx N \times b\]

其中 $V$ 为权重体积,$N$ 为参数个数,$b$ 为每参数字节数。

下载页上同一模型出现多个 GGUF 档位(如 Q4、Q8),本质通常是同一组参数、不同压缩精度,而不是另一套完全不同的模型。上表只是估算时最常用的几档;下面补一张更完整的精度图景,方便把名字对上字节数与用途。

NOTE:
「参数量」是规模标签;「精度」才决定每个参数落地后的字节密度。讨论能否本地部署时,二者必须同时出现,否则估算没有意义。


常见精度格式:从 FP64 到 NVFP4

精度标签决定两件事:每个参数占多少字节(直接影响显存),以及算得有多稳、多快(影响训练是否崩、推理质量与吞吐)。总趋势很清楚:位数往下走,显存与带宽压力下降,吞吐通常上升,但动态范围或数值分辨率会变紧,需要靠格式设计、混合精度或量化校准把误差压住。

一张表把常见格式收齐(估算显存时,重点看「每参数字节」这一列):

精度 大致位宽 每参数字节 $b$ 和显存估算的关系 一句话定位
FP64 64 4 的量级之上(AI 少用) 几乎不拿来估本地 LLM 推理 科学计算用;对大模型是「杀鸡用牛刀」
FP32 32 4 $B \times 4$;70B 约 280 GB 量级 早期训练默认;权重文件仍常见
TF32 19(计算用) 按 FP32 张量入算时仍常按 4 估存储 更影响算力,不单独改「下载权重体积」口诀 Ampere 起 Tensor Core 可自动加速 FP32 矩阵乘
BF16 16 2 与 FP16 同档:$B \times 2$ 指数范围接近 FP32,训练更抗溢出
FP16 16 2 同上 尾数更细,但范围窄,训练常需 loss scaling
FP8 8 1 $B \times 1$;相对 FP16 权重体积约减半 Hopper / Blackwell 上训练与推理的常见加速档
INT8 8 1 与 FP8 同档字节密度 整数量化;部署压缩常用
INT4 / NF4 等 4 0.5 $B \times 0.5$;相对 FP16 约 1/4 更激进;质量要按任务回归测
NVFP4 4(加微块缩放开销) 约 0.5~0.6 粗估可先按 $\approx 0.5$;细账略高于纯 INT4 Blackwell 上的 4bit 浮点路线,带两级缩放

几个和「能不能跑」直接相关的判断:

  • 同一 $B$,换精度就是换 $b$。 70B 在 FP32 / FP16 / FP8 / INT4 下,权重口诀分别大约是 280 / 140 / 70 / 35 GB,量级差会立刻决定单卡还是多卡、要不要量化。
  • FP16 与 BF16 对显存同价,对训练风险不同。 二者都是 $b=2$;BF16 更像「卷尺」(范围大),FP16 更像「游标卡尺」(更细但易溢出)。只估推理显存时可以当成同一档;谈训练稳定性时不要混为一谈。
  • FP8、INT8 都是 $b=1$,但不是同一种东西。 FP8 仍是浮点(常见 E4M3 / E5M2 分工);INT8/INT4 走整数量化。下载页上的 FP8 权重与 GGUF Q8,字节密度接近,来路不同。
  • 更低精度不是自动「更差」,但也绝不能盲降。 许多通用对话场景里 FP8 相对 FP16 损失很小;代码、数学等任务对 INT4 / 4bit 更敏感。选型顺序宜「先能装下,再在目标评测集上回归」,而不是只看纸面 $b$。
  • NVFP4 可以记进 4bit 账本,但别当成免费午餐。 它用微块缩放 + 张量缩放抬精度,平均存储常略高于「纯 4bit」;粗估显存仍可先按半字节量级筛硬件,落地前用 vLLM / SGLang 等在业务数据上对比 FP16、BF16、FP8、NVFP4。

NOTE:
口诀里的 $b$ 取的是权重存储密度。TF32 主要改计算路径;KV Cache、激活、框架工作区仍可能以更高精度存在,所以下一节的余量不能省。


好记的估算公式

把单位收成「十亿参数」后,有一句够用的口诀:

\[M \approx B \times b\]

其中 $M$ 为所需显存(GB),$B$ 为参数量(以十亿计),$b$ 为每参数字节数。含义很直接:7B 且每参数 2 字节时,权重大约 $7 \times 2 = 14$ GB;换成 INT4 则是 $7 \times 0.5 = 3.5$ GB。

几个常用对照:

模型规模 精度 估算权重显存
7B FP16 $7 \times 2 \approx 14$ GB
7B INT4 $7 \times 0.5 \approx 3.5$ GB
70B FP16 $70 \times 2 \approx 140$ GB
70B INT4 $70 \times 0.5 \approx 35$ GB

可以看出:

  • 小模型在半精度下,消费级大显存卡往往还能谈「能不能装下」;
  • 70B 级若坚持 FP16,已经是多卡 / 专业卡量级;即便 INT4,也通常不是普通单卡能轻松吃下的。

NOTE:
上式估的是权重本身。它回答「参数按某精度摊开后大概多大」,不是完整的运行时账单。


为什么实际占用会更高

真正跑起来时,显存里通常不止权重,至少还有两类常见加项。

KV Cache(上下文缓存)。 自回归推理会缓存各层的 Key / Value,避免每生成一个 token 都重算整段历史。输入越长、对话轮次越多、batch 越大,这部分占得越多。经验上,在权重估算之上再留 约 10%~30% 余量,比「刚好卡着权重体积」更稳妥。

运行时与系统开销。 框架工作区、激活值临时缓冲、驱动与系统占用等,都会再吃一部分显存。桌面环境里,给系统和其他程序预留 约 1~2 GB 往往更接近真实可用上限。

综合起来,一个偏保守的写法是:

\[M_{\mathrm{safe}} \approx (B \times b) \times 1.2 + 2\]

其中 $M_{\mathrm{safe}}$ 仍以 GB 计。例如 7B、FP16:

\[14 \times 1.2 + 2 \approx 18.8\]

即约 $18.8$ GB。

也就是说:权重纸面约 14 GB 时,若机器标称 16 GB,长上下文或不干净的占用环境下仍可能紧张;按保守式看,更接近「需要接近 19 GB 量级的可用空间」这一判断。

NOTE:
口诀用来快速筛掉明显不够的配置;保守式用来避免「权重刚好塞进、一开长对话就 OOM」。二者用途不同,不必互相替代。


AI 算力单位怎么评估

显存回答「装不装得下」;规格表上的 TFLOPS / PFLOPS / TOPS 回答「理论上算得有多快」。同一张 RTX 5090,有人报约 1.6 PFLOPS,有人报约 3300 TOPS,还有人报约 6.6 PFLOPS——差别往往不在硬件,而在单位、精度、是否稀疏这三层口径。

两套基本单位:FLOPS 与 TOPS。 FLOPS(Floating Point Operations Per Second)量浮点吞吐,常见于 FP64 / FP32 / TF32 / FP16 / BF16 / FP8 / FP4;TOPS(Tera Operations Per Second)量整数吞吐,常见于 INT8 / INT4。进制上只是十进制台阶:

\[1\,\mathrm{PFLOPS} = 1000\,\mathrm{TFLOPS} = 10^{15}\,\mathrm{FLOPS}\]

例如 $1614\,\mathrm{TFLOPS} \div 1000 = 1.614\,\mathrm{PFLOPS}$,这与精度无关。FLOPS 与 TOPS 不能互相换算,也不能相加:RTX 5090 上 FP8 约 3.3 PFLOPS、INT8 约 3300 TOPS,数字量级接近,只是因为同为 8bit、单位时间能处理的「份数」相近;一个算浮点、一个算整数,不是同一种产能。

以 RTX 5090 为例:一张卡为什么有六七个「算力」。 公开宣传里常见这样一组理论峰值(量级示意,以厂商最新规格为准):

精度 理论峰值(约)
FP32 104 TFLOPS
FP16 / BF16(Tensor Core) 1614 TFLOPS(≈1.61 PFLOPS)
FP8(Tensor Core) ≈3.3 PFLOPS
FP4(Tensor Core) ≈6.6 PFLOPS
INT8 ≈3300 TOPS
INT4 ≈6600 TOPS

第一反应常常是:能不能把 1.61、3.3、6.6 加起来当「总算力」?不能。 这些数字描述的是同一套 Tensor Core 切到不同工作模式后的峰值,不是几路独立算力叠加——就像同一台发动机的「最高时速」和「百公里加速」不能相加成一个新指标。把 $1.61+3.3+6.6=11.5$ PFLOPS 当成总实力,口径是错的。

为什么精度越低,算力数字越高? 核心原因很具体:位宽越小,同一块 Tensor Core 在固定「数据通路宽度」下,单位时间能塞进去处理的操作越多。粗看位宽:

精度 每值位数
FP32 32 bit
FP16 / BF16 16 bit
FP8 8 bit
FP4 4 bit

位宽大约减半,理论上一个周期可处理的数据份数约翻倍,账面峰值也跟着上台阶——所以规格宣传里从 FP16 卷到 FP8、再卷到 FP4/INT4,数字最好看。代价同样具体:数值范围与分辨率变糙,对训练梯度更敏感。工业界更常见的是「训练偏 BF16/FP8,推理再下探 FP8/INT8/FP4」,而不是所有场景无脑上最低精度。跨卡比较时,必须先对齐「这是 BF16 还是 FP8」;集群备案也更常用 BF16/FP16 稠密口径,就是为了少被换精度刷数字带偏。

第三个变量:稀疏(Sparsity)。 单位和精度之外,规格表还常藏着「稠密 / 结构化稀疏」。以 H100 SXM5 一类公开数据为例(稠密 vs 稀疏):

精度 稠密(Dense) 结构化稀疏(Sparse)
FP16 Tensor Core ≈989.5 TFLOPS ≈1979 TFLOPS
FP8 Tensor Core ≈1979 TFLOPS ≈3958 TFLOPS
INT8 Tensor Core ≈1979 TOPS ≈3958 TOPS

同一精度下,稀疏峰值大约是稠密的 2 倍。这来自 Ampere 之后常见的 2:4 结构化稀疏:权重里每 4 个数按规则清零 2 个(精度损失可控为前提),硬件对这种规律稀疏做了加速,理想吞吐可翻倍。问题在于:宣传数字经常默认报稀疏峰值;多数生产模型并没有严格按 2:4 稀疏部署,实际很难摸到那条「更好看」的曲线。所以 H100 有人写约 0.99 PFLOPS、有人写约 1.98 PFLOPS,两者都可能对——一个稠密、一个稀疏。看表时务必盯紧是否标注 sparse / with sparsity。

理论峰值还要打 MFU 折扣。 厂商 PFLOPS 是理想上限;真实训练用

\[\mathrm{MFU} = \frac{\text{实际有效 FLOPS}}{\text{硬件理论峰值 FLOPS}}\]

衡量。峰值 1000 TFLOPS、实测有效 400 TFLOPS,则 MFU 为 40%。头部大模型训练里到约 40% 已很强,许多项目只有约 20%——带宽、多卡通信、算子、batch/序列长度、数据加载都会把峰值打折。nvidia-smi 的 GPU-Util 只表示「有没有 kernel 在跑」,不等于 Tensor Core 吃满,更不是 MFU。

NOTE:
看到算力数字,先问四句:浮点还是整数?哪个精度?稠密还是稀疏?理论峰值还是实测?口径没对齐,横向比较没有信息量。


显存带宽:为什么峰值算力经常跑不满

只盯 PFLOPS / TOPS 还不够。很多任务的体感瓶颈,是「喂数据」跟不上「算数据」——也就是显存带宽(GPU 与显存之间单位时间能搬多少字节,常见单位 GB/s、TB/s)。

业内常用 Roofline(屋顶线)来判断任务偏哪边:先看运算强度

\[\text{运算强度} = \frac{\text{总浮点运算次数}}{\text{需要搬运的数据字节数}}\]

运算强度高(例如很大的稠密矩阵乘),GPU 大部分时间在算,更接近算力受限(compute-bound),才有机会摸到理论峰值附近;运算强度低(例如大模型小 batch 逐 token 生成:每次算得不多,却要反复读权重大块),GPU 大部分时间在等显存把数搬过来,就是带宽受限(memory-bound),此时再高的 PFLOPS 也先被带宽卡住。

自回归解码恰恰经常落在后一类。这也是为什么推理性能讨论里,显存带宽往往和算力并列,甚至更靠前:H200 相对 H100,稠密 BF16/FP8 峰值大致同档,但带宽从约 3.35 TB/s 提到约 4.8 TB/s(约 +45% 量级),大模型推理吞吐的提升常常比「账面算力涨幅」更明显。对照下一节的表可以看到:消费级旗舰(如 5090)半精度账面算力可以很高,但 32 GB + 约 1.79 TB/s 相对数据中心卡的 HBM 容量与带宽,仍是另一条约束线。

经验上可以先这样分工:

  • 训练大模型:算力(PFLOPS)与显存容量都重要,带宽与互联同样会拖 MFU。
  • 推理大模型(尤其 batch 较小):显存带宽常常是第一瓶颈;先保证权重与 KV 装得下,再问峰值算力是否「多余」。

NOTE:
显存容量决定「能否驻留」;显存带宽决定「驻留之后能否持续喂饱计算」。两者和 PFLOPS 一起看,才不会只被规格表最大那个数字带跑。


常见 GPU 显存、带宽与算力一览

估完模型需求后,还要对照本机「标称显存」;若关心吞吐,再看显存带宽算力峰值。容量决定「能不能装下」,带宽更影响「算得有多顺」,算力则要在对齐精度与稠密/稀疏口径后再比。

下表按 NVIDIA 官网产品页 / 规格表 / 架构白皮书整理(数据中心卡取单卡 GPU Memory / Memory Bandwidth 与稠密 Tensor Core 峰值;专业卡同;GeForce 容量与 50 系带宽见 Compare GeForce Graphics Cards,4090 / 3090 带宽分别见 Ada / Ampere GA102 白皮书)。算力列优先给公开的 BF16/FP16、FP8 稠密峰值(单位 PFLOPS);「—」表示该精度不适用或未在此表展开。此处只列对照大模型时常看的几款。

型号 标称显存 显存带宽 BF16/FP16 稠密 FP8 稠密 显存类型
NVIDIA B200 180 GB 约 7.7~8 TB/s ≈2.25 PFLOPS ≈4.5 PFLOPS HBM3e
NVIDIA H200 141 GB 4.8 TB/s ≈0.99 PFLOPS ≈1.98 PFLOPS HBM3e
NVIDIA H800 80 GB / 94 GB(NVL) 约 3.35 TB/s(SXM)/ 约 3.9 TB/s(NVL) ≈0.99 PFLOPS ≈1.98 PFLOPS HBM3
NVIDIA H100 80 GB(SXM)/ 94 GB(NVL) 3.35 TB/s(SXM)/ 3.9 TB/s(NVL) ≈0.99 PFLOPS ≈1.98 PFLOPS HBM3
NVIDIA A100 40 GB / 80 GB 1.555 TB/s(40GB);1.935~2.039 TB/s(80GB PCIe / SXM) ≈0.31 PFLOPS(80GB) HBM2 / HBM2e
NVIDIA RTX PRO 6000 Blackwell 96 GB 1792 GB/s GDDR7(ECC)
NVIDIA RTX PRO 5000 Blackwell 48 GB / 72 GB 1344 GB/s GDDR7(ECC)
GeForce RTX 5090 32 GB 1792 GB/s ≈1.61 PFLOPS ≈3.3 PFLOPS GDDR7
GeForce RTX 4090 24 GB 1008 GB/s(约 1 TB/s) GDDR6X
GeForce RTX 3090 24 GB 936 GB/s GDDR6X

结合前文口诀与算力口径,可以很快建立量级直觉(仍要再留 KV Cache 与系统开销):

  • 24 GB / ~0.9–1.0 TB/s(3090 / 4090):半精度约 7B~13B 较常见;INT4 下约 70B(口诀约 35 GB)单卡仍吃紧。两者容量相同,4090 带宽略高。
  • 32 GB / 1.79 TB/s / BF16 ≈1.61 PFLOPS(5090):消费级账面半精度算力很高,但仍远不够半精度 70B(约 140 GB);推理小 batch 时带宽与显存往往比「再高一档 PFLOPS」更关键。
  • 48~96 GB / 1.3–1.8 TB/s(RTX PRO 5000 / 6000):桌面专业卡容量更高;量化后的大模型或更长上下文更现实。
  • 80~141 GB / 约 2–4.8 TB/s(A100 / H100 / H800 / H200):数据中心常见档位;H100/H200 的 BF16 稠密约 0.99 PFLOPS、FP8 约 1.98 PFLOPS,H200 以更大显存与更高带宽拉开推理体感。
  • 180 GB / 约 8 TB/s / BF16 ≈2.25 PFLOPS(B200):相对 H100/H200,显存、带宽与稠密算力同台阶抬升,更适合更大模型与更高吞吐的训练 / 推理集群。

NOTE:
同型号常有多种形态(如 A100 40/80 GB、H100 SXM/NVL、RTX PRO 5000 的 48/72 GB)。表中「/」表示官网并列的配置;对照时以实际机器规格为准。H800 为面向特定市场的 Hopper 产品线,显存与常见稠密算力档位与同形态 H100 对齐(差异主要在 NVLink 等互联)。算力数字均为稠密口径量级,若规格表另标 sparse,通常约为上表的约 2 倍,不可与稠密混比。


怎么用这套算法做判断

拿到一个新模型时,可以按固定三步走:

  1. 读参数量:名字或卡片上的 B 数字(十亿)。
  2. 读精度 / 量化档:FP16、BF16、FP8、INT8、INT4 / NVFP4,或 GGUF 的 Q4 / Q8 等,并换算成每参数字节数 $b$(FP16/BF16 为 2,FP8/INT8 为 1,INT4/NVFP4 约 0.5)。
  3. 先算权重,再加余量,最后对照显卡:用口诀 $M \approx B \times b$ 估权重,再用 $(B \times b) \times 1.2 + 2$ 为 KV Cache 与系统开销留余量,并与上表或本机标称显存比对。容量决定能否装下,带宽更影响吞吐;若还要比算力,先对齐精度与稠密/稀疏口径。同型号可能有多种容量(如 A100 40/80 GB、H100 80/94 GB)。

若结果已经接近或超过机器可用显存,优先考虑:换更低量化档、缩短上下文、减小 batch,或改用总参数更大但激活参数更少的 MoE(此时显存粗估仍常按总参数与加载精度看,不能只看「激活 10B」就当小模型)。更低精度能换显存与吞吐,但不等于可以跳过业务评测;训练场景还要区分 FP16 / BF16 的数值范围风险。更细的 MoE / 多卡切分问题,需要另按并行策略算,不在本文口诀范围内。

一句话收束:参数量给出旋钮个数,精度给出字节密度——用二者乘一遍,再对照显卡的显存 / 带宽 / 算力口径,量级通常立刻清楚。


参考材料