一,芯片处理器运算单位
首先通常我们所见到的大写OPS是“ Operations Per Second”的缩写,表示每秒的操作次数。1TOPS代表处理器每秒钟可进行一万亿次(10^12)操作。我们常见的J5芯片,采用了全新一代的贝叶斯 (Bayes) 架构设计,可提供128TOPS的BPU算力,表示每秒峰值运算次数可达到128万亿次。与此对应的单位还有GOPS(Giga Operations Per Second),MOPS(Million Operation Per Second)算力单位。1GOPS代表处理器每秒钟可进行十亿次(10^9)操作,1MOPS代表处理器每秒钟可进行一百万次(10^6)操作。TOPS同GOPS与MOPS可以换算。
1TOPS = 1000GOPS
1GOPS = 1000MOPS
另外还有一种情况,还使用 TOPS/W 来作为评价处理器运算能力的一个性能指标,TOPS/W 用于度量在1W功耗的情况下,处理器能进行多少万亿次操作。特别是现在的大模型的计算量,在训练和应用的时候,功耗也是一个重要的指标。
二,flops,FLOPs,FLOPS三者之间的关系
经过查询各种资料,我暂且总结一下,flops与FLOPs的意义相同,与FLOPS的意义不一样。以后面“s”是否是大小写来区分。
FLOPs(同flops)是floating point of operations的缩写,是浮点运算次数,可以用来衡量算法/模型复杂度。常用当然还有Gflops和Tflops,我们搭建一个网络模型,可以查看此模型推理一次,也就是从输入到输出,所进过的浮点运算次数是多少。比如我使用pytorch搭建的目标检测网络模型计算量是23.78Gflops,这里"G"表示10的9次方,也就是10亿,此网络模型需要237.8亿次浮点运算。
FLOPS(全部大写)是floating-point operations per second的缩写,意指每秒浮点运算次数。用来衡量硬件芯片的性能。特别是训练的GPU,不同型号的英伟达GPU具有不同的硬件特性和计算单元配置。较新的GPU型号通常具有更多的计算单元和更高的时钟速度,因此其FLOPS值可能更高。
单位换算
一个MFLOPS(megaFLOPS)等于每秒一百万(=10^6)次的浮点运算,
一个GFLOPS(gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算,
一个TFLOPS(teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)
一个PFLOPS(petaFLOPS)等于每秒一千万亿(=10^15)次的浮点运算,
一个EFLOPS(exaFLOPS)等于每秒一百京(=10^18)次的浮点运算,
一个ZFLOPS(zettaFLOPS)等于每秒十万京(=10^21)次的浮点运算。
三,量化部署的计算量
我们都知道现在训练出一个网络模型,都是计算的的浮点运算量,比如上文所提到的我的网络模型是23.78Gflops,指的是浮点计算量,现在例如我们要部署到J5的芯片上,需要做量化和优化,重点说一下量化,也就是常见的int8的量化,上文的浮点指32位浮点。也就是说之前32位的浮点参数,现在要转化为8位的参数去计算,计算量肯定是少很多的,我想肯定不是原来的1/4这么简单,具体少多少,我暂时也还没有查询到具体的资料,但是在地平线的工具链模型转化时产生的.html文件里有相关信息,例如:FPS(帧率)、BPU conv original OPs per frame 还有详细信息里每次的算子对应的ops。大家可自行查看自己的模型算子的计算量。

