2023年3月15日 作者: 进迭时空

RISC-V架构下 DSA – AI算力的更多可能性

AI应用出现在我们日常的生产生活当中,赋能各行各业的劲头势不可挡。近些年,AI算力芯片领域群雄逐鹿,通过对芯片、算力与AI三者发展迭代过程的理解,我们发现高能效比的算力、通用的软件栈以及高度优化的编译器,是我们的AI算力产品迈向成功的必要条件。

进迭时空作为计算芯片企业,我们对RISC-V架构CPU进行高度定制,不断挖掘其在计算中的潜力,在RISC-V生态强大的软件栈与CPU领域成熟的编译器的基础上对RISC-V DSA进行联合优化并提供软硬一体的计算解决方案,给AI领域带来高效、易用的算力。

GPGPU作为HPC领域(通用算力)的DSA打开了AI的大门

在上世纪80年代到90年代之间,随着科技的发展,CPU的性能每隔18到20个月左右就能翻倍。这就是英特尔(Intel)创始人之一戈登·摩尔提出的摩尔定律(Moore’s law)的主要内容。这意味着每隔18个月左右,同一款软件在新发售的CPU处理器上的运行速度可以直接翻倍。

转折点大概在2004年5月份, 当时Intel取消了其新一代的单核处理器开发工作转头主攻双核处理器设计。在同年稍晚一些,Herb Sutter写了著名的《The Free Lunch Is Over(不再有免费午餐)》,文章主要表达除非软件的开发进行了多核多线程的设计,否则将无法像过去一样每隔一年多时间即可获取一倍的加速效果。如下图所示,CPU处理器的单核计算性能开始趋近于一个平台区间,依靠增加晶体管密度来提升计算性能已趋于乏力,不断缩小的芯片尺寸总会遇到其物理极限。这意味着获得更高的性能提升需要新的方法。

上图为42年间的微处理器趋势数据

在摩尔定律的加倍效应已经放缓的后摩尔时代,持续提升处理器性能的一种重要的技术理念就是Domain-Specific Architectures(DSA),即采用可编程的专用集成电路(ASICs)去加速特定的高强度的处理器负载,比如加速图形渲染、加速AI神经网络的前向推理计算、提高巨量网络数据的吞吐等。

架构的定义包含指令集架构与微架构。指令集架构是软件与硬件进行对话的接口,如果说一条指令是一个单词,那么指令集(ISA)就是词典,而软件程序就像是一本使用特定词典中的词汇编写出来的一本书。

架构设计

通过对架构进行面向特定领域的设计,缩小应用范围,获得更高的性能,或者更好的能效比,保持可编程的灵活性,这就是DSA的理念。

● 面向领域的架构设计可以以较低的成本获取较高的算力,以满足算力需求。

● 指令集架构的可编程性带来了相对通用的算力,为下一代算法的应用和覆盖更广泛的领域提供了无限的可能。

DSA的概念由2017年图灵奖得主Henessy和Patterson提出,并进行了题为《创新体系结构将迎来新的黄金时代》的演说。我们生活中最为熟悉的DSA可能就是显卡(Graphics Processing Unit即GPU),游戏影音娱乐都离不开它。

1999年,NVIDIA公司在发布其标志性产品GeForce256时,首次提出了GPU的概念。其实就是DSA for 3D Graphics,目的是为了加速计算3D虚拟世界的渲染,降低CPU的负载。GPU技术的发展也促进了显卡杀手级游戏引擎的激进发展,时至今日游戏画面的逼真程度堪比真人版电影。

时间来到2006年,NVIDIA发布了GeForce 8800 GTX(核心代号G80),与G80一同发布的还有著名的CUDA(compute unified device architecture)并提供了驱动程序和 C 语言扩展 。

CUDA发展到今日,区别于开放计算语言 (OpenCL跨平台并行编程的独立开放标准) ,开发人员可以使用流行的语言(C、C++、Fortran、Python、MATLAB 等)编写 CUDA 程序,并使用几个基本的关键字即可将并行性添加到他们的代码中,而不仅仅是局限于使用C语言。理论上OpenCL的运行时编译能够带来较高的执行效率,但是实际上由于CUDA 是由同一家开发执行其功能的硬件的公司开发,所以后者能更好地匹配 GPU 的计算特性,从而提供更好的性能。

