
一、显存与精度的估算(1).精度与其占用的字节数看 AI 芯片、GPU、模型训练和推理时经常会看到这些词FP64、FP32、TF32、BF16、FP16、FP8、INT8、INT4、NVFP4高精度更准确但代价也更高FP64一个数字 8 ByteFP32一个数字 4 ByteFP16 / BF16一个数字 2 ByteFP8 / INT8一个数字 1 ByteINT4一个数字约 0.5 ByteNVFP4数值本体 0.5 Byte计入分组 scale 后约 0.5625 Byte(2).精度与显存的计算粗略估算模型权重显存可以用模型权重显存 ≈ 参数量 × 每个参数占用字节数举个直觉例子一个 700 亿参数模型如果只看权重FP16 / BF16约 70B × 2 Byte 140GBINT8约 70B × 1 Byte 70GBINT4约 70B × 0.5 Byte 35GBNVFP4约 70B × 0.5625 Byte ≈ 39GB这里的 0.5625 Byte 是粗略把 NVFP4 的分组 scale 也算进去4 bit 数值本体 每 16 个值共享 1 个 FP8 scale平均每个值多 0.5 bit也就是约 4.5 bit / 值。更高层的 tensor-level FP32 scale 很小通常可以忽略。二、浮点数与整数1. 浮点数(1).浮点数分类FP 是 Floating Point中文叫浮点数。可以把它理解成计算机里的“二进制科学计数法”。从高精度到低精度可以粗略这样看FP64最高精度科学计算常用FP32传统深度学习标准精度TF32NVIDIA 上加速 FP32 矩阵计算BF16 / FP1616-bit 半精度训练常见FP88-bit 浮点更快更省INT88-bit 整数量化推理常见INT4 / NVFP44-bit 路线极致省显存(2).浮点数标识法-符号、指数、尾数浮点数符号、指数、尾数十进制里我们会这样写1230000 1.23 × 10^6 0.000123 1.23 × 10^-4计算机里类似只是底数从 10 换成了 2数值 ≈ 符号 × 尾数 × 2^指数也就是三部分[符号位] [指数位] [尾数位]符号位通常是 1 bit0 正数1 负数指数位像“小数点移动器”。指数位越多能表示的数字范围越大。比如 BF16 和 FP32 都有 8 个指数位所以 BF16 虽然只有 16 bit但范围接近 FP32。尾数位像“清晰度”。尾数位越多小数细节越多。例如 3.1415926 如果只保留 3 位有效数字就只能近似成 3.14。(3).常见格式的位宽分配FP64是双精度浮点数精度高、范围大但计算和显存成本都高常见于科学计算、仿真、金融数值等场景。大模型训练和推理一般不会大规模使用 FP64。FP32是传统深度学习里的标准单精度格式结构是 1 符号 8 指数 23 尾数。它比较稳但显存和算力开销大所以后来出现了各种低精度和混合精度方案。TF32是 NVIDIA Tensor Core 上的一种 FP32 加速计算模式。严格说它通常不是一种新的内存存储格式数据在内存里仍然按 FP32 存所以不省显存只是进入 Tensor Core 做矩阵乘法时乘法精度近似为 1 符号 8 指数 10 尾数。它保留 8 个指数位所以范围像 FP32但尾数只有 10 位所以精度比 FP32 低。可以简单理解成FP32 的快速计算模式主要省算力、提吞吐不是省显存。BF16 和 FP16都是 16 bit但性格不一样FP16 1 符号 5 指数 10 尾数 BF16 1 符号 8 指数 7 尾数FP16 尾数更多小数更细但指数更少范围更小。BF16 尾数更少小数更粗但指数更多范围接近 FP32更不容易 overflow。FP8是更激进的 8-bit 浮点格式常见两种E4M34 个指数位 3 个尾数位偏精度E5M25 个指数位 2 个尾数位偏范围FP8 更省显存、带宽压力更小、吞吐更高但也更依赖 scale、校准、框架和硬件支持。它不是只用于推理从 H100 这类支持 FP8 Tensor Core 的硬件开始训练中也可以使用 FP8但通常是 FP8 FP16/BF16/FP32 的混合精度训练关键累加、归一化、优化器状态等路径仍会保留更高精度。纯 FP8 训练目前并不常见。NVFP4是 NVIDIA Blackwell 架构上引入的 4-bit 浮点格式结构是NVFP4 E2M1 1 符号 2 指数 1 尾数单个 4 bit 数字非常粗所以实际使用时会配合分组缩放。可以理解成每个数字很小但一小组数字共享一个 scale让它仍然能服务于模型计算。NVIDIA 官方介绍里NVFP4 会采用“每 16 个值共享一个 FP8 E4M3 scale 每个 tensor 一个 FP32 scale”的两级缩放机制尽量降低 4-bit 量化带来的误差。在 NVIDIA 展示的语言模型评测中NVFP4 相比 FP8 的精度损失可控制在 1% 以内同时模型内存占用相比 FP16 约减少 3.5 倍相比 FP8 约减少 1.8 倍。配合 Blackwell 第五代 Tensor Core 对 microscaled FP4 的硬件支持NVFP4 更适合超大规模推理中追求显存、带宽和吞吐效率的场景。2.整数INT8 / INT4整数怎么表示小数INT 是 integer整数。它和 FP 不一样。FP 有符号位 指数位 尾数位INT 没有指数位和尾数位。有符号 INT 通常也不是像浮点数那样单独拆出“符号位 指数位 尾数位”而是用整数编码方式表示正负。比如有符号 INT8 大约表示 -128 到 127有符号 INT4 大约表示 -8 到 7。那模型参数明明是小数INT8 / INT4 怎么表示答案是靠 scale。量化可以理解成真实值 ≈ 整数值 × scale比如scale 0.01 整数 123 表示 1.23 整数 -27 表示 -0.27所以 INT8 / INT4 不是直接存小数而是整数 scale 一起近似表示小数。INT8 有 256 个档位量化比较成熟推理里很常见。INT4 只有 16 个档位更省显存但更容易失真常用于大模型权重量化。三、精度的选择1.范围 vs 精度它们到底在取舍什么FP64范围大精度高最贵FP32范围大精度较高传统基准BF16范围大精度较粗训练常用FP16范围小一些精度比 BF16 细FP8更快更省但更依赖缩放NVFP44-bit 浮点非常激进INT8 / INT4不是浮点靠 scale 表示小数2.训练和推理应该怎么选训练更看重数值稳定。BF16 范围大所以很常见但训练通常是混合精度关键累加、归一化、优化器状态等地方可能仍然保留 FP32。训练常用 BF16但不是全程只有 BF16。推理可以用 FP8但 FP16、BF16、INT8、INT4 仍然很常见。