FLOPS 是什么?衡量计算机每秒能做多少次浮点运算
每秒浮点运算次数(FLoating-point Operations Per Second,FLOPS)是衡量计算机性能的指标,它表示处理器在一秒钟内可以执行多少次浮点算术运算。浮点运算是计算中的一个术语,指对带有小数点的实数进行的加、减、乘、除等运算,比如 3.14 乘以 2.718。科学计算和人工智能中的大部分计算都是浮点运算,因此 FLOPS 是衡量计算机,尤其是超级计算机和 AI 芯片计算能力的重要标准。
常用的单位
现代计算机的运算速度非常快,FLOPS 的数值通常很大,所以常用带前缀的单位:GFLOPS,每秒十亿次(10 的 9 次方);TFLOPS,每秒万亿次(10 的 12 次方);PFLOPS,每秒千万亿次(10 的 15 次方);EFLOPS,每秒百亿亿次(10 的 18 次方)。如今一张高端的 AI 加速卡,在低精度下的算力可以达到数千 TFLOPS;世界上最快的超级计算机,已经达到了 EFLOPS 级别。
FLOPS 和 FLOPs 的区别
有两个非常容易混淆的说法:FLOPS(最后一个 S 大写),表示每秒浮点运算次数,是衡量计算速度、计算能力的指标,描述的是硬件;FLOPs(最后一个 s 小写),是 floating-point operations 的复数,表示浮点运算的总次数,是衡量计算量的指标,常用来描述一个模型或一项任务需要多少计算,比如“训练这个模型需要 10 的 24 次方 FLOPs”“这个模型每处理一张图片需要 5 GFLOPs”。两者的关系就像速度和距离:用一项任务的总计算量(FLOPs)除以硬件的计算速度(FLOPS),就能粗略地估算出完成这项任务需要多少时间。在大模型的研究中,常用训练所消耗的总 FLOPs 来衡量训练的规模,比如缩放定律中的“计算量”。
注意精度
比较 FLOPS 时,一定要注意是在什么数值精度下测得的。浮点数可以用不同的位数来表示:64 位双精度(FP64)精度最高,主要用于科学计算;32 位单精度(FP32);以及 AI 中常用的 16 位(FP16、BF16)、8 位(FP8)甚至 4 位(FP4)等低精度格式。同一块芯片,精度越低,每秒能完成的运算次数就越多,可能相差几倍甚至几十倍。超级计算机的排行榜通常以 FP64 的性能来衡量,而 AI 芯片的宣传往往强调低精度下的峰值算力,两者不能直接比较。
理论峰值和实际表现
芯片厂商公布的 FLOPS 通常是理论上的峰值,实际运行中很难达到。实际的性能还受到内存带宽、数据搬运、芯片之间的通信等因素的限制:很多 AI 任务的瓶颈不在于计算有多快,而在于数据能不能及时地送到计算单元。衡量实际训练效率时,常用“模型 FLOPs 利用率”(MFU),也就是实际达到的计算量占理论峰值的比例,大模型训练通常能达到 30% 到 60% 左右。