由于CUDA便捷的编程模型与优秀的编译器,硬件资源可以较为容易的被充分利用,使得 GPU 上的通用计算能力被充分开发,拓展了GPU的应用领域。如下图所示G80核心能够提供比同时期的以CPU为中心的高性能处理器相当甚至更高的计算能力。再加上便于编程利用的这一特点开始逐渐被高性能计算(High-Performance Computing HPC)社区注意到,并加入到CUDA的生态当中开展研究。NVIDIA公司也提供了cuBLAS、cuRAND、cuSPARSE、cuSolver、cuFFT、NPP等一众实用高效的计算库,进一步扩充了NVIDIA的算力生态。

2012年多伦多大学的Alex Krizhevsky发表了一种新的深度神经网络(DNN 亦或深度卷积神经网络CNN 本文中一律以DNN指代)模型AlexNet,该模型在ImageNet图像比赛中取得了有史以来最好的成绩。15.3%的top-5错误率与此同时第二名的错误率高达26.2%。这一结果震惊了世界,从此AI竞赛开始拉开帷幕。该网络模型拥有60 million的单精度浮点参数量,存储到磁盘上要占用240MB的空间。作者表示在显存和算力依然不够的影响下这是他在两块GTX 580 3GB GPU上能做到的极限了,如果能够有更快的GPU按照经验,他可以得到更好的分类结果。【ImageNet Classification with Deep Convolutional Neural Networks】

从那时起, 几乎所有的AI研究员都开始使用GPU去进行算法领域的探索与突破。同时GPU的架构设计也倾向于提供越来越多的3D能力以外的通用算力,这种设计理念被称为General-Purpose GPU(GPGPU)。

2011年TESLA GPU计算卡发布,标志着NVIDIA将正式用于计算的GPU产品线独立出来,凭借着架构上的优势,GPU在通用计算及超级计算机领域,逐渐取代CPU成为主角。【 HU L, CHE X, ZHENG S Q, et al. A closer look at GPGPU[J]. ACM Computing Surveys, 2016, 48(4): 1-20.】

伴随着GPU技术的发展,AI算法研究也突飞猛进。2014 年前后,香港中文大学的 Sun Yi 等人将卷积神经网络应用在人脸识别领域,采用20万训练数据,在LFW数据集上第一次得到超过人类水平的识别精度。2015年10月,AlphaGo击败樊麾,成为第一个无需让子即可在19路棋盘上击败围棋职业棋士的电脑围棋程序,创造了历史,并于2016年1月发表在知名期刊《自然》。在CES 2023上,奔驰宣布成为美国首家获得L3自动驾驶认证的厂商。AI算法在越来越多的领域的能力上接近和超越人类,也就是说在这些领域AI可以帮助降低人们的负担,释放了人类的潜力。同时也意味着商机与产业化的机会。

通用算力、专用算力,GPGPU与AI DSA相向而行,殊途同归。

在2014年,世界上第一款supercomputer on a module, Jetson TX1问世,TX1采用256个NVIDIA Maxwell架构CUDA cores 提供了超过1 TeraFLOPs性能。旨在能够为当时最新视觉计算应用提供所需的性能和能效。定位为Deep Learning, Computer Vision, Graphics、GPU Computing的嵌入式平台。

图5.DRIVE Thor is the next generation in the NVIDIA AI compute roadmap。
来源【https://blogs.nvidia.com/blog/2022/09/20/drive-thor/】

该系列产品从2018年的1T算力的TX1一路发展到2024年预计发售的拥有2000T算力的THOR平台。值得注意的是在XAVIER与ORIN平台上有超过一半的标称算力是由DLA提供。

图6.Jetson Orin Technical Specifications
来源【https://www.nvidia.com/en-sg/autonomous-machines/embedded-systems/jetson-orin/】

采用DLA可以加速部分计算密集的算子,与采用GPGPU计算相比,在损失部分推理精度的前提下,采用DLA加速推理计算不仅能加速更快而且能耗更低。但这并不是免费的午餐,首先要想把GPGPU与DLA两块算力同时利用起来软件上就需要比较精巧的异步设计使得CPU负载、编解码模块、图像处理模块、GPGPU以及DLA五者流水化并行处理。然而到了THOR这代自动驾驶平台的产品。DLA提供的算力甚至直接被砍掉,其中原由目前还不清楚。

但是从NVDIA的官方文档中我们可以看到,DLA支持了约15种主要AI算子的执行,不支持的算子类型将会回退到GPGPU进行运算。【https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#dla_layers

