跳到主要内容

硬件精度与算力

本文用于整理 GPU 算力指标、常见数值精度、Tensor Core 以及它们和大模型训练、推理性能之间的关系。

一句话概括:

算力指标说明硬件在某种精度下的理论计算能力,实际性能还要看显存带宽、算子实现、batch、并发和框架调度。

看 GPU 规格时,不要只看一个最大的 TFLOPS 数字。厂商通常会分别标注 FP32、TF32、FP16、BF16、FP8、INT8 等精度下的峰值性能,这些数字对应的使用场景、软件支持和精度风险都不同。

1. FLOPS、TFLOPS 和 TOPS

FLOPS 表示每秒浮点运算次数,通常用于描述 FP32、FP16、BF16、FP8 等浮点精度下的理论计算能力。

指标含义常见用途
FLOPSFloating Point Operations Per Second,每秒浮点运算次数计算能力的基础单位
TFLOPS每秒万亿次浮点运算GPU 规格表最常见的浮点算力单位
TOPS每秒万亿次操作常用于 INT8、INT4 等整数或低比特推理能力

简单理解:

  • FP16 200 TFLOPS 表示在 FP16 条件下理论上每秒可完成 200 万亿次浮点运算。
  • INT8 800 TOPS 表示在 INT8 条件下理论上每秒可完成 800 万亿次整数操作。
  • 不同精度的数字不能直接横向比较,必须先确认模型、框架和 kernel 是否真的使用了对应精度。

理论峰值通常是理想条件下的上限。真实 LLM 服务里,prefill、decode、KV Cache 读写、调度、通信和 tokenizer 都会拉低端到端吞吐。

2. 常见数值精度

数值精度决定每个数占用多少空间、计算速度多快,以及模型结果是否稳定。精度越低,通常越省显存、越有机会提高吞吐,但对硬件、量化方法和模型鲁棒性要求更高。

精度字节/参数类型常见场景备注
FP324浮点传统训练、部分优化器状态、数值敏感计算精度高,成本高,LLM 推理较少直接使用
TF324浮点计算格式NVIDIA Ampere 之后的矩阵乘法加速存储仍接近 FP32,计算吞吐比 FP32 更高
FP162浮点推理、混合精度训练、微调速度快、显存省,但动态范围较小
BF162浮点训练、微调、推理动态范围接近 FP32,训练更稳定
FP81浮点新一代训练、推理加速依赖硬件、Transformer Engine 和校准策略
INT81整数推理量化常见于高吞吐推理,精度损失需评估
INT4 / 4-bit0.5整数或低比特量化本地部署、低显存推理显存收益大,但效果和速度高度依赖实现

这里的“字节/参数”主要用于估算模型权重显存。实际运行还要额外计算 KV Cache、activation、workspace 和 runtime 开销,详见 显存模型占用显存估算

3. FP32、TF32、FP16 和 BF16

FP32 是传统单精度浮点格式,数值范围和精度都较好,但显存占用和计算成本较高。现代 LLM 训练通常不会全程只用 FP32,而是使用混合精度。

TF32 可以理解为 NVIDIA 在 Tensor Core 上加速 FP32 矩阵乘法的一种格式。它保留类似 FP32 的指数范围,但降低尾数精度,从而换取更高吞吐。对很多训练任务来说,TF32 可以在较少代码改动下提升矩阵乘法性能。

FP16 和 BF16 都是 16-bit 浮点格式:

格式主要优势主要风险
FP16吞吐高、显存占用低、推理支持广动态范围较小,训练时更容易溢出或下溢
BF16动态范围接近 FP32,训练更稳定某些老架构或消费级卡支持不完整

训练和微调时,BF16 通常比 FP16 更省心,因为它对梯度和激活值的动态范围更宽容。推理时,FP16 和 BF16 都很常见,实际选择取决于模型权重格式、GPU 支持和推理框架。

4. FP8、INT8 和 INT4

低精度的核心收益是减少数据搬运和显存占用,同时让 Tensor Core 或专用矩阵单元发挥更高吞吐。

4.1 FP8

FP8 是 8-bit 浮点格式,通常用于新一代 GPU 上的训练和推理加速。它比 FP16 更省显存和带宽,但需要更精细的缩放、校准和混合精度策略。

