来源:智能汽车研发与测试 | 首图图源:网络 | 作者:中欧SENIA芯片是软件的舞台,衡量芯片优劣的标准,要看芯片之上的软件能否最大化地发挥作用,算力和软件之间需要有效匹配。当前主流的AI芯片主要分为三类,GPU、FPGA、ASIC。GPU、FPGA均是前期较为成熟的芯片架构,属于通用型芯片。ASIC属于为AI特定场景定制的芯片。行业内已经确认CPU不适用于AI计算,但是在AI应用领域也是必不可少。
CPU遵循的是冯·诺依曼架构,其核心是存储程序/数据、串行顺序执行。因此CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以CPU在进行大规模并行计算方面受到限制,相对而言更擅长于处理逻辑控制。GPU(GraphicsProcessing Unit),即图形处理器,是一种由大量运算单元组成的大规模并行计算架构,早先由CPU中分出来专门用于处理图像并行计算数据,专为同时处理多重并行计算任务而设计。GPU中也包含基本的计算单元、控制单元和存储单元,但GPU的架构与CPU有很大不同,其架构图如下所示。与CPU相比,CPU芯片空间的不到20%是ALU,而GPU芯片空间的80%以上是ALU。即GPU拥有更多的ALU用于数据并行处理。CPU由专为顺序串行处理而优化的几个核心组成,而GPU则拥有一个由数以千计的更小、更高效的核心组成的大规模并行计算架构,这些更小的核心专为同时处理多重任务而设计。 CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。对于深度学习来说,目前硬件加速主要靠使用图形处理单元。相比传统的CPU,GPU的核心计算能力要多出几个数量级,也更容易进行并行计算。GPU的众核体系结构包含几千个流处理器,可将运算并行化执行,大幅缩短模型的运算时间。随着NVIDIA、AMD等公司不断推进其GPU的大规模并行架构支持,面向通用计算的GPU已成为加速并行应用程序的重要手段。目前GPU已经发展到了较为成熟的阶段。利用GPU来训练深度神经网络,可以充分发挥其数以千计计算核心的高效并行 计算能力,在使用海量训练数据的场景下,所耗费的时间大幅缩短,占用的服务器也更少。如果针对适当的深度神经网络进行合理优化,一块GPU卡可相当于数十甚至上百台CPU服务器的计算能力,因此GPU已经成为业界在深度学习模型训练方面的首选解决方案。当训练的模型规模比较大时,可以通过数据并行的方法来加速模型的训练,数据并行可以对训练数据做切分,同时采用多个模型实例对多个分块的数据同时进行训练。在数据并行的实现中,由于是采用同样的模型、不同的数据进行训练,影响模型性能的瓶颈在于多CPU或多GPU间的参数交换。根据参数更新公式,需要将所有模型计算出的梯度提交到参数服务器并更新到相应参数上,所以数据片的划分以及与参数服务器的带宽可能会成为限制数据并行效率的瓶颈。 除了数据并行,还可以采用模型并行的方式来加速模型的训练。模型并行是指将大的模型拆分成几个分片,由若干个训练单元分别持有,各个训练单元相互协作共同完成大模型的训练。GPU加速计算是指同时利用图形处理器 (GPU) 和 CPU,加快科学、分析、工程、消费和企业应用程序的运行速度。GPU加速器于2007年由NVIDIA率先推出,现已在世界各地为政府实验室、高校、公司以及中小型企业的高能效数据中心提供支持。GPU能够使从汽车、手机和平板电脑到无人机和机器人等平台的应用程序加速运行。GPU加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转移到GPU,同时仍由CPU运行其余程序代码。从用户的角度来看,应用程序的运行速度明显加快。GPU当前只是单纯的并行矩阵的乘法和加法运算,对于神经网络模型的构建和数据流的传递还是在CPU上进行。CPU与GPU的交互流程:获取GPU信息,配置GPU id、加载神经元参数到GPU、GPU加速神经网络计算、接收GPU计算结果。自动驾驶技术中最重要的技术范畴之一是深度学习,基于深度学习架构的人工智能如今已被广泛应用于计算机视觉、自然语言处理、传感器融合、目标识别、自动驾驶等汽车行业的各个领域,从自动驾驶初创企业、互联网公司到各大OEM厂商,都正在积极探索通过利用GPU构建神经网络实现最终的自动驾驶。 GPU加速计算诞生后,它为企业数据提供了多核并行计算架构,支撑了以往CPU架构无法处理的数据源。根据对比,为了完成相同的深度学习训练任务,使用GPU计算集群所需要的成本只是CPU计算集群的200分之一。无论是让汽车实时感知周边实时环境,还是迅速规划行车路线和动作,这些都需要依赖汽车大脑快速的响应,因此对计算机硬件厂商提出了巨大挑战,自动驾驶的过程中时刻需要深度学习或者人工智能算法应对无限可能的状况, 而人工智能、深度学习和无人驾驶的蓬勃发展,带来了GPU计算发展的黄金时代。 GPU的另一个重要参数是浮点计算能力。浮点计数是利用浮动小数点的方式使用不同长度的二进制来表示一个数字,与 之对应的是定点数。在自动驾驶算法迭代时对精度要求较高,需要浮点运算支持。FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找表结构,也有一些军品和宇航级FPGA采用Flash或者熔丝与反熔丝工艺的查找表结构。通过烧写文件改变查找表内容的方法来实现对FPGA的重复配置。查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O标准。通过软件的灵活配置,可适配不同的电气标准与 I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。目前,I/O口的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2Gbps的数据速率。CLB是FPGA内的基本逻辑单元。CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵, 此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。开关矩阵是高度灵活的,可以对其进行配置以便处理组合逻辑、移位寄存器或RAM。在Xilinx公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。自动驾驶和高级驾驶辅助系统(ADAS)细分市场正在经历蜕变,对计算和传感器功能提出了新的复杂需求。FPGA拥有其他芯片解决方案无法比拟的独特优势,是满足自动驾驶行业不断发展变化的优良选择。FPGA是芯片领域的一种特殊技术, 一方面能够通过软件工具进行反复多次配置,另一方面拥有丰富的IO接口和计算单元。因此,FPGA能够根据应用场景的具体需求,同时处理流水线并行和数据并行,天生具有计算性能高、延迟低、功耗小等优势。 FPGA具备高吞吐量、高能效以及实时处理等多项优点,非常契合自动驾驶所需要的技术需求。高级辅助驾驶系统(ADAS)、车载体验(IVE)应用的标准和要求正在快速演变,系统设计人员关注的问题主要包括出色的灵活性和更快的开发周期,同时维持更高的性能功耗比。通过可重新编程的FPGA和不断增多的汽车级产品相结合,支持汽车设计师满足设计要求,在不断变化的汽车行业中始终保持领先。对于自动驾驶芯片来说真正的价值在于计算引擎的利用率,即理论性能和实际性能之间的差异。FPGA包含大量的路由链路以及大量的小型存储。这些资源的组合使设计人员能够为其计算引擎创建定制的数据馈送网络,以获得更高的利用水平。可编程逻辑为客户提供了高度的灵活性,以适应ADAS和自动驾驶等新兴应用领域不断变化的需求。利用改进的接口标准、算法创新和新的传感器技术,都需要适应性强的平台,不仅可以支持软件更改,还可以支持硬件更改,而这正是FPGA芯片的优势所在。FPGA芯片拥有可扩展性。可拓展的芯片改变了可编程逻辑的数量,大多采用引脚兼容的封装。这意味着开发人员可以创建单个ECU平台来承载低、中、高版本的ADAS功能包,并根据需要通过选择所需的最小密度芯片来缩放成本。FPGA芯片允许开发人员创建独特的差异化处理解决方案,这些解决方案可以针对特定应用或传感器进行优化。这对于ASSP芯片来说是无法实现的,即使是那些提供专用加速器的芯片,它们的使用方式也受到限制,而且基本上可以提供给所有竞争对手。例如Xilinx的长期客户已经创建了只有他们可以访问的高价值IP库,并且这些功能可以被公司的各种产品使用。从90nm节点开始,对于大批量汽车应用,Xilinx的芯片就已经极具成本效益,有超过1.6亿颗Xilinx芯片在该行业获得应用。
ASIC芯片可根据终端功能不同分为TPU芯片、DPU芯片和NPU芯片等。其中,TPU为张量处理器,专用于机器学习。如Google于2016年5月研发针对Tensorflow平台的可编程AI加速器,其内部指令集在Tensorflow程序变化或更新算法时可运行。DPU即Data Processing Unit,可为数据中心等计算场景提供引擎。NPU是神经网络处理器,在电路层模拟人类神经元和突触,并用深度学习指令集直接处理大规模电子神经元和突触数据。 ASIC有全定制和半定制两种设计方式。全定制依靠巨大的人力时间成本投入以完全自主的方式完成整个集成电路的设计流程,虽然比半定制的ASIC更为灵活性能更好,但它的开发效率与半定制相比甚为低下。ASIC芯片非常适合人工智能的应用场景。例如英伟达首款专门为深度学习从零开始设计的芯片Tesla P100数据处理速度是其2014年推出GPU系列的12倍。谷歌为机器学习定制的芯片TPU将硬件性能提升至相当于当前芯片按摩尔定律发展7年后的水平。正如CPU改变了当年庞大的计算机一样,人工智能ASIC芯片也将大幅改变如今AI硬件设备的面貌。如大名鼎鼎的AlphaGo使用了约170个图形处理器(GPU)和1200个中央处理器(CPU),这些设备需要占用一个机房,还要配备大功率的空调,以及多名专家进行系统维护。而如果全部使用专用芯片,极大可能只需要一个普通收纳盒大小的空间,且功耗也会大幅降低。ASIC技术路线是有限开放,芯片公司需要面向与驾驶相关的主流网络、模型、算子进行开发。在相同性能下,芯片的面积更小、成本更低、功耗更低。ASIC技术路线未来的潜力会很大,选择ASIC路线并不意味着要对不同车型开发不同的ASIC,或进行不同的验证。因为不同车型需要实现的功能大致相同,而且芯片面对模型和算子进行有限开放,算法快速迭代不会影响到芯片对上层功能的支持。车厂与芯片设计公司合作,进行差异化定制,或是更好的选择。因为即使是进行差异化的定制,芯片内部50%的部分也是通用的。芯片设计公司可以在原有版本的基础上进行差异化设计,实现部分差异功能。
FPGA,是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
图形处理器(GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板、手机等)上做图像和图形相关运算工作的微处理器。
ASIC,即专用集成电路,指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。目前用CPLD(复杂可编程 逻辑器件)和FPGA(现场可编程逻辑阵列)来进行ASIC设计是最为流行的方式之一。
随着ADAS、自动驾驶技术的兴起,以及软件定义汽车的逐步深入,智能汽车对于计算能力和海量数据处理能力等的需求暴增,传统汽车的芯片“堆叠”方案已经无法满足自动驾驶的算力需求。芯片最终是为车企的车载计算平台服务的,在 “软件定义汽车”的情况下,解决智能驾驶系统计算平台的支撑问题,无法只通过芯片算力堆叠来实现。芯片是软件的舞台,衡量芯片优劣的标准,要看芯片之上的软件能否最大化地发挥作用,算力和软件之间需要有效匹配。两款相同算力的芯片比较,能让软件运行得更高效的芯片才是“好芯片”。决定算力真实值最主要因素是内存(SRAM和DRAM)带宽,还有实际运行频率(即供电电压或温度),以及算法的batch尺寸。单颗芯片算力TOPS是关键指标,但并非唯一,自动驾驶是一个复杂系统,需要车路云边协同。所以它的较量除了芯还有软硬协同还有平台以及工具链等等。芯片算力的无限膨胀和硬件预埋不会是未来的趋势,硬件也需要匹配实际。高背后是高功耗和低利用率的问题。