值得关注的是THOR平台的CUDA引入了Transformer Engine用来加速时下大火的基于attention机制的DL算法,Transformer 正是当下正被热议的ChatGPT的网络模型的重要组成部分。并且引入了对8-bit floating point (FP8) 精度的支持,这是INT8(8-bit整形数据类型,用于加速DNN推理计算)的替代品能够在同等的位宽下提供更高的精度。Nvidia在其Edge平台产品线上开始放弃专有的定制化大算力,逐步的在通用算力的基础上来增加领域的定制化。这也与其发布会上反复提到的,提高开发效率和加快软件迭代、算法迭代的目的相吻合。

GPU也是一种的DSA,GPU的发展论证了DSA取得的成功。DSA、GPU、AI这是个互相成就的故事。而Nvidia的GPGPU硬件的成功,与其CUDA生态丰富的算力软件包、易于使用的编程接口、优秀的编译器脱不开干系。由此我们可以得出一条结论,对于DSA算力硬件来说,这些都是走向商业成功的必要条件。

从TX1推出开始,对标TX1的竞品层出不穷。TX1的算力来自于GPGPU,而更加客制化的ASIC,利用卷积操作的空间局部性进行数据复用的精妙设计,在达到同等甚至更高算力的同时硬件的成本更低。最普遍的设计是一个高能效比的CPU小核如Arm Cortex A7/A53加固化的2D图像处理(CV)模块与固化的神经网络处理(DNN/NPU)模块。

由于小CPU的计算能力非常受限,将主要负责应用软件的任务调度部分,AI应用的前处理(非DNN算法模型部分)主要由2D图像处理模块来承接。问题在于前处理是非常碎片化的算法,除了个别的插值、颜色域转换功能几乎所有图像处理软件都会用到,其他所需功能非常的广泛。仅OpenCV的核心函数、图像处理函数就包含矩阵变换、滤波、分辨率变换、颜色空间转换、直方图等等几个大类,其中每个大类中的子方法又会有若干个,无法定义哪些功能需要被固化。这还不包含3D数据处理能力与特征描述子的使用。算法厂商的需求各不相同,固化的多了浪费面积,固化的少了产品开发的难度将大幅提升。

ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架训练得到的网络模型可以以相同的格式进行存储。 ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发。以NVIDIA的AI软件生态中最富盛名的DNN推理开发工具库TensortRT为例,5.1版本支持87个ONNX算子,到了7.1版本支持的ONNX算子数量为108个。功能高度固化的ASIC无法对新增的算子计算类型进行支持,将会越来越约束算法的迭代。而在这之上进行AI产品开发的算法工程师们无异于是戴着镣铐跳舞。

Google公司研发了张量处理单元 (TPU),TPU v1 于 2015 年投入生产,并被谷歌内部用于其应用程序。TPU是一种应用于AI领域,为AI算法提供算力的ASIC,利用了神经网络对于数值精度不敏感的特性,其思想核心是采用低精度矩阵Systolic Array提供巨大算力,同时提供满足AI需求的最小化的运算功能。此版本(即TPUv1)的云服务从未对用户开放开发使用。现在TPUv2以及后续版本被广泛的应用于谷歌的搜索排序、语音识别、以图搜图、谷歌翻译等领域。

图:TPUv1硬件架构图

在TPUv1版本硬件架构图上,我们可以看到Matrix Multiply模块提供了64K operations每时钟的超大算力,紧随其后的是Activation(激活)、Normalize/Pool(归一化/池化)这些非常具现化的运算。而到了TPUv2,我们可以看到通用的Vector单元代替了v1版本中activation pipe中的固定功能。

图:Transforming the TPUv1 datapath into the TPUv2 datapath  
来源:【The Design Process for Google’s Training Chips: TPUv2 and TPUv3  】

“我们已经在我们的数据中心内运行 TPU 一年多了,并且发现它们为机器学习提供了一个数量级更好的每瓦优化性能。这大致相当于未来七年左右的快进技术(三代摩尔定律)。谷歌的CEO这样评价了TPU。”【 Google CEO Sundar Pichai cloudplatform.googleblog.com/2016/05/Google-supercharges-machine-learning-tasks-with-custom-chip.html】