FP8 不是“把所有张量都无脑变成 8-bit”。实际系统中常见做法是:

  • 权重、激活或部分矩阵乘法使用 FP8。
  • 累加、归一化、softmax、loss 等数值敏感部分保留更高精度。
  • 通过框架或 Transformer Engine 管理 scale、amax history 和精度切换。

4.2 INT8

INT8 常用于推理量化。它把权重或激活映射到整数范围,配合 scale 和 zero point 还原近似数值。

常见收益:

  • 权重显存约为 FP16 的一半。
  • 显存带宽压力下降。
  • 在支持 INT8 Tensor Core 的硬件上,矩阵乘法吞吐可能提升。

常见风险:

  • 校准数据不代表真实请求时,精度可能下降。
  • 激活分布变化大的模型更容易量化失败。
  • 不是所有算子都支持 INT8,可能出现反量化和格式转换开销。

4.3 INT4 / 4-bit

INT4 常见于本地部署和低显存推理,例如 GPTQ、AWQ、GGUF 等方案。它对显存非常友好,但不一定总是更快。

原因是低比特推理除了矩阵乘法,还涉及解包、反量化、scale 读取和 kernel 适配。如果 GPU、框架或模型结构不匹配,4-bit 可能只是省显存,吞吐未必明显提升。

5. Tensor Core 为什么重要

Tensor Core 是面向矩阵乘法的专用计算单元。Transformer 模型的大量计算集中在矩阵乘法上,例如 attention 的 QKV 投影、MLP、输出投影等,因此 LLM 性能更依赖 Tensor Core 或同类矩阵单元,而不是只看通用 CUDA Core 数量。

对 LLM 来说,关键问题不是“这张卡有没有 Tensor Core”,而是:

  • 支持哪些精度:FP16、BF16、TF32、FP8、INT8、INT4。
  • 对应精度下的 Tensor Core 峰值是多少。
  • 推理框架是否有成熟 kernel 使用这些能力。
  • 模型量化格式是否和硬件路径匹配。
  • 算子是否会频繁 fallback 到较慢实现。

同一张 GPU 在 FP32、FP16、FP8、INT8 下的峰值可能差很多。选型时要看目标工作负载实际会跑在哪种精度,而不是看规格表里最大的那个数字。

6. 训练和推理的精度需求不同

训练、微调和推理对精度的容忍度不同。

场景常见精度关注点
预训练BF16、FP16、FP8、局部 FP32数值稳定、吞吐、显存、分布式训练效率
微调BF16、FP16、QLoRA 4-bit显存占用、梯度稳定、优化器状态
在线推理FP16、BF16、FP8、INT8、INT4延迟、吞吐、成本、输出质量
本地推理INT4、INT8、FP16显存能否放下、速度、可接受的质量损失

训练时不仅有权重,还要保存梯度、优化器状态和中间激活,精度过低容易影响收敛稳定性。推理时不需要反向传播,因此可以更积极地使用量化,但必须评估输出质量、长上下文稳定性和特定任务表现。

7. 理论算力不等于实际吞吐

GPU 规格里的 TFLOPS / TOPS 是峰值,不是线上服务的 token/s 保证。实际吞吐通常由多个环节共同决定:

  • 模型结构:层数、隐藏维度、attention 形式、MoE expert 数量。
  • 请求形态:输入长度、输出长度、batch、并发、是否流式输出。
  • 显存带宽:decode 阶段经常大量读取权重和 KV Cache。
  • KV Cache 管理:分页、复用、碎片、量化和迁移。
  • kernel 质量:FlashAttention、fused MLP、量化 kernel、采样 kernel。
  • 框架调度:continuous batching、prefill/decode 分离、队列策略。
  • 多卡通信:tensor parallel、pipeline parallel、expert parallel 的通信开销。

因此,两张卡的理论 FP16 算力接近,不代表 LLM 推理吞吐接近。显存容量、显存带宽、互联、框架支持和量化路径都可能改变结果。

8. 计算瓶颈和访存瓶颈

判断性能问题时,可以先区分是计算瓶颈还是访存瓶颈。

