当前主流的AI芯片主要分为三类,GPU、FPGA、ASIC。GPU、FPGA均是前期较为成熟的芯片架构,属于通用型芯片。ASIC属于为AI特定场景定制的芯片。行业内已经确认CPU不适用于AI计算,但是在AI应用领域也是必不可少。
GPU方案
GPU与CPU的架构对比
CPU遵循的是冯·诺依曼架构,其核心是存储程序/数据、串行顺序执行。因此CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以CPU在进行大规模并行计算方面受到限制,相对而言更擅长于处理逻辑控制。
GPU(GraphicsProcessing Unit),即图形处理器,是一种由大量运算单元组成的大规模并行计算架构,早先由CPU中分出来专门用于处理图像并行计算数据,专为同时处理多重并行计算任务而设计。GPU中也包含基本的计算单元、控制单元和存储单元,但GPU的架构与CPU有很大不同,其架构图如下所示。
与CPU相比,CPU芯片空间的不到20%是ALU,而GPU芯片空间的80%以上是ALU。即GPU拥有更多的ALU用于数据并行处理。
GPU与CPU区别
CPU由专为顺序串行处理而优化的几个核心组成,而GPU则拥有一个由数以千计的更小、更高效的核心组成的大规模并行计算架构,这些更小的核心专为同时处理多重任务而设计。
CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
GPU加速技术简述
对于深度学习来说,目前硬件加速主要靠使用图形处理单元。相比传统的CPU,GPU的核心计算能力要多出几个数量级,也更容易进行并行计算。
GPU的众核体系结构包含几千个流处理器,可将运算并行化执行,大幅缩短模型的运算时间。随着NVIDIA、AMD等公司不断推进其GPU的大规模并行架构支持,面向通用计算的GPU已成为加速并行应用程序的重要手段。
目前GPU已经发展到了较为成熟的阶段。利用GPU来训练深度神经网络,可以充分发挥其数以千计计算核心的高效并行计算能力,在使用海量训练数据的场景下,所耗费的时间大幅缩短,占用的服务器也更少。如果针对适当的深度神经网络进行合理优化,一块GPU卡可相当于数十甚至上百台CPU服务器的计算能力,因此GPU已经成为业界在深度学习模型训练方面的首选解决方案。
当训练的模型规模比较大时,可以通过数据并行的方法来加速模型的训练,数据并行可以对训练数据做切分,同时采用多个模型实例对多个分块的数据同时进行训练。在数据并行的实现中,由于是采用同样的模型、不同的数据进行训练,影响模型性能的瓶颈在于多CPU或多GPU间的参数交换。根据参数更新公式,需要将所有模型计算出的梯度提交到参数服务器并更新到相应参数上,所以数据片的划分以及与参数服务器的带宽可能会成为限制数据并行效率的瓶颈。
除了数据并行,还可以采用模型并行的方式来加速模型的训练。模型并行是指将大的模型拆分成几个分片,由若干个训练单元分别持有,各个训练单元相互协作共同完成大模型的训练。
GPU加速计算
GPU加速计算是指同时利用图形处理器 (GPU) 和CPU,加快科学、分析、工程、消费和企业应用程序的运行速度。GPU加速器于2007年由NVIDIA率先推出,现已在世界各地为政府实验室、高校、公司以及中小型企业的高能效数据中心提供支持。GPU能够使从汽车、手机和平板电脑到无人机和机器人等平台的应用程序加速运行。
GPU加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转移到GPU,同时仍由CPU运行其余程序代码。从用户的角度来看,应用程序的运行速度明显加快。
GPU当前只是单纯的并行矩阵的乘法和加法运算,对于神经网络模型的构建和数据流的传递还是在CPU上进行。CPU与GPU的交互流程:获取GPU信息,配置GPU id、加载神经元参数到GPU、GPU加速神经网络计算、接收GPU计算结果。
为什么GPU在自动驾驶领域如此重要
自动驾驶技术中最重要的技术范畴之一是深度学习,基于深度学习架构的人工智能如今已被广泛应用于计算机视觉、自然语言处理、传感器融合、目标识别、自动驾驶等汽车行业的各个领域,从自动驾驶初创企业、互联网公司到各大OEM厂商,都正在积极探索通过利用GPU构建神经网络实现最终的自动驾驶。
GPU加速计算诞生后,它为企业数据提供了多核并行计算架构,支撑了以往CPU架构无法处理的数据源。根据对比,为了完成相同的深度学习训练任务,使用GPU计算集群所需要的成本只是CPU计算集群的200分之一。
GPU是自动驾驶与深度学习的关键
无论是让汽车实时感知周边实时环境,还是迅速规划行车路线和动作,这些都需要依赖汽车大脑快速的响应,因此对计算机硬件厂商提出了巨大挑战,自动驾驶的过程中时刻需要深度学习或者人工智能算法应对无限可能的状况,而人工智能、深度学习和无人驾驶的蓬勃发展,带来了GPU计算发展的黄金时代。
GPU的另一个重要参数是浮点计算能力。浮点计数是利用浮动小数点的方式使用不同长度的二进制来表示一个数字,与之对应的是定点数。在自动驾驶算法迭代时对精度要求较高,需要浮点运算支持。
FPGA方案
FPGA芯片定义及结构
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。
FPGA工作原理
由于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方案
ASIC定义及特点
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设计是最为流行的方式之一。优点:它作为集成电路技术与特定用 户的整机或系统技术紧密结合的产物,与通用集成电路相比具有体积更小、重量更轻、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。缺点:灵活性不够,成本比FPGA贵。
唯算力论的局限:TOPS算力不完全等于实际性能
随着ADAS、自动驾驶技术的兴起,以及软件定义汽车的逐步深入,智能汽车对于计算能力和海量数据处理能力等的需求暴增,传统汽车的芯片“堆叠”方案已经无法满足自动驾驶的算力需求。芯片最终是为车企的车载计算平台服务的,在 “软件定义汽车”的情况下,解决智能驾驶系统计算平台的支撑问题,无法只通过芯片算力堆叠来实现。
芯片是软件的舞台,衡量芯片优劣的标准,要看芯片之上的软件能否最大化地发挥作用,算力和软件之间需要有效匹配。两款相同算力的芯片比较,能让软件运行得更高效的芯片才是“好芯片”。决定算力真实值最主要因素是内存( SRAM和 DRAM)带宽,还有实际运行频率(即供电电压或温度),以及算法的batch尺寸。
单颗芯片算力TOPS是关键指标,但并非唯一,自动驾驶是一个复杂系统,需要车路云边协同。所以它的较量除了芯还有软硬协同还有平台以及工具链等等。芯片算力的无限膨胀和硬件预埋不会是未来的趋势,硬件也需要匹配实际。高背后是高功耗和低利用率的问题。
事件相机简介
简介及工作机制
事件相机的灵感来自人眼和动物的视觉,也有人称之为硅视网膜。生物的视觉只针 对有变化的区域才敏感,事件相机就是捕捉事件的产生或者变化的产生。、
在传统的视觉领域,相机传回的信息是同步的,所谓同步,就是在某一时刻t,相机会进行曝光,把这一时刻所有的像素填在一个矩阵里回传,产生一张照片。一张照 片上所有的像素都对应着同一时刻。至于视频,不过是很多帧的图片,相邻图片间 的时间间隔可大可小,这便是帧率(frame rate),也称为时延(time latency)。事件相机类似于人类的大脑和眼睛,跳过不相关的背景,直接感知一个场景的核心, 创建纯事件而非数据。
事件相机的工作机制是,当某个像素所处位置的亮度发生变化达到一定阈值时,相机就会回传一个上述格式的事件,其中前两项为事件的像素坐标,第三项为事件发 生的时间戳,最后一项取值为极性(polarity)0、1(或者-1、1),代表亮度是由低到高还是由高到低。
就这样,在整个相机视野内,只要有一个像素值变化,就会回传一个事件,这些所有的事件都是异步发生的(再小的时间间隔也不可能完全同时),所以事件的时间 戳均不相同,由于回传简单,所以和传统相机相比,它具有低时延的特性,可以捕获很短时间间隔内的像素变化,延迟是微秒级的。
在自动驾驶领域的应用
当今自动驾驶领域所运用的视觉识别算法,基本上都基于卷积神经网络,视觉算法的运算本质上是一次次的卷积运算。这种计算并不复杂,本质上只涉及到加减乘除,也就是一种乘积累加运算。但这种简单运算在卷积神经网络中是大量存在的,这就对处理器的性能提出了很高的要求。
以ResNet-152为例,这是一个152层的卷积神经网络,它处理一张224*224大小的图像所需的计算量大约是226亿次,如果 这个网络要处理一个1080P的30帧的摄像头,他所需要的算力则高达每秒33万亿次,十分庞大。
通过减少无效计算节约算力
自动驾驶领域99%的视觉数据在AI处理中是无用的背景。例如检测鬼探头,变化的区域是很小一部分,但传统的视觉处理 仍然要处理99%的没有出现变化的背景区域,这不仅浪费了大量的算力,也浪费了时间。亦或者像在沙砾里有颗钻石,AI芯片和传统相机需要识别每一颗沙粒,筛选出钻石,但人类只需要看一眼就能检测到钻石,AI芯片和传统相机耗费的时 间是人类的100倍或1000倍。
除了冗余信息减少和几乎没有延迟的优点外,事件相机的优点还有由于低时延,在拍摄高速物体时,传统相机由于会有 一段曝光时间会发生模糊,而事件相机则几乎不会。此外事件相机拥有真正的高动态范围,由于事件相机的特质,在光强较强或较弱的环境下,传统相机均会“失明”,但像素变化仍然存在,所以事件相机仍能看清眼前的东西。