在21年,David Patterson进行了TPU演进十年的总结:Google的十大经验教训 【Ten Lessons From Three Generations Shaped Google’s TPUv4i : Industrial Product】 其中就指出DSA既要专门优化,也要灵活。TPUv2引入的通用算力给TPU提供了更强大的能力,不仅仅局限于TPUv1的模型推理功能,还能进行模型的训练,这往往需要更复杂的运算。Google也是通过XLA:一个用于TPU的高度定制优化的机器学习编译器,为机器学习(PyTorch、TensorFlow)与数值、科学计算(Jax、Julia、Nx)提供便捷通用的编程使用接口,通过云服务提供给用户,为尤其此生态下的用户带来了良好的用户体验。

DSA成功带来的启示

通过以上的成功案例我们可以发现,GPGPU、TPU的迭代的共同点是通过越来越高度的架构定制带来了越来越澎湃的专用算力。同时保留或者新增通用的算力。通过高度优化的编译器和丰富的软件栈,让用户能够轻松的将硬件算力充分地利用起来。那么通用算力、编译器、软件栈这些显然都在CPU平台是最丰富最成熟的,而对于CPU来说 “Domain-specific architecture design is all you need”。

RISC-V DSA能否把AI算力做好

GPU的发展,满足了大型 DNN 网络的内存带宽和计算能力的需求。由于计算能力的提高和可用数据量的增加,DNN 已经演变成更宽、更深的架构。DNN 中的层数可以达到数万层,参数达数十亿,研究人员很难在硬件资源(例如,内存、带宽和功耗)有限的便携式设备中部署 DNN。迫切需要在资源受限的边缘设备(例如,手机、嵌入式设备、智能可穿戴设备、机器人、无人机等)中有效部署 DNN 的方法。于是AI科学家们又开展AI模型小型化的研究,也就是用最少的参数量,最少的计算量去达到想要的模型精度。于是shufflenet、mobilenet、网络架构搜索 (NAS) 算法等轻量级神经网络结构开始被推出。能够在很少的参数量上去达到与大参数量模型接近的精度。同时神经网络的参数剪枝、参数量化、紧凑网络、知识蒸馏、低秩分解、参数共享、混合方式等等压缩技术与计算加速技术开始成为研究的热门。

图 3. Top-1 ImageNet-1k 精度与计算复杂度的球形图。每个球的大小对应于模型的复杂性。(转载自参考文献 [ Bianco, S.; Cadene, R.; Celona, L.; Napoletano, T. Benchmark Analysis of Representative Deep Neural Network Architectures. IEEE Access. 2018, 6, 64270–67277.])。
图4. 模型大小与精度比较。
EfficientNet-B0 是AutoML MNAS开发的基线网络,而 Efficient-B1 到 B7 是基线网络扩展得到的。
特别的,EfficientNet-B7 达到了最新的 84.4% top-1 / 97.1% top-5 精度,同时比现有最好的 CNN 小 8.4 倍。

同时AI科学家们也发现提升模型参数量带来模型精度提升的效应在减弱,如图4所示在图像分类的任务上,模型的精度随着参数量的提升是越来越接近85% Top-1准确率的这个平台。也就是说在成熟的视觉领域我们得到一定AI能力的算力需求是趋于收敛的。那么给定任务给定模型给定图像处理的帧率我们就可以得到我们的算力需求。完成指定领域的任务,最终的算力需求是可以被定义并且趋同。

这一切都意味着AI不再是超级算力、超级计算机上独享的能力。AI将会在任何地方,这同时也对我们的通用处理器发起了挑战。

DSA可以有效、高效的去完成领域任务,然而C++编程、CPU上的经验可能就无法被利用上了。在David Patterson的十大经验教训里也提到DSA的软件栈目前不及CPU,尤其在编译器领域还不够成熟。那么如果DSA能够利用CPU的软件栈丰富且成熟的优势岂不是如虎添翼?

例如CUDA以提供了多种常用编程语言的支持加以关键字拓展的方式去进行并行软件编程,加之本身卓越的通用计算能力。使得其开发生态越来越壮大。有实力的客户甚至放弃使用TensoRT通过自身的GPGPU技术积累开发出了适合自己业务需求的更高效的软件,比NVIDIA提供的TensoRT性能提高了一倍。【滴滴自研 NVIDIA GPU 汇编器:https://on-demand.gputechconf.com/gtc-cn/2019/pdf/CN9667/presentation.pdf

那么我们何不在CPU上将AI算力提供出来,这条路是不是可行的呢?

如上图所示,在过去CPU上的浮点能力由于SIMD拓展的提出,
在频率提升很缓慢的时代依旧得到了巨大的提升。
并随着SIMD数据并行宽度的提升有一个线性的增长。