瓶颈类型典型表现常见优化方向
计算瓶颈GPU compute utilization 高,矩阵乘法耗时占比高使用更低精度、增大 batch、启用 Tensor Core、优化 kernel
访存瓶颈显存带宽接近上限,GPU 利用率不一定高量化权重/KV Cache、提升数据复用、使用更高带宽 GPU
调度瓶颈GPU 利用率低,请求排队或 batch 不稳定continuous batching、调整队列、减少 CPU/tokenizer 阻塞
通信瓶颈多卡扩展效率差,跨卡通信耗时高优化并行策略、使用 NVLink/NVSwitch、减少跨卡同步

LLM 推理里的 decode 阶段常常偏访存瓶颈,尤其是小 batch、低并发、长上下文场景。此时只堆理论算力未必有效,显存带宽和 KV Cache 管理可能更关键。

prefill 阶段通常更接近大矩阵计算,batch 和输入长度足够大时更容易吃满 Tensor Core。因此同一个模型的 prefill 和 decode 可能有完全不同的性能瓶颈。

9. 不同 GPU 架构的精度支持

不同架构支持的精度路径不同。选型前要确认“硬件支持、驱动支持、框架支持、模型支持”四件事同时成立。

架构示例常见关注精度说明
Volta / TuringFP16、INT8较早 Tensor Core 架构,现代 LLM 新特性支持有限
AmpereTF32、FP16、BF16、INT8A100 等数据中心卡常用于训练和推理,BF16 支持较关键
Ada LovelaceFP16、BF16、INT8、部分 FP8 路径需看型号和软件L4、L40S、RTX 40 系列常用于推理和视觉任务
HopperFP16、BF16、FP8、INT8H100/H200 常用于 LLM 训练和推理,FP8 与 Transformer Engine 更成熟
BlackwellFP8、更低精度和 Transformer 加速面向更大规模训练和推理,具体能力以型号和软件栈为准

对非 NVIDIA 加速卡,也要做同样检查:硬件矩阵单元支持哪些精度,编译器和运行时是否支持目标模型,推理框架是否已有稳定后端。

10. 选型时怎么看算力

选型不要从“哪张卡 TFLOPS 最高”开始,而要从任务反推。

任务优先确认
单机开发显存容量、FP16/BF16 支持、驱动和框架兼容
小规模推理显存容量、显存带宽、INT8/INT4 量化支持
高并发在线推理显存容量、带宽、FP8/INT8 路径、KV Cache 管理、服务框架
长上下文推理显存容量、KV Cache 精度、显存带宽、调度策略
微调BF16 支持、显存容量、优化器状态、梯度检查点
多卡训练BF16/FP8 能力、GPU 互联、网络、分布式框架

建议按下面顺序检查:

  1. 模型权重和 KV Cache 能不能放下。
  2. 目标精度是否被 GPU 和框架稳定支持。
  3. prefill 和 decode 分别会卡在计算、访存还是调度。
  4. 量化是否会影响业务任务质量。
  5. 单卡压测结果是否能线性或接近线性扩展到多卡。

11. 常见误区

误区更准确的理解
FP32 算力高就适合 LLMLLM 更常用 FP16、BF16、FP8、INT8 等路径
INT4 一定比 FP16 快INT4 通常省显存,但速度取决于 kernel 和反量化开销
理论 TFLOPS 可以直接换算 token/stoken/s 还受显存带宽、KV Cache、batch、调度和采样影响
支持某种精度就代表可生产使用还要看框架、模型、kernel、量化方案和稳定性
显存够就能高并发高并发还需要 KV Cache 管理、调度、带宽和延迟控制

12. 快速判断清单

看到一张 GPU 或一套推理方案时,可以快速问这些问题:

  1. 目标模型计划用 FP16、BF16、FP8、INT8 还是 INT4。
  2. 该 GPU 在目标精度下的 Tensor Core / 矩阵单元吞吐是多少。
  3. 推理框架是否有对应精度的成熟 kernel。
  4. 权重、KV Cache 和运行时开销是否能放进显存。
  5. 当前 workload 是 prefill 多,还是 decode 多。
  6. 瓶颈更像计算、显存带宽、通信,还是调度。
  7. 量化后是否做过目标任务评测,而不只是看通用 benchmark。
  8. 多卡场景下通信是否会抵消算力收益。

一句话总结:算力指标要和精度一起看,精度要和模型质量一起看,最终还要用真实请求形态压测验证。