两年前,华为正式发布了名为“昇腾”的人工智能专用芯片,并高调宣布,这是当时世界上算力最强的AI处理器。转眼之间两年过去了,牛年就要来了,在这篇文章里我们就一起来看看,昇腾到底“牛”在哪里。
为什么需要人工智能芯片
在探讨昇腾芯片的软硬件架构之前,有必要首先明确人工智能芯片的必要性。
在过去的几年里,人工智能技术取得了飞速的发展。业界普遍认为,驱动这一发展的主要力量有三个:一个是海量数据的产生和累积,一个是理论算法的创新,还有一个就是计算技术的变革。
可以说,数据、算力、算法这三点是相互结合,缺一不可的。如果我们把人工智能技术的发展比作一个正在起飞的火箭,那么大数据就是它的燃料,算法和理论用来控制它的飞行轨迹和姿态,计算技术则是它持续爆发的引擎。
为了让这个火箭飞的更高,飞的更远,我们就需要不断获取更多的数据,并且不断创造和改进我们的算法、模型和理论,来对这些数据进行更有效的处理、分析和利用。此外,我们还要不断升级计算的能力,从而在更短的时间里处理更多的数据。而承载这一切发展的最重要的基础,就是芯片,特别是人工智能芯片。
在之前的文章里,我们介绍过四种主要的人工智能芯片,分别是针对AI应用进行了架构优化的CPU、GPU,还有FPGA,以及AI专用芯片ASIC。为了评价这四种AI芯片的优势和劣势,我们讨论了衡量AI芯片的五个重要因素,分别是性能、灵活性、同构性、成本和功耗。
总体来看,这四种芯片都有各自存在的意义。每种芯片都有自己的独特优势,也有不可忽视的短板。拿AI专用芯片举例,它最主要的优势就是极高的性能和极低的功耗,但是代价就是极高的研发成本,以及较低的灵活性。关于其他的比较内容,欢迎看一下那篇文章《算力至上?AI芯片大对决》。
接下来,我们就重点看一下人工智能专用芯片,特别是华为的昇腾AI芯片的相关技术内容。我会结合目前可以找到的公开技术资料,尽量深入地分析昇腾AI芯片的一些技术特点,包括硬件架构、软件框架,以及华为基于昇腾处理器的全栈式解决方案的一些有比较意思的内容。
昇腾AI芯片 – 硬件架构
首先来看一下昇腾AI芯片的硬件架构。这里以及之后说的“昇腾AI芯片”其实有两个,一个是2018年发布的昇腾310,它主要针对的是推理应用,还有一个是2019年发布的针对训练应用的昇腾910。
值得注意的是,作为人工智能专用芯片,昇腾310和昇腾910都是为了特定的应用领域进行设计和深度优化的,这也是它们区别于CPU、GPU这些通用芯片的最主要的方面。我们都知道,AI系统又继续分成训练和推理这两个主要的过程,这也会造成不同AI芯片的优化侧重点有所不同。
比如,昇腾910主要针对的是云端的AI训练应用,所以芯片的性能,也就是算力的大小,就是它优化的重点。昇腾910使用台积电7纳米工艺制造,FP16算力可以达到256TFLOPS,INT8算力高达512TOPS,同时支持128通道全高清视频解码。这些性能其实都超过了同时期、或者使用同等工艺进行制造的GPU,比如英伟达的V100。为了实现这么高的算力,昇腾910的最大功耗为310W,和GPU基本处于一个量级。
相比之下,昇腾310针对的是推理场景,主要应用在移动端,所以这就需要对性能和功耗进行一定的平衡。这是因为我们基本不可能在部署智能摄像头、无人驾驶车辆,或者是我们的手机或者手表里放一个有着几百瓦功耗的AI芯片。同时对于一些边缘计算的场景,对芯片使用成本的控制,以及芯片本身的实时性、安全性等等,也都是重要的考虑因素。
所以结合这些需求,昇腾310采用的是12纳米工艺进行制造,最大功耗仅为8W。在性能方面,它的FP16算力达到了8TFLOPS,INT8的算力可以达到16TOPS,同时也集成了16通道的全高清视频解码器。这些在边缘计算领域其实已经是很高的算力了。
在之前介绍苹果M1芯片的时候我们说过,现在很多的芯片结构其实都是以片上系统(SoC)的形式进行设计开发的,当时我们拿蛋糕举过例子,也就是在一个盒子里装了很多不同的小蛋糕,而不是直接做一个特别大的蛋糕。当然有很多朋友也举了不少其他的例子,比如什么双拼披萨、肉夹馍,还有说五仁月饼的。反正不管是什么吃的,这样做都有很多的好处,比如每个小蛋糕可以分别做,还可以做不同的口味、大小,最后整合在一起就好,这样既节省了制作的时间,也降低了制作的风险和成本。
同样的,昇腾AI芯片的本质也是一个片上系统。在芯片上有很多不同的模块,也就是前面说的小蛋糕组成,它们有的负责数据存储、有的负责接口和通信、有的负责任务调度和控制,还有最重要的就是负责AI运算的计算核心。
昇腾910架构示意图
从硬件结构来看,昇腾AI芯片最主要的特点,就是它的这个AI核心采用了华为自研的达芬奇架构。昇腾系列的两款芯片,也就是昇腾910和昇腾310,都使用了这个基于达芬奇架构的AI核心。这个也是昇腾芯片的主要竞争优势。
总体来说,这个达芬奇架构可以分为三个主要的组成部分,分别对应数据的计算、存储和控制。
拿计算单元来说,它可以执行标量、向量和张量三种基础运算,分别对应上图中的蓝色、橙色和红色的部分。比如这个张量运算就是专门用来加速AI应用中的矩阵运算,它也叫所谓的3D Cube单元,它可以用一条指令完成两个16x16的矩阵相乘运算。
由于篇幅所限,达芬奇架构的具体细节在这里就不再一一介绍了,有兴趣的朋友可以看一下《昇腾AI处理器架构与编程》,这本书由华为官方背书,里面有关于昇腾AI芯片比较深入的介绍。
昇腾AI芯片 – 软件架构
除了芯片的硬件结构之外,同样非常重要的就是编程方法和软件架构的设计和实现。英伟达GPU之所以在人工智能领域大放异彩,并且得到非常广泛的应用,GPU芯片性能的提升固然重要,但更重要的就是它推出的成熟易用的编程框架CUDA。
相比之下,FPGA的编程难度极大,这也在很大程度上限制了FPGA的广泛使用。当然为了应对这个问题,FPGA厂商也在努力尝试简化FPGA的编程难度,包括提供更加易用的编程工具,或者使用高层次综合的方法对FPGA进行编程等等,这些在之前的文章中详细介绍过,这里就不再赘述了。
对于AI专用芯片,编程性也是重中之重。为此,昇腾AI芯片也提供了一个多层的软件栈和开发工具链,来帮助开发者更好的使用和开发昇腾。通过软件的多样性,也能在很大程度上弥补专用芯片灵活性不足的劣势。
总体来说,这个软件栈可以分成四层。最底下的是处理器的计算资源,比如前面提到的AI核心、CPU,还有负责数字视觉的计算模块等等。再往上是一些标准的加速库,负责给硬件输出算子层面的任务。此外还有任务调度器和一些预处理模块。然后再往上,就是框架层,顾名思义它就是用来调用和管理深度学习框架,并生成离线模型。
值得注意的是,昇腾AI处理器不仅支持主流的深度学习框架,比如TensorFlow和PyTorch,还支持华为自研的名叫MindSpore的深度学习框架。通过MindSpore框架产生的神经网络模型,可以直接运行在昇腾AI处理器上,而无需进行硬件的适配和转换,这也就极大的提升了开发效率。
在2020年的开发者大会上,华为也正式将MindSpore框架进行了开源,这也是构建广阔生态系统的重要一步。
这个软件栈的最后一层,就是应用层,它的抽象程度最高,封装集成了很多专用领域的计算引擎,比如针对计算机视觉、还有针对语言文字处理的算法封装等等,用户可以直接拿来进行调用。
除了这几个大的逻辑层次之外,昇腾的软件栈还提供了一个完整的开发工具链MindStudio,包括编译、调试、性能分析、模型转换等等,这里就不再多说了,有兴趣的读者朋友可以看一下前面提到的书籍。
昇腾AI芯片 – 生态系统
有了硬件架构和软件栈,还需要最后一个大的环节,来完成整个生态的闭环,那就是提供结合软硬件的系统级解决方案。这个其实是一个目前芯片业界的发展趋势,不管是CPU、GPU、FPGA还是这样的AI专用芯片,其实都是在遵循这个规律在发展。
简单来说,就是芯片公司不仅要提供牛逼的芯片,当然这个是最基本的大前提,除此之外它们还要提供好用的软件和开发工具,就像前面介绍的软件栈。再然后,最好还要提供完整的参考设计以及软硬件系统,让大家拿过来就能用。
之前介绍苹果M1芯片的时候也说过,我们不可能去单独买到这个芯片,而是需要购买整个生态系统。这个对于FPGA也是如此。最早的时候,像Altera或者赛灵思这样的FPGA厂家都是卖芯片,但是现在这些公司也在不断推出各种基于FPGA的加速卡产品,同时也提供了像OPAE或者Vitis这样的软件栈和开发软件,并且以此构建生态。
同样的,昇腾也提供了一系列的硬件产品,从最小的加速模块,到推理或者训练专用的加速卡,再到专用的服务器,甚至是由多个服务器阵列组成的计算集群,这些也构建了一个涵盖终端、边缘以及云计算的产品组合,使得用户可以根据自身的实际需要,选择合适的硬件产品,这也就是华为说的全场景覆盖。
Atlas 900 AI计算集群
当然了为了打造良好的生态,开放和交流也是必不可少的。为此华为推出了昇腾社区,在那上面基本包含了和昇腾软硬件相关的所有内容,有兴趣的读者朋友可以去看看。
小结
本文从硬件、软件和生态三个角度介绍了华为的昇腾AI处理器。我们还深入探讨了华为自研的达芬奇架构、以及MindSpore这个深度学习框架的一些技术特点。同时我们也看到了一些业界的发展趋势,也就是以硬件为基础,通过软件扩展灵活性和易用性,然后围绕软件和硬件去打造系统级的解决方案,并构建一个完整的生态系统。
说了这么多,仍然没有回答文章题目提出的问题,也就是昇腾AI芯片究竟是不是地表最强的AI芯片?这个问题并没有一个明确的答案,因为这取决于我们的衡量维度和评判标准。更重要的是,我们应该思考这个问题的必要性,也就是“是不是最强,到底有什么意义”?事实上,作为仍然在不断发展的技术,任何进步都是值得被肯定和鼓励的。