近年来Intel x86 CPU处理器上的SIMD由64bit的MMX(Multi Media eXtension,多媒体扩展指令集)增长到了512bit的数学拓展AVX512与AI拓展VNNI。使得在四核Core i7-1185G7 @ 3.00GHz的处理器上可以获取3Tops的算力。提供了AI所谓的MAC能力,加之本身的通用SIMD计算能力是可以有效COVER如智能机器人、智能视频、语音终端设备等AI场景。但此等SOC做AI终端过于奢侈,且定位还是通用而不是AI DSA。

Intel最新的AMX矩阵拓展架构、Arm架构下的SME矩阵拓展架构以及IBM的AMM指令集更是将CPU能提供的AI算力又提升了一个台阶。在架构代号为Sapphire Rapids的server级处理器上可以通过AMX获得每时钟周期1024个mac是VNNI拓展提供的算力的8倍(128个mac每时钟周期)。

https://edc.intel.com/content/www/tw/zh/products/performance/benchmarks/architecture-day-2021/

CPU上完全可以长出使能AI应用大算力,正如过去长出了适合多媒体处理的算力。

https://en.wikipedia.org/wiki/MMX_(instruction_set)

为什么是RISC-V

如果要对CPU架构进行领域定制,需要获取对应的架构级授权(Architectural License)。区别于IP Core的授权,架构级授权特指指令集(ISA)授权,允许客户自行定制优化。

关于CPU业界两大阵营x86与ARM的架构授权的情况是什么样的呢?x86的专利主要掌握在英特尔和AMD这两家公司手中,到目前为止国内没有任何一家厂商拥有x86的架构级授权,海光信息与兆芯采用的是 x86 架构 IP 内核授权模式。海思、飞腾均已经获得 ARMv8架构的永久授权。尽管 ARM 此前表态 ARMv9 架构不受美国出口管理条例(EAR)约束,华为海思等国内CPU产商依然可获授权,但是ARMv9不再提供永久授权,采用 ARM 架构仍有长期隐患。而且即使在拥有ARM架构级授权的情况下做出指令集定制与改动,也必须经由ARM参与支持修改才可以,否则将触发违约条款。

RISC-V 因其相对精简的指令集架构(ISA)以及开源宽松的 BSD 协议使得Fabless可以基于RISC-V架构进行任意的架构拓展与定制。相信RISC-V DSA可以利用其经典的CPU的编程模型与相对低成本获取的AI算力,加之标准RISC-V Vector拓展提供的通用算力。能够给AI嵌入式场景下1-10T算力需求范围的AI产业应用带来全新的商业化硬件方案。

参考资料

  1. 《Intel cancels Tejas, moves to dual-core designs》, 【https://www.eetimes.com/Intel-cancels-Tejas-moves-to-dual-core-designs/】
  2. 《The Free Lunch Is Over》,【http://www.gotw.ca/publications/concurrency-ddj.htm】
  3. 《ImageNet Classification with Deep Convolutional Neural Networks》,Alex Krizhevsky,Ilya Sutskever,Geoffrey E。
  4. 【 HU L, CHE X, ZHENG S Q, et al. A closer look at GPGPU[J]. ACM Computing Surveys, 2016, 48(4): 1-20.】
  5. 《DRIVE Thor is the next generation in the NVIDIA AI compute roadmap》【https://blogs.nvidia.com/blog/2022/09/20/drive-thor/】
  6. Jetson Orin Technical Specifications,https://www.nvidia.com/en-sg/autonomous-machines/embedded-systems/jetson-orin/】
  7. DLA支持的层和限制,【https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#dla_layers】
  8. ONNX-Tensorrt,https://github.com/onnx/onnx-tensorrt/blob/7.1/operators.md】
  9. 《Google CEO Sundar Pichai》, 【cloudplatform.googleblog.com/2016/05/Google-supercharges-machine-learning-tasks-with-custom-chip.html】
  10. MnasNet: Towards Automating the Design of Mobile Machine Learning Models – Google AI Blog (googleblog.com)
  11. 滴滴自研 NVIDIA GPU 汇编器:https://on-demand.gputechconf.com/gtc-cn/2019/pdf/CN9667/presentation.pdf】
  12. intel性能指标参数,https://edc.intel.com/content/www/tw/zh/products/performance/benchmarks/architecture-day-2021/】
  13. MMX介绍,https://en.wikipedia.org/wiki/MMX_(instruction_set)】