↓ 跳过正文

官网TFLOPS写312实测67:算力'虚标'的锅,可能不在你的GPU

·1855 字·4 分钟·
作者
闫工
十年运营商机房 IT 运维,CCIE。做数据中心网络架构、GPU 服务器与裸金属交付,顺手写点自研小工具。

📌 转载说明:本文首发于微信公众号《闫工的算力工具箱》 原文链接:https://mp.weixin.qq.com/s/GgXaWzYpIWCA3mg-ydNfHA

【闫工的工具箱 · 第 16 弹|科普】
#

先抛个反直觉的结论:L20 的峰值算力比 A800 还高,跑真实模型却慢整整一倍。 这就是"算力虚标"的真相——不是机器不行,而是"口径"不对。

做算力交付的同行,八成遇到过这种对话:

客户拿着官网标称的 TFLOPS 来验收,一实测就炸:“你这台 A800 是不是虚标?官网写 312,你怎么才测出 67?”

不是你机器有问题,是 TFLOPS 的"口径"太多,两边说岔了。今天把这笔账算清楚:TFLOPS 有几种算法、为啥差这么多、实测该看哪个数。

— — —

1. TFLOPS 是啥?先扫个盲
#

TFLOPS = 每秒万亿次浮点运算(Tera FLoating-point Operations Per Second)。

但"浮点运算"有精度之分,位数越低、算得越快:

精度含义典型场景
FP64双精度 64 位科学计算/仿真
FP32单精度 32 位框架默认
TF32动态范围同 FP32、尾数同 FP16Ampere+ 矩阵计算默认
FP16半精度 16 位,易溢出早期训练
BF1616 位但指数 8 位(同 FP32 范围)大模型训练首选
FP88 位(Hopper+ 引入)推理标配、训练已验证
INT88 位整数推理量化

这里单独说下 TF32:它是 NVIDIA 从 Ampere 架构(A100/H100 这一代)开始引入的一种"折中"精度——指数位(决定能表示多大范围)沿用 FP32,尾数(决定计算精度)压缩到 FP16 水平。可以简单理解为:一种专为 AI 矩阵运算设计的精度格式,既保留了 FP32 不容易溢出的稳定范围,又拿到了 FP16 的计算效率,所以在 A100/H100 这类卡上,矩阵乘默认就用 TF32,不用你手动切。

约减半位数,吞吐翻倍。同样是 A100,FP32 约 19.5 TFLOPS,FP16 Tensor 约 312 TFLOPS,差 16 倍,而它们都叫"A100 的 TFLOPS"。

2. 第一个坑:CUDA Core 和 Tensor Core 不是一回事
#

GPU 里有两套算力单元:

  • CUDA Cores:通用计算,处理激活函数、非矩阵运算,按 FP32 峰值衡量(A100 约 19.5 TFLOPS);
  • Tensor Cores:专为矩阵乘加(MMA)设计的加速单元,只在 FP16/BF16/TF32/FP8 下生效,吞吐远高于 CUDA Cores(A100 FP16 Tensor 约 312 TFLOPS)。

神经网络的矩阵乘占算力需求 80%~90%,所以比较 AI 算力通常看 Tensor TFLOPS,它和 CUDA Core 的 FP32 能差一个数量级。

A800 标 312 是哪来的?就是 FP16/BF16 Tensor Core(Sparse)的标称值,最高规格、最理想工况。

3. 第二个坑:标称值用的是"稀疏"还是"稠密"?
#

NVIDIA 标称 Tensor TFLOPS 通常给两个值:

  • Dense(稠密):无稀疏加速,真实可用;
  • Sparse(2:4 结构化稀疏):一半权重是 0,跳过计算,吞吐翻倍。

实际模型的权重大多不具备稀疏结构,对外口径必须用 Dense 值,Sparse 值只是上限参考。

4. 实测数据:同一批机器,差在哪?
#

我们内部用 cudaTensorCoreGemm(张量核心 GEMM 样例,累加器 FP32,测的是 TF32)做了对比:

同机型 A800,不同驱动(CUDA 12.1):

项目535.129.03550.54.14
cTCG1.93ms2.04ms
TFOPS7167.24
LLava921.55s921.3s

结论:同款 GPU 换驱动,性能基本没差(误差范围内),驱动不是背锅侠。

A800 vs L20(驱动均为 550.54.14 / CUDA 12.1):

项目A800L20
cTCG2.04ms1.87ms
TFOPS67.2473.34
LLava921.2s2150s
dit (Step/Sec)1.780.85
chat-GLM (Step/Sec)1.7820.819

有意思的是:

  • 单看 cTCG 峰值,L20 反而比 A800 高(73 vs 67);
  • 但跑真实模型,A800 比 L20 快约 2 倍(921s vs 2150s)。

这正好说明:峰值 TFLOPS 不等于真实训练吞吐。模型结构、I/O、通信开销,都会显著影响最终性能。所以验收时千万别拿标称峰值去估算实际训练速度——A800 标称 312,实测 TF32 只有 67;单看峰值 L20 还比 A800 高,真跑起来却慢一倍。

官网TFLOPS写312实测67:算力"虚标"的锅,可能不在你的GPU

5. 交付必看:验收口径建议
#

  1. 对外统一用 Dense Tensor TFLOPS,标注精度(TF32/FP16/BF16/FP8);
  2. 标称值 vs 实测值对不上时,先查口径:精度?Dense/Sparse?CUDA Core/Tensor Core?
  3. 验收压测用真实业务模型(LLava/dit/chat-GLM 这类),别只跑峰值样例;
  4. 记录版本:GPU 型号、驱动、CUDA、NCCL、框架版本,版本不同结果不同,可追溯才能复现;
  5. 直接引用未注明口径的 “TFLOPS” 极易引发客户误解,报价单上写清楚。

官网TFLOPS写312实测67:算力"虚标"的锅,可能不在你的GPU

— — —

往期回顾
#

ESXi系统盘重装后虚拟机消失?别慌,三步救回数据盘里的虚拟机

8卡变7卡、93°C还在Throttling:卡没坏,是热到"自我降速"了

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

凌晨3点的GPU服务器:一次BMC故障排查全记录

相关文章