前端教程
当前位置: 主页 > 资讯 > 前端教程
英伟达系列芯片如何赋能智能汽车开发?
发布日期:2023-07-16 阅读次数:

  当前快速发展的智能汽车在布局高端车型上,通常会以高算力作为一个竞争要点,如果考虑到集AI算力、逻辑算力于一体的超异构芯片而言,英伟达绝对算得上是各家车企都十分青睐一家芯片公司。相比于前面文章介绍的TI系列TDA4X芯片不同之处在于,英伟达通常倾向于高算力、高级程度、高功能安全的角度来满足客户定制化需求。而且市场上做的比较出色的这类芯片,除了ME就属英伟达了,因为英伟达Orin卖点就是算力。

  即便是在各家车企对算力认知越来越清晰的前提下(即他们更关注算力利用率、性价比的前提下,对于芯片算力的看法将更加看重非稀疏化的情况下收敛后的真实算力),这款系列芯片目前是在各家车企中被疯抢的。国内对英伟达的玩家就包括蔚来ET7、小鹏G9 SUV、小马智行Robotaxi这类造车新势力。另外,比亚迪也开始利用各种资源在其自研平台上采用英伟达芯片了。

  英伟达在其芯片布局上,智能汽车芯片目前还不是其主力营收板块。但是这个板块的布局正在加强,主要体现在通过提供完整的硬件和软件栈实现各类高收入pipeline。逐渐构建了强大的生态系统,并且在以往的以智能座舱域为主的信息娱乐端开始逐渐转向智能驾驶端。并且,在自动驾驶、软件定义汽车以及新软件及服务上开始发力。

  本文将从各个方面对英伟达芯片进行全面解析,主要是针对其智驾芯片发展史,对主流Xavier及Orin系列芯片进行详细介绍。意在帮助读者从不同的方面更加了解这款芯片,并且知道如何应用这款芯片用于自动驾驶系统系统开发及设计。

  英伟达在推出线年开发完成了第一个完整的GPU架构Fermi。该计算核心由16个流线处理器SM组成,每个SM中有两个线个存储加载单元(LD/ST)、4个特殊函数单元SFU组成。而在2012年升级发布的Kepler和Maxwell架构,增加了CUDA CORE用于提供专门对浮点数单元FPU和逻辑运算单元ALU的计算能力。

  英伟达设计开发的第一款芯片是从2016年推出的,主要是面向AI和自动驾驶系统的产品。而对于单纯地图形处理器而言可以追溯到2006年的CUDA(Compute Unified Device Architecture)架构。这一架构也是后续自动驾驶系统架构芯片开发的软件架构基础。

  对于自动驾驶而言,比较关心的几个关键节点是基于其对处理能力的架构和软件模块的依赖来讲解的。

  2017年发布了完全以深度学习为核心的Volta架构,该架构主体是引入了英伟达芯片的核心软件模块架构Tensor Core模块,可用于执行融合乘法加减法(即既包括浮点数FP32/FP64,又增加了INT32的整型计算核),其算力是Pascal架构的5倍。

  2018年,英伟达又相继发布的Turning架构升级了Tensor Core,主要增加了对整数型数据的计算能力。

  在2020年,英伟达发布最新的Ampere 架构,其特性是支持更高级别的数据格式TF32\BF16两种数据格式及稀疏矩阵的运算能力。

  GPU的首次完整搭载是在2010年的Fermi架构中,其在运算上最大的优势是将计算核上更多的晶体管资源用于数值计算,而不是像CPU一样需要花费大量的资源进行数据存取和流量控制。也就是说每个阵列的一行通常会有多个计算核来承担计算控制和缓存。并且同一时刻可以执行多个核(并行几千个线程)的计算能力,此时,对内存访问的延时可以忽略不计。

  更多的晶体管介入进来意味着GPU在运算过程中需要消耗更多的电量资源和带宽资源,也就是说GPU的发热功率更大。基于这一特性当想要将GPU运用于自动驾驶系统感知场景的边缘/极端场景的大量训练计算模型时,就需要针对性的基于GPU的发热功率进行高效的降温处理。

  英伟达系列芯片中的GPU加速库包含了四大主要的并行架构:深度学习模块、信号&图像处理、线性代数计算、并行算法库。不同的计算库可以针对不同的计算场景发挥不同的效用。

  GPU中的深度学习引擎是图中被称之为TensorRT的完整工具,可以实现各类深度学习相关模型的优化与编译。该工具链引入了张量核Tensor Core模块,用于执行融合乘法加法(即Volta架构中实现FP16半精度浮点矩阵以及INT8整数的累加矩阵乘法和累加单元)。这样可以很好的加速密集线性代数计算、信号处理和深度学习推理,也可以很好的避免量化过程中精度和计算范围的溢出,很好的解决数据量化过程中产生的数据溢出和精度不足问题。

  TensorRT可支持芯片通过英伟达Drive AGX平台部署深度学习接口,使用编译器和运行时最大化延迟关键应用程序的吞吐量,使用 int8 部署响应式和内存高效的应用程序,优化卷积神经网络 (CNN) 层和操作并降低张量核心的精度,通过ONNX支持和原生 TensorRT 集成加速每个框架,使用容器化推理服务在一个节点上运行多个模型。

  如上图表示了如何将模型导入到TensorRT中后进行相应的处理过程,TensorRT的处理过程包括对前端训练的神经网络进行模型量化、内核节点融合、数据层优化选择等一系列优化措施来提升对GPU内存和带宽的使用效率,最终形成了不同的深度学习运行时引擎Runtime Engine。

  在深度学习的训练和推理中十分常见的是对运算输入矩阵设置半精度,而乘积结果却要求全精度输出,因为在Tensor Core的特性是增加了浮点计算的计算模式且参照了标准算术逻辑单元ALU的运算模式,可以更加适配矩阵运算。因此,可以说Tensor Core很好的混合使用单精度和半精度数据格式,这样就可以解决不同精度的数据对其运算,提升计算速度,从而很好的压缩整个计算模型的大小。这也是英伟达GPU模型的最核心优势体现。

  GPU中另一个比较核心的软件栈是指的位于线性代数计算模块中的CUDA平台。CUDA核全称Compute Unified Device Architecture,是指通用计算并行架构。通过构建可用的硬件平台,可以在多线程设计的GPU上运行通用并行计算,专门用于解决GPU编程的复杂性问题。此外,作为软件栈的集合,CUDA还可以有效的进行设备驱动和SDK。通常深度学习的标准配置是将CUDA所开辟的灵活的开发接口(如OpenCL、OpenGL等API)运算辅助GPU基础软件栈,从而实现针对不同数据的运算过程。如下图表示了CUDA核在密集并行计算的计算模型。通过下载CUDA核编程算法,可以从软件部署、域特征库、决策执行行为、开发社区、标准汇编等几个方向为CUDA的各个开发者提供帮助。

  对于传统的CNN深度学习来说,如果不能做到较好的加速器设置,那么在实时性要求高的自动驾驶行业内,将不能很好的用在实时检测中。因此,英伟达基于这样的需求,专门在Xavier上开发了一款深度学习加速器DLA(Deep Learning Accelerator),用于涵盖整个CNN神经网络的计算过程。该加速器的核心是可以配置多个MAC阵列来支持211个Int8、210个Int16和FP16数据的调度和运算。

  图中主要包含几大部分:数据输入部分、数据预处理部分、数据计算部分、数据后处理部分。其中数据输入部分是整个模块需要从芯片的Memory中取出,并进行压缩后形成数据权重信息Weight和激活信息Activation存储到统一的缓存Buffer中。然后Tensor Execution Micro-Controller来稀疏化权重并解压缩、Winograd变换后进行卷积运算优化。其中,Winograd卷积法可以针对尺寸较小的卷积核,节省一半的乘法器数量与功耗。数据计算部分实际是进行MAC运算,即对3x3 的Kernel卷积核进行变换,通过不同的方式(如脉动方式、广播方式、多播方式、NOC等)控制数据流动。后处理部分则是进行常规的全链接、函数激活、池化、卷积等操作,然后将结果写回内存DMA区域。

  英伟达针对DLA技术分别在Xvaier和Orin升级了不同的产品特性。意在新一代DLA增加本地缓冲技术,提高效率减少DRAM带宽。此外,提升结构化稀疏过程中的深度卷积处理器和硬件调度器的性能。因此,升级版DLA在INT8下的稀疏算力可以最高达105 TOPS。

  cuDNN是英伟达系列芯片的深度神经网络库,这一库函数是是英伟达专门用于GPU加速设计的。从底层逻辑上优化了传统神经网络中的全链接、池化、卷积等操作。并且开发过程需要确保与主流深度学习框架相适配。

  其CPU内部架构采用了12个ARM公司Cortex-A78内核,每8个CPU核(每4个CPU内核组成一个CPU簇)并均分到4个集群,具备独立的时钟管理面,且共享2MB的二级缓存,最大支持2.2GHz的CPU频率。具备超标量,可变长度,无序流水线特性;具有分支目标缓冲区的动态分支预测和使用先前分支历史的分支方向预测器、返回堆栈、静态预测器和间接预测器。

  英伟达系列芯片的视频编解码是通过两大技术模块来实现的。即视频加速器PVA和视频成像合成器VIC,这两大模块可以正常实现视频图像的基础ISP处理。且对于开发人员来说也可以通过其单独定义的视觉编程接口进行统一开发。

  其中Drive OS是其对应的操作系统,由实时运行操作系统RTOS、CUDA、TensorRT等模块组成,可提供启动、服务、防火墙和软件升级等应用服务和实时运行环境。在Drive OS上是一个中间件框架DriveWorks,他是一个由软件库、应用程序、工具链包组成的具备高内聚、低耦合,可用于进行模块化开发的软件架构。

  最后,为了从顶层进行自动驾驶应用软件开发,应为还配置了Drive IX和Drive AV分别从感知和规控两个方面提供给主机厂或Tier1进行设计开发。对于感知模型来说,需要在自动驾驶汽车高性能车端AI平台上部署有效的深度学习网络模型和算法,因此英伟达也在其芯片系统架构上采用了Drive Sim云计算平台,可以为自动驾驶系统设计开发提供各类不同场景的仿真场景条件,并通过硬件在环的方式进行测试和AI算法校验。这样运行在Drive AGX上的AI模型就可以进行实时的自动驾驶功能道路仿真测试和有效性测验了,最终这类基础服务可以很好的打通数据采集、标注、训练、仿真这一系列在数据闭环中比较经典的算法流水线了。

  现在被各家主机厂广泛采用的两类英伟达芯片分别是Xavier和Orin系列两款。其中,Xavier的性能适合搭载在L2+级以下的自动驾驶系统车型中,Orin系列的性能适合搭载在L3级以上的自动驾驶系统车型中,Xavier在国内的首搭项目是小鹏P7的高阶智驾功能上。

  Xavier是一款采用12nm工艺,总体INT8峰值算力为30TOPS和750Gbps I/O数据交换带宽的一款专为自动驾驶设计的芯片。英伟达首次在Xavier上采用了CPU+GPU+ASIC芯片混合技术路线。GPU包含Volta架构的512颗CUDA Core,占比最重;CPU为NVIDIA自研8核ARM64架构(代号Carmel),占比次之。其中,搭载的两个专用ASIC,即深度学习加速模块DLA模块用于推理计算和向量处理单元PVA用于传统视觉算法加速。

  基于以上优势分析,Xavier可以用于处理智能汽车的视觉里程测量、传感器融合、定位和映射、障碍物检测、路径规划等众多场景。

  英伟达在2019推出的Orin系列芯片由最高算力(Orin-x)达到254TOPS。目前在自动驾驶的高端领域,很多主机厂在布局自动驾驶系统域控架构的时候通常会考虑利用英伟达的Orin系列芯片进行算力布局。其中,Orin的硬件和软件架构,包括新一代Ampere架构的GPU、ARM Hercules CPU、第二代深度学习加速器DLA,第二代视觉加速器PVA、视频编解码器、宽动态范围的ISP以及基于Orin的软件栈,都是提升英伟达端到端解决方案的关键架构设计要素。

  另外,Orin系列还从功能安全的角度出发引入了车规级的功能安全岛设计,这里我们会针对性的进行架构拆解分析。

  由于英伟达系列芯片的宗旨就是在错综复杂的自动驾驶领域,不断优化神经网络方面的计算复杂度,提升CPU的逻辑计算力,能够释放更多的GPU资源来进行AI计算。对于GPU而言,其上的高精度向量由CUDA Core中的32/64位浮点数进行运算,而低精度浮点运算整型数据或16位以下浮点数,则通过Tensor Core 进行运算。以便确保其动态任务能够适配上更多的自动驾驶算力、算法、软件协议栈等模型。目前,应为系列系列芯片在国内的各家供应商之间已经处于疯抢的状态。

  整个英伟达系列芯片对应用端开放了各类不同的软件开发包,可以支持从底层软件到上层软件的整个全栈功能开发。

  如下图所示,表示了英伟达面向智能汽车的软件架构设计模块。从底至上分别表示硬件模块HW,硬件抽象层Low Level API,跨平台多媒体框架Gstreamer以及应用软件Application。

  其中在如下软件架构中,机器视觉、神经网络等几乎是贯穿设备的整个处理过程。随着人工智能在智能汽车上的广泛应用和发展,神经网络模型的规模越来越大,不管是训练还是部署,对于智能汽车域控制器的算力,带宽和存储的要求越来越高。同时,AI算法内在的稀疏性和模型压缩等优化技术带来的稀疏特征给降低计算需求带来难得的机会,是业界思考和研究的热点。同时,这类算法所承载的设备受限于功耗、能耗、存储等,因此并不能在这类设备上部署复杂的模型。因此,模型压缩则是一个解决途径,能够大幅降低深度学习模型的尺寸。

  对于像英伟达系列芯片这样以GPU为核心的AI计算系统,如何利用这一机会,涉及到软硬件架构设计和实现的方方面面。如何在不影响基本的通用编程模型的前提下,平衡成本和收益,让计算资源发挥最大效能,是一个非常复杂而有挑战的问题。英伟达在这方面一直在不断改进和突破,特别是在其对真实算力的利用率上利用先进的矩阵稀疏化方法实现了高效的处理方法。

  对于智驾系统来说,英伟达芯片可以根据具体的视觉传感器类型进行不同的处理策略。如下图表示一种典型的行泊车分时复用的视觉信息处理图。其中的连接方式表示的是智能行车功能的处理逻辑。

  英伟达的深度学习加速器(无论是GPU还是DLA)都是允许对实时库进行最优化编程的,这样可以大大提升计算效率。其中,GPU的编程模式最为灵活。

  如下图所示,智能行车功能需要应用到完整的行车摄像头(包含前视、侧视摄像头感知信息)。

  我们将具体的数据整体融合到“mega kernels”中,以将数据保存在本地计算核中(由于数据存取在延迟和功率方面是很好资源的,因此明智地使用内存资源非常重要)。

  首先,输入的原始图像会经过ISP图像处理模块进行典型的图像处理,如白平衡、图像去噪、畸变矫正、颜色校正、RGB转YUV等初级图像处理。随后,考虑到行车视觉会建立相关的深度神经网络模型进行相应的深度学习,通过DLA、PVA、GPU三大模块共同实现神经网络模型加速。考虑到具体场景的分时复用,泊车摄像头在这类场景下通常只需要输出视频做记录即可,因此第二条链路则是只考虑进行原始视频的基础处理,渲染及数据融合等。最后,泊车摄像头所生成的视觉会输入到行车终端用于在行车场景重构中进行渲染显示。毫米波雷达链路由于只输入目标级数据,因此,只考虑通过CPU的部分逻辑算力处理和GPU的并行运算。

  简单来说,稀疏化是一种聪明的数据处理和模型压缩方式。它从人类大脑得到灵感,让神经网络在计算时仅启用所需神经元。稀疏化计算的技术原理是指在原有AI计算的大量矩阵运算中,将含有零元素或无效元素剔除,以加快计算速度。它在需要海量数据处理的AI加速计算中优势尤为突出,能让算力超越极限,让芯片得以完成复杂的AI任务,显著降低能耗和成本。

  比如经典的多模态稀疏化模型,不仅大幅减少计算量、显著提升性能,而且在零样本训练的情况下具有更高的精度。

  针对模型加速而言,模型稀疏是一个良好的特性。那么什么是稀疏模型呢?模型权值中,零值比较多,一般可以通过稀疏度(零值元素的占比)来衡量。稀疏的方式分为结构化稀疏和非机构化稀疏。结构化稀疏好处是更好的利用硬件性能来实现加速,坏处是模型精度难以保证。非结构化稀疏好处是模型精度一般可以保证,但却不能保证很好的硬件性能。

  稀疏的模型与数据展现出来了不规则的非结构化特征,这与传统面向稠密数据与模型设计的硬件电路的结构化特征不一致。算法非结构化与硬件结构化特征不一致,导致典型稀疏算法在传统硬件(如CPU)上处理性能与应用需求相差3个数量级。

  整体上看,数据内存占用越少,可表示的动态范围越低,精度也越低,浮点数可表示的范围比整数要多得多。大多数深度学习模型在训练Training时,梯度更新往往比较微小,一般模型参数都采用较高精度的FP32数据格式进行训练。但推理Inference时,模型可能需要更长时间来预测结果,在端侧会影响用户体验。因此,需要提升计算速度,常采用更低精度的FP16或INT8。

  量化是针对训练好的模型的权重或计算op,将高精度、“大块头”的数据转换为低精度去表示和计算,一般会关注FP16/INT8这些低精度的数据类型的量化(FP32->

  INT8)。

  如下图显示了简单的基于矩阵稀疏化技术压缩感知的视觉信号采样、传输和恢复过程。

  ,s:n维稀疏变换信号,:稀疏变换矩阵;s中只有k个非零元素,成为k稀疏度。

  ,表示稀疏反变换过程,则可以通过前序帧所算出来的稀疏变换矩阵反向求出稀疏重构信息。

  ,基于压缩感知的思路是:在测量矩阵Φ和稀疏变换矩阵已知的情况下,由信号的 M 个测量y来重构原始N维信号x。这里的关键是:如果信号s足够稀疏,那么对于 y 的 M 个测量就可以重构 N 维原始信号。这个问题可以由以下的优化问题来描述:

  如上加速效果与计算量和GEMM的维度有关,如下图表示英伟达 A100Tensor Core上的稀疏与稠密Int8下的GEMM计算对比图,通常GEMM规模越大,加速效果越接近2x。

  然而,模型压缩可能引起不规则的计算模式,对于以往针对稠密神经网络加速器,并不能受益于模型压缩。因此,需要提出一些有效的稀疏卷积的表达方式,精简卷积规则(Concise Convolution Rule,CCR)便是一种比较好的方法,它将卷积分解成较好的稠密子卷积,以确保稠密子卷积能够很容易的利用现有的加速器进行处理。同时,加速器的吞吐量能够受益于加速器提供的加速性能和稀疏化降低的计算量。如下图表示了精简卷积加速能力的示意图。

  其运算过程是通过将稀疏卷积核和输入特征图分解成多个相对稠密的子卷积核和子输入特征图,这些子卷积核或特征图可能根据不同的情况适配如上三类不同的神经网络特性图,并进行合适的适配和卷积运算。该部分计算的结果需要累加到输出特征图中。这种方式可以降低计算量的同时,维持了计算的卷积特性,能够很好地映射到现有的稠密卷积神经网络设计加速器中。

  对于英伟达系列芯片来说,为了提升计算效能,稀疏化便是应用到极致的一种算法。对于其上的稀疏矩阵来说,Orin中的CUDA Core和Tensor Core分别包含有2048个和64个。与上一代Volta架构的GPU相比,Tensor Core引入了对稀疏性的支持,可以提供INT8的稀疏算力高达170 TOPS,Cuda Core可以提供32位浮点算力为5.3TFLOPs。

  以上提到的神经网络技术,对于整个芯片算力的提升都涉及到被称之为稀疏性Sparsity的技术算法。其稀疏化技术针对神经网络核心主要有两个部分:

  对构造的权重网络进行密集训练,随后再将网络权重进行修剪(通常为2:4的稀疏矩阵)。

  如下图所示,其采用的2:4稀疏度(即2:4的压缩格式只需要2bit的metadata),每一组的4个值都至少包含两个非零值。需要对非零权重进行微调完成后,就可以有效的压缩权重网络,使得数据占用空间和带宽均减少为原来的一半。新矩阵存储非零值,加一个2bit的索引数组可以进行位置编码metadata。同时,通过非零值精准快速提取,位置可根据编码metadata获取,可以加快对内存访问速度。如果是16 bit数据,相比于原始存储方式,压缩后的矩阵可以节省约44%的空间。

  针对单个数据的稀疏化加速过程参照上图的压缩方式,比如4个16位数据:原有格式4x16=64bit,压缩后格式2*16+2*2=36bit。

  稀疏化的Tensor Core中可根据权重索引过滤掉权重网络中多余的0,在做内积时,只需要让权值不为0的部分和输入的Tensor进行乘积即可。通过跳零计算模式可以使数学计算的吞吐量翻倍,从而可以大大减少矩阵乘法所需计算量。

  如上图表示了英伟达芯片Tensor Core上进行对应的矩阵卷积乘法的计算方法。左图表示稠密矩阵乘法的计算结果,右图表示稀疏矩阵乘法GEMM的计算结果。将 MxNxK 通用矩阵乘法 映射到 Tensor Core。原始密集矩阵 A,大小为 MxK(左侧)在使用 2:4 稀疏化修剪后变为 Mxk/2(右侧),A中的稀疏值可以跳过不必要的零乘法。在稠密和稀疏通用矩阵乘法中,B和C分别是稠密的KxN和MxN矩阵。

  矩阵乘法计算过程是C=A*B。即左侧A矩阵采用dense矩阵存储,针对结果C矩阵的每个位置,有2K次读取操作,分别是从矩阵A中读取1*K的数组和从矩阵B中读取K*1数组,总计是2MNK次读取操作。

  右侧B矩阵采用Sparse矩阵存储,针对结果C矩阵的每一个位置,对应K次读取操作,分别是从压缩后的稀疏矩阵中取1*K/2的数组,利用2bit索引向量从矩阵B中取1*K/2的数组,总计MNK次读取。

  这里需要说明的是,虽然稀疏技术能够有效降低神经网络算法的计算和存储开销,提升计算系统的能量效率,但稀疏技术与存内计算的结合仍然存在诸多挑战。

  人工智能在智能汽车上的快速应用面临计算平台上算力激增与能耗受限的挑战。随着人工智能在更广泛场景的应用与落地,算法所处理的模型与数据体现出稀疏特性。如何高效处理稀疏数据成为人工智能进一步发展的关键因素。而英伟达这一些列芯片也正是抓准这一契机,通过在算法稀疏化上实现突破,而且结合软、硬件协同优化的方式,将稀疏化从算法层面提升到计算层面。稀疏化计算产品以其高算力、低功耗、高精度的优势。不断优化其算法逻辑来实现更高层级的算力能力提升。