前言
对于近年来出现的各种AI芯片架构,大家经常看到的论述是:AI芯片由于是DSA(Domain Specific Architecture),因此在AI计算领域,拥有比GPGPU架构的芯片更好的能效。这个论述是真的吗?那各种DSA的AI芯片,实际上究竟有多大的能效优势呢?主要是从哪些方面提高了能效?「But at what cost?「(玩下BBC的梗)。这应该是一个大家非常感兴趣的话题。我把平时看到的一些论文,会议PPT资料,官方文档,网站报道等公开的信息总结起来,结合自己的经验,加入一些对相关架构的看法,总结一下给感兴趣的朋友。
能效,主要在用的是三个指标:
- TOPS/W ,这是一种静态的能效参数,通常用Tensor(有的也包括Vector一起)的算力,和TDP的一个比值。TOPS和数据类型相关,推理常用INT8和FP16,不同架构的配比还不一样,1:1,2:1,4:1比较常见。
- Perf/W ,是实际的端到端的模型推理或训练的结果和TDP功率的比值。和TOPS/W相比,它包含了整个软件栈和AI芯片硬件的整体性能,具有更实际的意义。文中主要用 IPS/W 表示。
- Perf/TCO ,从系统层面,考虑性能和总的成本的比,其中成本包含除Power以外的其他相关的整体系统成本,实际主要是数据中心使用得考虑得比较多。比如加上CPU,Video,机柜组成的全系统成本。
但实际上,我经常在想,作为一个架构师,应该考虑的是更加广义上的Perf/TCO。这个C(cost)还要包括这个架构的实现(软硬件开发实现,具体就是硬件开发难度,软件栈,编译器,业务逻辑模型支持难度等)。扯远了。。。
这里主要分析推理的能效,使用TOPS/W作为基础,这是比较容易首先获得的数据,各个芯片一般都有公布,所以可以对比。另外,由于Perf/W能更好的反应实际性能和功率的关系,如果能得到这个数据,我会更加偏向于使用这个数据。
架构选择上,以GPGPU,Nvidia A100作为对比基础,分别选择了Google TPU(Tensor大核代表),Groq TSP(流水线型代表),Tenstorrent Grayskull(manycore小核代表),Qualcomm Cloud AI 100 (DSP+DSA混合),OPPO MariSilicon X(影像专用架构代表)。尽量避免国内同行架构,话题太敏感。另外数据是公开的数据,有些源头不大一致,不过差距不大,不影响分析。
GPGPU
选NV Ampere A100作为代表,7nm,PCIe,40G HBM2e的版本250W。TOPS/W方面,INT8 : FP16 = 2 : 1。INT8 624TOPS/250W = 2.5TOPS/W 。FP16, (312+78)TOPS/250W = 1.5TFOPS/W 。
Perf/W方面,根据MLPerf结果,Resnet50 32778IPS/250W = 130 IPS/W 。Bert base,2836 IPS/250W = 11 IPS/W 。
根据我的判断,MLPerf上的结果,应该是没有加入A100 高级特性的成绩,比如:Sparsity,residency control,Compression等。都用起来的话,应该还是小几十个点的提升。
其他家的GPGPU就不拿出来看了,大致差不多。AMD的MI更注重高精度的AI,因此在INT8方面投入不多,而且也没有上面的提到的为AI所加的高级特性。
Google TPU
Google是AI芯片里走在最前面的公司,从第一代开始业务落地,当前已经是第4代了。而且不想一般公司,Google非常开放,把每一代的架构,理念甚至一些详细设计,参数,结果数据等都公开出来,非常大气。这些详细的资料,让我们从第一代的脉动矩阵设计理念和细节开始,看着它怎么一步一步扩展到训练,然后在第4代推理/训练双产品线。它的架构变化过程,包括脉动矩阵的变化,vector/scalar的变化,memory系统的变化,都是非常有益架构师学习和思考的。所以非常感谢Google的大气!
TPUv4i比较适合拿来对比,因为同是7nm而训练的v4还没看足够信息。不过TPU主打BF16,它的INT8和BF16是相同的算力。所以INT8的TOPS/W很低,138/175= 0.8 TOPS/W ,当然BF16也能保持在0.8TOPS/W,不过还是低于NV A100的。
从Perf/W上看,没有看到直接数据,只有和T4的对比,性能差不多是T4的两倍,Perf/W和T4差不多。从T4推算,Resnet50在
70 IPS/W
上下,Bert在
5 IPS/W
上下。都不及升级后的A100。
为什么TPUv4i的性能和能效不如A100 GPGPU?几点想法:
虽然TPU的超大核的设计,大部分模型可以单核搞定,但也应该做到一定的平衡,支持一定程度的model splitting,也就是小核心的tiling。其实它的TPUv4就是单芯片双核心。如果TPUv4i也差不多类似的组合,128CMEM给两个核心共享或者每个64M,BF16的TOPS/W差不多能到276/250=1 TOPS/W。和A100就更接近了。
Groq TSP
Groq TSP和Google TPU有些近亲,因为Groq是由TPU团队的八位核心开发者离职后于2016年创办的。所以虽然两者的核心思路完全不一样,但给人的感觉差不多。嗯,就像西餐里的牛排和鸡胸,简单,量大。。。,简单是Groq自己宣传也这么说,你看图
TOPS/W数据,INT8 : FP16是4:1,INT8 820TOPS/300W= 2.7 TOPS/W ,而FP16只有205TOPS/300W= 0.7 TOPS/W ,和TPUv4i还真是差不多了呢。不过它的工艺上要落后吃点亏。
只不过整体的TOPS很高,特别是INT8的,曾经宣传1000TOPS。220MB SRAM可以容纳下Bert base。不过也是利用率很低,实际性能Resnet50 20400 IPS/300W= 68 IPS/W ,没看到Bert的成绩,说明之前软件还不成熟。总体上说,能效上看起来和TPU差不多。
其实两年前就在关注TSP,特别是ISC2020上它的详细介绍,一个原因就是它的算力/功耗和含光800NPU差不多,而且有一些理念也类似。有些方面它还支持更多的特性,比如C2C互联。但对比Resnet50性能,会发现比含光差得比较多,不到含光的1/3。对比含光的公开的PPT,就会发现主要的区别:TSP的pipeline太过于简单,和Google TPU的bundle类似,只有大概一个matrix+2个vector的操作,这样就需要更频繁的去MEM里读/写数据,导致了3倍的差距。从某个角度看,他们有点限制在了TPUv1的思维里,换了汤(计算/存储组织方式,ISA)没换药(实质控制和数据流),只不过TPU往训练方面功能性发展,而TSP往Producer-consumer的流水线固定pipeline模式最大化TOPS方向发展。
想想这是人之常情,很难完全丢掉原来的思维模式。但从另一个角度说,TSP架构还能有比较大的提升空间(比TPU脉动矩阵还是要灵活些),感兴趣的话可以去看看它的论文和ISC2020的PPT,拓展一些思路。
下面看看不同的架构模式:manycore
Tenstorrent Grayskull
知乎上挺多人谈起过这个芯片和架构,Tenstorrent 2016初就成立了,Jim Keller加入,名声大作。在它的宣传中,已经不是强调」 Spatial computing 」,这个理念不新鲜,已有挺多的芯片了。它强调的是」 The first conditional execution architecture for AI 「。猜测Jim加入应该也是被这个架构的原始理念所吸引,然后可以在后续的架构和高级特性上充分发挥了一把,这个架构的灵活度和发挥空间非常大。
先把能效数据列一下:
TOPS/W方面,8bit,368TOPS/75W= 4.9 TOPS/W ,FP16,92TOPS/75W= 1.2 TOPS/W 。可以看得出,16bit数据和A100差不多,但8bit基本上是A100的两倍。看了一下第三代的训练Wormhole在FP16的算力和功耗都x2了,所以还是相同的184TOPS/150W= 1.2 TOPS/W。
Perf/W方面表现更出色。Resnet50 22431 IPS/75W=
300 IPS/W
,Bert 2830 IPS/75W=
38 IPS/W
。下图是它的宣传文用到的Resnet50的能效对比图。
Perf/W的数据对比,基本上是A100 GPGPU的3倍上下。这个结果是不包含conditional execution的优化提升的,可以假定需要做的计算量和GPGPU差距不大,那它的能效提高,应该是由软硬件结合的,以可配置Spatial Dataflow的方式获得的。具体的说,
这里各家的做法可能有些区别,和各自的tiled core的微架构相关。Graphcore IPU的应该是最成熟,在中国业务落地做得最好的。有熟悉的同学方便的话可以分享一下。从GPGPU的角度,硬件调度block/warp,以硬件资源和时间利用率为主要因素,很难考虑cache locality方面。想要好的memory(shared+cache)使用,大部分依靠kernel写法,以及task graph,residency control等结合起来,效果编译器能帮的比较少。而且由于GPGPU的shared memory + residency memory都不大,操作空间很有限。而manycore架构多了编译器根据graph,考虑计算/存储/依赖等因素来优化布局,分配调度资源,提高能效。
Tenstorrent更大胆的创新是,聚焦在Dynamic Execution,看起来比其他家做的更激进,能大幅地减少一些模型的计算量。Dynamic Execution包括几个软硬件结合的优化:control flow, compression, sparsity, dynamic precision and conditional execution。
Tenstorrent通过core内的5个RISC-V CPU做复杂的控制流,实现了细粒度的条件执行,动态稀疏等特性,让一些比较稀疏模型的能效可以在软件优化配合下提高一个数量级。特别是应用在Bert中效果非常好,因为模型是固定sequence length,但实际输入长度短很多,有很多0。但conditional execution的应用场景也应该比较有限(看起来比如Resnet50这类网络可能就收益很小)。而且软硬件的复杂度感觉很大,我是基本想不清楚它的一整套工作流程,比如这5个CPU和主compute单元之间的编程和运行交互机制。后面继续学习,说不定能产生一些对项目有用的灵感。
关于这些创新,要说还是有些工程上的疑问,一个是精度,推理结果的精度还是很重要的,我们接触下来的客户大都很在乎这个。一个是适用性,就是有多少应用收益。还有一个是复杂度,感觉用于训练复杂度还会剧增,复杂度对应的是人才,资金和时间。在了解RISC-V CPU和计算模块的协作方式后,我会去尝试写写这种模式下的伪代码,琢磨一下软件栈的实现,看能不能预估一下工程上的难度。
看了几个国外比较有特色的AI芯片架构。基本上startup比较倾向于创新架构,他们也有比较充分的时间去慢慢打磨架构。像Groq/Tenstorrent,5年多时间还没有业务落地。而相对传统的企业,因为有市场的压力,有每年的迭代的要求,所以会选择一些比较稳妥的架构逐步演进方式,比如下面的高通。
Qualcomm Cloud AI 100
Qualcomm AI加速引擎发展到现在已经是第7代了。从最原始的Hexagon DSP,一代一代的,从VLIW,HW multi-threading,然后加Vector SIMD,然后加上Tensor Unit,配上比较大的VTCM (Vector Tightly Couple Memory,也就是shared memory)。和NV/AMD发展路线图差不多,但聚焦在移动和推理,所以也有区别。一路下来,高通AI引擎发展迅速,手机8Gen1 NPU性能已经遥遥领先,更是快速杀入数据中心和车载芯片市场。特别是在车载方面,好多汽车大厂合作,后起之秀啊!
以Cloud AI 100为例看看Qualcomm的AI引擎,能效表现和Tenstorrent Grayskull差不多,还稍微好一点。
TOPS/W方面,INT8 400 TOPS/75W= 5.3T OPS/W ,FP16 200 TOPS/75W= 2.7 TOPS/W , 是2:1的比例,因此FP16方面比Grayskull高。
Perf/W方面,直接上图,它可能用的是实际功耗,我换成TDP,Resnet50 22252 IPS/75W=
297 IPS/W
,Bert 3688 IPS/75W=
49 IPS/W
。注意Bert使用的是混合精度。这个能效很高了,低功耗版本的还要更高。
粗看它的架构设计,大概会觉得没什么特别的,scalar+vector+tensor+shared memory。就是软硬件的长时间打磨,很多细节一点一点累加起来才能得到好的能效。详细的材料可以看它的介绍,很多东西和GPGPU其实是差不多的。那为什么它的能耗表现比NV A100要好很多(2-3倍)?至少几个可见的因素:
当然还有就是NV GPGPU有更多的特性和使用场景,会增加面积,消耗和牺牲能效。另外Qualcomm这个对软件要求也会比较多。需要针对不同结构的模型细调。但看AI benchmark的分数,Snapdragon 8 Gen 1的得分已经是麒麟9000达芬奇的2.5倍,因此Qualcomm的软件栈应该还是比较成熟了。
OPPO MariSilicon X
最后关注一下DSA架构的另一个方向,就是 极致的Domain Specific 。以OPPO刚发布的MariSilicon X为例,它是一个影像专用NPU。
直接看报道的数据,
TOPS/W数据:18 TOPS,
11.6TOPS/W
。这个静态数据已经是A100的4倍多,Qualcomm AI 100的2倍多。
Perf/W方面,还没有具体的数据,专用的影像NPU,肯定不是跑Resnet50/Bert了。报道里提到一个有意思的对比,用的是OPPO自研的AI降噪模型, Find X3 Pro(骁龙888)[email protected],马里亚纳[email protected],马里亚纳的性能达到20倍,能效达到40倍。
我来理解的话,TOPS/W的两倍提升比较好理解,来源于它特定的业务流水线:
至于20倍的性能,我想就来自于专用算法了。他提到的是自研降噪模型,要不就是用了比较特别不适合矩阵计算的算子,要不就是用了很多大尺寸卷积,比如AI benchmark里有一个Image Deblurring的PyNET模型(PyNET:Replacing Mobile Camera ISP with a Single Deep Learning Model )。然后MariNeuro计算单元里直接实现了特殊的卷积算法,比如变换域的卷积算法等等,国内做相关算法硬件的人还是挺多的。所以它实际的计算量就减少了很多很多。有20倍的性能提升就不足为奇了。
对于20倍性能,40倍能效的提升,让一个几乎不能应用的算法能用起来(>30FPS),所以额外增加了一个芯片,这个代价似乎是值得的?但这个实质的对比是,有没有一个能在通用NPU,比如最新的Qualcomm AI core上跑出差不多效果(可以差一点)的 其他算法模型 做替代?如果有,就是独立芯片就没太大的意义。不过是在刚开始还没足够能力做一个完整手机SoC的情况下,先跨一小步,做一个技术积累。
总结
本想简单地比较比较各种架构的能效,发现写起来就刹不住。稍微总结一下我的观点,纯粹个人见解,欢迎讨论:
- TOPS/W稍微有些欺骗性,比如同一架构通过核心数和电压等调节,可以获得两倍以上的TOPS/W指标。它和能效不能线性挂钩,受到计算单元利用率和算法的影响比较大。
- Perf/W相对来说更有意义。它体现了完整的端到端架构,软件和硬件实现的能效高低。
- NPU和TSP的架构没能显示出比GPGPU更好的能效,体现了这种架构做高能效是比较难的。当然不是说这种架构都不能超过GPGPU,至少类似架构的含光800NPU在Resnet50能效上是3倍于A100的。
- Qualcomm Cloud AI 100和Tenstorrent grayskull能效比较接近,是A100的2-3倍。它们都非常依赖于编译器和软件栈的优化以配合才能保证高能效。但它们主要的实现思路不一样。
- Qualcomm Cloud AI 100主要是通过推理专用的DSP+DSA架构优化,结合软件栈的Depth first scheduling,将一个tiled的多层算子fused运行,即减少了memory访问,又增加了pipe的并行度。
- Tenstorrent grayskull主要通过Spatial Dataflow的方式,将Graph的多层算子优化布局在tiled Tensix core,将计算以mini-tensor的粒度打包传输(broadcast),同样的能实现了类似Depth first scheduling的算子fused效果。更有创新的是,通过core内RISC-V CPU实现复杂的控制流,实现了细粒度的条件执行,动态稀疏等特性,让一些比较稀疏模型的能效可以在软件优化配合下提高一个数量级。
- OPPO Marisilicon X通过影像专用,算法专用,对特定的算法是能达到几十倍的能效提升。
最后再展开一点,基于密集矩阵计算的数字电路芯片的AI加速架构,在能效上的上限比较低,相同工艺上看,看起来在GPGPU的5倍以下。这还是有很多的其他代价的前提下才能得到的,包括更少的功能和特性,更低精度,更复杂的编译器,软件栈等。
想要突破上限的两种思路:
- 减少运算量,
2. 改变计算电路模式,还在探索阶段。
其实不论选择哪一种架构方向,都是要静下心来慢慢地打磨架构,硬件和软件。能效是一点一点积累的,很难有捷径。
声明:文章仅表达本人个人观点, 数据来与网上公开文档 。