FLOPs 是"这活儿一共要干多少",FLOPS 是"每秒能干多少"。前者是工作量,后者是速度。两个词长得几乎一样,量纲却完全不同,混着用算出来的时间能错好几个数量级。
先说清来源。FLOP 是 floating point operation(一次浮点运算)的缩写,加小写 s 是复数,表示"很多次运算",所以 FLOPs 是计算量;FLOPS 里的 S 是 per second,所以 FLOPS 是运算速度,也就是常说的算力。麻烦的是,业内书写并不统一,很多文档两个词都写成 FLOPs。这时候别抠字母,看主语:主语是模型、算子、一次训练任务,说的是计算量;主语是芯片、显卡、机房,说的是算力供给。
打个比方:砌一面墙。FLOPs 是这面墙总共要砌多少块砖,FLOPS 是一个工人每秒能砌几块砖。知道总砖数和每秒砌砖速度,才能估工期;只拿其中一个数,什么也算不出来。
举个假设的例子:某个模型跑一次前向(forward pass)大约需要 2 GFLOPs,某张卡标称算力 100 TFLOPS。理想情况下耗时是 2×10⁹ ÷ 1×10¹⁴ = 2×10⁻⁵ 秒,也就是 20 微秒。真实情况会慢不少——算力跑不满、显存带宽跟不上、批大小不合适,都会拖后腿。但如果一开始就把 2 GFLOPs 当成 2 GFLOPS 去比,结论会荒谬到没法看。
| 对比项 | FLOPs | FLOPS |
|---|---|---|
| 含义 | 浮点运算总次数 | 每秒浮点运算次数 |
| 量纲 | 次数(工作量) | 次/秒(速度) |
| 常见主语 | 模型、算子、训练任务 | 芯片、显卡、集群 |
| 常见前缀 | GFLOPs、TFLOPs 表示总量 | TFLOPS、PFLOPS 表示速率 |
| 回答的问题 | 要干多少活 | 干活有多快 |
几个容易混淆的邻居也得拎清:
- 参数量(parameters):模型有多少权重,是固定值;而 FLOPs 跟输入长度强相关,序列越长,同一模型的计算量越大。
- 训练总计算量:业界常用粗估是 总 FLOPs ≈ 6 × 参数量 × 训练 token 数(前向约 2、反向约 4)。只是量级估算,别当精确公式用。
- MACs(乘加次数):一次乘加等于两次浮点运算,1 MAC = 2 FLOPs。跨论文比数字前,先确认口径一致。
- 内存带宽与时延:算力再高,数据喂不进去也白搭。这也是"标称 FLOPS"和"实际跑出来的速度"常常差一大截的原因。
对从业者的实际意义:估训练成本、算推理延迟、比芯片规格之前,先问一句"这是 FLOPs 还是 FLOPS"。看厂商规格时还要留意,标称 FLOPS 通常是特定精度下的峰值,是否稀疏、是否含加速单元,口径差别很大,具体以官方页面为准。对普通人:听到"算力多少",那是速度;听到"这个模型计算量多大",那是工作量。两者能算出时间,但不能直接比大小。
