百度ACU(Apollo Computing Unit)是Apollo面向量产的自动驾驶车载计算单元,按照区别需求场景的计算能力需求,分为多个系列制品。ACU-Advanced是行业首创的自主泊车制品Apollo Valet Parking专用车载计算平台,日前已量产下线用于客户的量产车型中。
视频加载失败,请刷新页面再试 刷新
ACU-Advanced软硬一体的处理方法:
能够支持5路摄像头,12路超声波雷达,预留毫米波雷达和激光雷达接口;
基于Xilinx ZU5(FPGA)设计,适配百度PaddlePaddle深度学习框架;
全面安排AUTOSAR,全车规基本软件研发;
严谨的软硬件安全合规设计,全面满足AVP场景需求(ASIL-B);
100%全车规元器件,抗冲击震动,耐电磁干扰,全面胜任车载环境;
-40℃~85℃超宽工作温度,自然风冷没需风扇或水冷;
设计流程,供应链和生产管控基于IATF16949质量管理体系。
为了让客户、合作伙伴以及研发者能够更加深入认识百度ACU(Apollo Computing Unit),这次公开课邀请了百度ACU核心技术团队的工程师,为大众准备了4期公开课直播。今天为大众送上第二期直播内容回顾,倘若你错失了直播,那样这次的直播回顾你必定不可错失。阿波君给大众整理好了笔记,快来一块学习吧!
上期咱们为大众整理了《直播回顾丨百度ACU如何满足自动驾驶量产需求》,本期公开课由百度智能汽车事业部底层软件架构师——张扬为咱们讲解《百度ACU软硬件结合优化的实践经验分享》。
ENJOY THE FOLLOWING
Apollo计算单元重点讲的是计算,Apollo自动驾驶对算力的需求,由需求引导至为么选择AVP这款芯片,稍后会讲到技术架构方便大家理解,第四部分便是主题:在有效计算方面做了软硬件结合的实践,最后是总结。
自动驾驶的计算种类包含:神经网络、图像处理、3D重构与VSLAM和矩阵操作。自动驾驶的实现,依赖各样各样的算法。
算力与帧率不必然成正比,有以下几种原因:首要是Elementwise算子带宽受限,其次是深度卷积算子是不是被优化,最后是是不是所有算子被加速。极端状况下,占少于1%计算量的算子,计算时间超过50%,明显影响帧率。
简单来讲,咱们对硬件的需求是:算力强、带宽高、算子齐备、功耗低、符合车规。
用什么芯片能满足自动驾驶的计算,能适应区别计算需求呢?咱们选择了一款SOC——Xilinx ZU5,里面包含了FPGA,首要是比较灵活,有利于算法迭代;其次供给足够的算力,保持行驶速度,不是像蜗牛那样缓慢前行;而后便是必须满足85℃环境下正常运用的严苛车规需求。另一点看中的便是基于FPGA的SOC的靠谱性能,广泛应用于靠谱性需求比较高的行业,例如说通信行业、军工行业、航空航天行业,亦用于汽车行业。自动驾驶最担心的便是安全问题,我们致力于保准自动驾驶的安全。
从软件来看,首要研发加速算子,使芯片拥有加速的能力;而后做有些驱动的程序来驱动,负责管理;最后基于PaddleLite做的深度学习模型编译及前向推测框架,另一是传统的CV算法。从硬件的方向来看,绿色的部分表率FPGA,首要有一个命令解析的模块,从ARM经过寄存器下发的命令解析出来,而后下发给相应的计算单元,例如说CNN、图像处理、SLAM等,由于深度学习和定位要并行,因此设计了两个同期拜访内存的通道,能够保准实时有效的运算。ARM亦是经过DDR掌控器和内存进行通信。
重点的计算都是在深度学习,用的都是CNN卷积神经网络,而这里过程中,CPU上对Paddle模型进行解析、算子合并、模型编译、内存开辟、部分算子计算,经过驱动程序对FPGA寄存器下发命令并管理共享的DDR内存,对FPGA而言,必须解析命令、掌控规律、数据搬运、量化单元、算子加速以及管理内存的模块DMA。软硬结合的最后目的是加强感知、定位、环境建模、规划掌控的处理帧率,保准数值精度和准召率。技术手段第1是经过加强FPGA的算力,第二是加强FPGA对计算的覆盖度,第三是量化训练及计算仿真工具。
第1点是进行了8bit的量化训练,与众区别的是供给跟FPGA计算相匹配的量化训练工具,实践证明,8bit计算后准召率下降,同期为了保准算法能够运用,供给了FPGA计算仿真器,计算结果保准与bit对齐。
第二点是利用了PFGA这款DSP的特殊结构,这个计算单元能够同期计算一个27位✖27位的,那咱们是8位✖8位的,就把一个乘数高8位,一个乘数低8位,这般乘出来的结果是第1个的乘积和第二个的乘积自然便是掰开的。针对其他的咱们都采用选定化计算,首要要保准与浮点计算相比匹配度高于98%,在这种前提下,计算过程非常多,咱们充分理解每一个计算环节,采用选定化要保存多少位来进行计算,每一个环节都采用变长计算,保准计算最有效。
第三点定义广义算子,当某些计算类型比较类似,就抽象成一个计算形式。这般就能够复用FPGA资源,凡是被加速的算子能够得到足够多的资源保准算力。
第四点是在计算中遇到的固定连接,倘若不做特殊处理,算完一个后必须把结果读到内存,下一次计算的时候必须从内存里取出来再次加工,这种存入读取的方式费时、效率低,此时能够把这些当成一个计算来进行处理,像之前说的SDK对算子进行融合,减少带宽占用。
还有一种便是针对参数很大的卷积,要经过算子分裂,分裂成小卷积后再计算,能有效地降低FPGA片上存储资源的占用。
针对图像采集,采用R核图像驱动,共享内存实现0拷贝,明显降低了CPU占用和内存宽带,加强了图像帧率的稳定性。
自动泊车有两种业务,一种是基于高精地图的PAVP,一个是基于学习建图的HAVP,FPGA加速算子,随着应用场景PAVP/HAVP切换,使得每一个场景都达到最高帧率。
自动驾驶的计算需求对承接计算加速来讲具有不确定性,在迭代的过程中,有些算子远无预期的效果,并非是只处理深度学习就能处理的问题,因此选取了运用FPGA来做,选择ZU5芯片,这个研发是比较困难的。
拓展:底层软件包含了模块形成——盖亚层,用来屏蔽硬件的差距,亦便是说此刻用的ZU5芯片,将来可能会用TDS,期盼在硬件迁移的过程中,上层应用软件不出现改变,能够直接迁移。硬件迁移的过程被盖亚层所屏蔽掉。
今天触及到模块有定制算子、硬件模式管理、传感器同步/预处理、DL/DV加速,还有硬件仿真器,用于X86等环境。
以上便是咱们讲解的百度ACU软硬件结合优化的实践经验,更加多系列主题讲解,请连续关注Apollo研发者社区。
点击文案左下角『阅读原文』
可观看直播回放
|