来源 | 汽车电子与软件
知圈 | 进“高精度地图社群”,请加微信15221054164,备注地图
概述随着人工智能的热潮和AI算法的广泛应用,深度学习已成为当前AI研究的重点,在自动驾驶领域,环境感知、传感器融合、控制决策等等都会多少涉及到深度学习,而自动驾驶性能的优劣直接和AI算法相关,说白了就是深度学习算法的优劣。要想在面对海量数据的并行运算的同时做到高效、可靠,那就意味着承载AI算法的计算平台需要提供足够的性能加速,也就是AI芯片的算力要足够用,同时考虑其他因素,功耗还不能超标,能效比越高越好。在AI芯片领域,可供选择的,首先是需要一个CPU或者ARM内核来执行调度处理,然后大量的并行计算靠GPU、FPGA或者ASIC来完成,而ASIC里面有多种架构,谷歌的TPU、地平线BPU、寒武纪和华为都推出的NPU等。
之前看过一篇文章,关于GPU等AI芯片如何处理深度学习的,简单整理一下加深记忆。
CPU和GPU都属于通用芯片,不过GPU在近几年专门针对AI算法加强了并行计算单元,因此除CPU外,GPU、NPU、FPGA等芯片作为AI算法的硬件加速器在不同的应用场景和深度学习算法中发挥着各自的优势,且听一一道来。
在自动驾驶算法中,感知算法是作为一切自动驾驶控制处理的基础,环境感知中主要是靠摄像头和激光雷达,而且以摄像头视觉处理居多,因此以摄像头视觉深度学习算法中的人脸识别为例,其基本处理流程及对应功能模块所需的算力需求分布如下:
视觉算法中,先是摄像头获取图像,然后经过CPU或GPU进行预处理,也就是基本的判断识别和任务分配,然后就需要进行大量的数据计算分析,这时候GPU、NPU或者FPGA等AI芯片开始派上用场。之所以会这样,这就涉及到了作为通用芯片CPU和AI计算芯片GPU等的原理架构方面的区别了。
CPU和GPU的原理/架构对比
CPU(CentralProcessing Unit)中央处理器,是一块超大规模的集成电路,主要逻辑架构包括控制单元Control,运算单元ALU和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。简单说,就是计算单元、控制单元和存储单元。
架构图如下所示:
CPU遵循的是冯·诺依曼架构,其核心是存储程序/数据、串行顺序执行。因此CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以CPU在进行大规模并行计算方面受到限制,相对而言更擅长于处理逻辑控制。
CPU无法做到大量数据并行计算的能力,但GPU可以。
GPU(GraphicsProcessing Unit),即图形处理器,是一种由大量运算单元组成的大规模并行计算架构,早先由CPU中分出来专门用于处理图像并行计算数据,专为同时处理多重并行计算任务而设计。
GPU中也包含基本的计算单元、控制单元和存储单元,但GPU的架构与CPU有很大不同,其架构图如下所示。
与CPU相比,CPU芯片空间的不到20%是ALU,而GPU芯片空间的80%以上是ALU。即GPU拥有更多的ALU用于数据并行处理。这就是为什么GPU可以具备强大的并行计算能力的原因。
从硬件架构分析来看,CPU和GPU似乎很像,都有内存、Cache、ALU、CU,都有着很多的核心,但是CPU的核心占比比较重,相对计算单元ALU很少,可以用来处理非常复杂的控制逻辑,预测分支、乱序执行、多级流水任务等等。相对而言GPU的核心就是比较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量。
简单来说就是CPU的核心擅长完成多重复杂任务,重在逻辑,重在串行程序;GPU的核心擅长完成具有简单的控制逻辑的任务,重在计算,重在并行。
再来看一张NVIDIA公开的关于GPU的架构图
上图NVIDIAGPU拥有4个SM(streaming multiprocessor),每个SM有4*8=32个Core,一共有4*4*8=128个Core。再对比一下CPU的Haswell的Core微架构图,可以看到,其有20多种“执行单元”(ExecutionUnits),如ALU、FMA、FP add和FP mul等。每个“执行单元”用于处理不同的指令以 FP mul“执行单元为例”,一个CPU的Core中有2个,六核心的CPU有12个。所以在执行单元方面,128:12。
(仅做参考,此处GPU的Core并不可以和CPU结构图中的Core对等,它只能相当于CPU微架构中的一个“执行单元”。)
关于CPU和GPU可以比喻成:CPU是一个拥有多种功能的优秀领导者,其的强项在于“调度”而非纯粹的计算;而GPU则可以被看成一个接受CPU调度的“拥有大量计算能力”的员工。
总结GPU具有如下特点:
1) 多线程,提供了多核并行计算的基础结构,且核心数非常多,可以支撑大量数据的并行计算,处理神经网络数据远远高效于CPU。
2) 拥有更高的访存速度。
3) 更高的浮点运算能力。
因此,GPU比CPU更适合深度学习中的大量训练数据、大量矩阵、卷积运算。
GPU虽然在并行计算能力上尽显优势,但并不能单独工作,需要CPU的协同处理,对于神经网络模型的构建和数据流的传递还是在CPU上进行。
但是GPU也有天生缺陷,那就是功耗高,体积大,价格贵。
性能越高的GPU体积越大,功耗越高,价格也昂贵,对于一些小型设备、移动设备来说将无法使用。
因此,一种体积小、功耗低、计算性能高、计算效率高的ASIC专用芯片NPU诞生了。
NPU原理和AI计算优势
NPU (NeuralNetworks Process Units)神经网络处理单元。NPU工作原理是在电路层模拟人类神经元和突触,并且用深度学习指令集直接处理大规模的神经元和突触,一条指令完成一组神经元的处理。相比于CPU和GPU,NPU通过突出权重实现存储和计算一体化,从而提高运行效率。
国内寒武纪是最早研究NPU的企业,并且华为麒麟970曾采用寒武纪的NPU架构,不过从2018年开始华为发布自研昇腾芯片专为达芬奇架构。
NPU是模仿生物神经网络而构建的,CPU、GPU处理器需要用数千条指令完成的神经元处理,NPU只要一条或几条就能完成,因此在深度学习的处理效率方面优势明显。
据说,同等功耗下NPU 的性能是 GPU 的 118 倍。(数据来源网络)
与GPU一样,NPU同样需要CPU的协同处理才能完成特定的任务。
说道这里提一下手机芯片,作为移动端的专用SoC,内部集成了CPU、GPU和NPU。
以麒麟990 5G版为例说明,在CPU方面共有8核心,分别是两颗2.86GHz的A76架构大核,两颗2.36GHz的A76架构中核以及四颗1.95GHz的A55架构小核。在GPU方面,则是采用了16核的Mali-G76 GPU,而在NPU方面,集成2颗大核和一颗小核,采用的是华为自研达芬奇架构的NPU。
其中CPU负责手机应用流畅切换、GPU支持游戏画面快速加载,而NPU(神经网络处理器)就专门负责实现AI运算和AI应用的实现。也就是说CPU是负责计算和整体协调的,而GPU是负责和图像有关的部分,NPU负责和AI有关的部分。其工作流程则是,任何工作都要先通过CPU,CPU再根据这一块的工作的性质来决定分配给谁。如果是图形方面的计算,就会分配给GPU,如果是AI方面的计算需求,就分配给NPU。
本文借用一下华为麒麟官方发布的《看懂芯片原来这么简单》系列漫画介绍华为自研达芬奇架构NPU,相比传统标量、矢量运算模式,华为自研架构NPU采用3D Cube针对矩阵运算做加速,因此,单位时间计算的数据量更大,单位功耗下的AI算力也更强,相对传统的CPU和GPU实现数量级提升,实现更优能效。
由此可以看出,在手机SOC中,CPU是至关重要的部分,同样在自动驾驶行业处理深度学习AI算法方面,GPU和NPU都需要和CPU协同才能发挥其性能优势。
CPU如何辅助GPU实现加速
GPU当前只是单纯的并行矩阵的乘法和加法运算,对于神经网络模型的构建和数据流的传递还是在CPU上进行。
CPU加载权重数据,按照代码构建神经网络模型,将每层的矩阵运算通过CUDA或OpenCL等类库接口传送到GPU上实现并行计算,输出结果;CPU接着调度下层神经元组矩阵数据计算,直至神经网络输出层计算完成,得到最终结果。
CPU 与GPU的交互流程:
1) 获取GPU信息,配置GPU id
2) 加载神经元参数到GPU
3) GPU加速神经网络计算
4) 接收GPU计算结果
CPU如何辅助NPU实现加速
NPU与GPU加速不同,主要体现为每层神经元计算结果不用输出到主内存,而是按照神经网络的连接传递到下层神经元继续计算,因此其在运算性能和功耗上都有很大的提升。
CPU将编译好的神经网络模型文件和权重文件交由专用芯片加载,完成硬件编程。
CPU在整个运行过程中,主要是实现数据的加载和业务流程的控制,其交互流程为:
1) 打开NPU专用芯片设备
2) 传入模型文件,得到模型task
3) 获取task的输入输出信息
4) 拷贝输入数据到模型内存中
5) 运行模型,得到输出数据
除NPU外,在功耗及计算能力上有一拼的还有FPGA。
FPGA原理和AI计算优势
说完了GPU、NPU以及他们的领导CPU,再来看看另一个火热芯片FPGA。
FPGA(Field-Programmable Gate Array)称为现场可编程门阵列,用户可以根据自身的需求进行重复编程。与 CPU、GPU 相比,具有性能高、功耗低、可硬件编程的特点。
FPGA基本原理是在芯片内集成大量的数字电路基本门电路以及存储器,而用户可以通过烧入FPGA 配置文件来定义这些门电路以及存储器之间的连线。这种烧入不是一次性的,可重复编写定义,重复配置。
FPGA的内部结构如下图所示:
FPGA的编程逻辑块(Programable Logic Blocks)中包含很多功能单元,由LUT(Look-up Table)、触发器组成。FPGA是直接通过这些门电路来实现用户的算法,没有通过指令系统的翻译,执行效率更高。
对比一下CPU/GPU/NPU/FPGA各自的特点
各芯片架构特点总结CPU
70%晶体管用来构建Cache,还有一部分控制单元,计算单元少,适合逻辑控制运算。
GPU
是单指令、多数据处理,晶体管大部分构建计算单元,运算复杂度低,适合大规模并行计算。主要应用于大数据、后台服务器、图像处理。GPU善于处理图像领域的运算加速。但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。
NPU
NPU在电路层模拟神经元,通过突触权重实现存储和计算一体化,一条指令完成一组神经元的处理,提高运行效率。主要应用于通信领域、大数据、图像处理。NPU作为专用定制芯片ASIC的一种,是为实现特定要求而定制的芯片。除了不能扩展以外,在功耗、可靠性、体积方面都有优势,尤其在高性能、低功耗的移动端。
FPGA
可编程逻辑,计算效率高,更接近底层IO,通过冗余晶体管和连线实现逻辑可编辑。本质上是无指令、无需共享内存,计算效率比CPU、GPU高。主要应用于智能手机、便携式移动设备、汽车。FPGA是用硬件实现软件算法,因此在实现复杂算法方面有一定的难度,缺点是价格比较高。将FPGA和GPU对比发现,一是缺少内存和控制所带来的存储和读取部分,速度更快。二是因为缺少读取的作用,所以功耗低,劣势是运算量并不是很大
CPU作为最通用的部分,协同其他处理器完成着不同的任务。GPU适合深度学习中后台服务器大量数据训练、矩阵卷积运算。NPU、FPGA在性能、面积、功耗等方面有较大优势,能更好的加速神经网络计算。而FPGA的特点在于开发使用硬件描述语言,开发门槛相对GPU、NPU高。
ASIC芯片是全定制芯片,长远看适用于人工智能。现在很多做AI算法的企业也是从这个点切入。因为算法复杂度越强,越需要一套专用的芯片架构与其进行对应,ASIC基于人工智能算法进行定制,其发展前景看好。类脑芯片是人工智能最终的发展模式,但是离产业化还很遥远。
可以说,每种处理器都有它的优势和不足,在不同的应用场景中,需要根据需求权衡利弊,选择合适的芯片。
说明:文章观点仅供分享交流,不代表焉知自动驾驶的立场,转载请注明出处,如涉及版权等问题,请您告知(小老虎13636581676微信同),我们将及时沟通处理。