大数跨境

直播预告 | 觉非科技:Spconv和TensorRT的高性能部署,让自动驾驶“快”起来

直播预告 | 觉非科技:Spconv和TensorRT的高性能部署,让自动驾驶“快”起来 觉非科技JueFX
2022-08-02
2
导读:将TensorRT完全从Spconv的部署中移除,在TensorRT之外建立起一套平行于TensorRT但又能与之相配合的引擎机制。
用的点云检测算法PointPillars及其衍生算法因使用2D卷积便于落地部署,因而受到业界欢迎。但Pillar Encoding2D卷积结合的方式,并不能充分利用点云空间的三维特征,基于3D卷积的Voxel-based方式则在这方面改观明显。

然而,基于Voxel的方式采用的稀疏卷积算子Spconv一直面临着部署困难的问题,主要阻碍有两点,即低时延要求和与既有边缘设备推理引擎的适配

前者的本质是如何实现一个高性能GEMM应用,而后者则需要将具有变长特性的Spconv与诸如TensorRT之类的定长推理引擎结合起来。

GEMM的优化

GEMM(GEneral Matrix Multiplication),即通用矩阵乘法,深度学习领域的绝大部分有参算子的底层实现均为GEMM。因GEMM的数据复用性高,且数据规模大,十分适合并行计算解决。
对GEMM的调教,本质是在降低与隐藏访存开销和充分利用加速单元。硬件厂商为此贡献了许多加速方案,例如NVIDIA Tensor Core,地平线的BPU等。而在软件层面,高效利用这些ASIC芯片的能力也是不可忽略的因素。

以NVIDIA的Ampere架构为例,每个Tensor Core负责实现一对16*16 与 16*8的半精度矩阵相乘,需要将这些数据从Global Memory读取到Shared Memory,再加载到寄存器中供Tensor Core计算,这个数据搬运过程可以借用CUTLASS中的Iterator概念来完成。

每个Iterator负责两种存储单元的数据通信,结合向量化访问,数据的搬运可以以最小开销完成。同时,因Tensor Core的运算与数据通信是异步进行的,还可以用Tensor Core来隐藏访存延迟。

而在Ampere架构中,只要Shared Memory的可用空间足够大,还可以使用不设上限的Buffer个数来实现更激进的延迟隐藏。

然而,每个Tensor Core只能计算特定规格的小矩阵,而在点云相关神经网络中往往需要处理拥有上百万浮点数的矩阵。在这种情况下,Tiling(分块)操作就必不可少。

Tiling的原理其实就是分治(Divide and Conquer), 将一个大矩阵划分成若干个小矩阵块,然后并行处理。

在一个普通的GEMM Pipeline中会涉及三种矩阵块的划分,即Threadblock Tile, Warp Tile与Thread Tile,分别在线程块、线程束与线程粒度完成计算。每种粒度的执行单元需要在Tiling中访问与管理不同的存储单元。

GEMM分块中的内存层级
最后,在Tensor Core的计算完成时,可以继续借助Iterator将其结果从寄存器搬运回Global Memory。由此,一个CUTLASS GEMM的简单流程完成。
在Spconv的加速中,除了CUTLASS,也可以自行实现一些简单的SGEMM 或HGEMM来融合稀疏卷积中的Gather,Scatter以及循环操作,以消除不必要的访存操作与中间张量,并减少kernel launch的开销。样,在自行实现的GEMM中依旧需要主动调用Tensor Core来避免CUDA Core的过多介入。

与TensorRT的结合部署

GEMM优化降低了算子在系统中的时延,接下来则需要将算子与TensorRT等边缘推理框架结合,实现模型部署。
需要注意的是,诸如Spconv、Transformer等算子具有变长特性,即输入或输出的张量尺寸大小不固定,这便与TensorRT等引擎的定长特性产生了冲突。所谓定长,指的是算子的输出维度与形状不变,比如在普通2D卷积中,如果我们知道了输入Feature Map的大小与一些参数后,其输出Feature Map大小便是固定的。而Spconv因为仅处理非零元素,其并不具备这一特点,算子输出的张量长度与输入数据的分布紧密关联。
将像Spconv这样的自定义算子融入TensorRT时,需要构建TensorRT 插件来定义该算子的具体实现及其所需的资源。如果算子输出尺寸变长,则一般会在插件中定义一个最大理论值,然而Spconv的理论最大值远超实际输出,这种情况下,一个不难想到的方法就是定义一个经验值作为阈值。
但是在TensorRT中,仅将Spconv作为一层插件,不免会在后续层中有算力浪费,虽然可以使用Mask过滤,但如果考虑到TensorRT的闭源性以及版本更迭带来的属性变化,想要继续在TensorRT框架中进行Spconv的移植,会是一件高工程成本的任务。
因此,不如另起炉灶,可以将TensorRT完全从Spconv的部署中移除,在TensorRT之外建立起一套平行于TensorRT但又能与之相配合的引擎机制。

这套机制需要有两个基本特性。第一,对变长特性特别适配,能够灵活处理各种变长情况;第二,针对大显存需求的特别显存管理能力。

变长引擎与TensorRT的结合

上图中,VLE部分即针对变长算子的优化引擎,将变长部分网络与定长网络隔离开。而经验最大值带来的运行风险,可以用例如随机剔除、异步内存重构与虚拟内存池等方法消除。同时,VLE的设计优化可以很方便地完成Kernel fusion以及基于计算图优化的显存管理工作。

至此,我们从两方面克服了Spconv的部署难点,并且将其运行速度与工作稳定性提升到了新高度。后续,这项工作依旧有不少拓展点,如高精度量化、全变长网络引擎的设计等。

觉非科技的真实场景实验

觉非科技用一组实验案例来比对下基于Spconv与基于Pillar2D卷积的方法效果。

测试场景不同于一般的车端点云场景,而是路侧Lidar的感知情景。需要注意的是,因为安装高度与安装位姿的不同,路侧场景中平均每个交通参与者反射点数是车端场景的15%-50%。

示例场景中觉非框定了约1.5万平米的感知区域,包含了约2000平米的严重遮挡区域,平均每帧约100至150个感知目标,两颗固态Lidar投入使用。同时,由于路侧设备安装使点云拼接产生残影,这增加了对模型鲁棒性的考验。

视频:Spconv模型与Pillar模型的效果对比

觉非在实验中使用OpenPCDet中默认的Centerpoint-voxelCenterpoint-pillar两个模型,视频为模型直出结果。

可以看到Pillar模型在道路中间处容易产生重叠识别,在下方过马路的目标中,有一辆小型三轮车在Pillar模型中也被频繁误检。而对右侧进入道路的大车识别的稳定性也不如Voxel模型。

通过使用专用引擎对稀疏卷积加速,觉非科技解决了Spconv算子的效率瓶颈与显存管理问题。利用稀疏卷积强大的性能,在众多业务场景的部署中,基于3D卷积的模型加快了算法的迭代周期,为开发人员提供了便利

同时,凭借低时延与低显存占用,专用引擎加速的Spconv为其他系统节点节省了大量资源,也为整个自动驾驶系统贡献了鲁棒性安全性,提升了整体系统的表现。

目前,基于城市与高速场景,通过路侧与车端的感知载体,觉非科技已进行了大量针对稀疏卷积的应用与迭代。

在不同实践情景下提炼的训练模型与实践经验,也反哺着觉非的算法不断升级。




参考资料

1SECOND: Sparsely Embedded Convolutional Detection

2.https://github.com/NVIDIA/cutlass


直播预告

觉非科技BEV感知的技术实践与迭代路径


觉非技术解析 | 激光雷达与视觉融合感知在自动驾驶中的应用


觉非科技:多传感器融合赋能智能驾驶量产落地


【声明】内容源于网络
0
0
觉非科技JueFX
觉非科技是国内领先的自动驾驶感知决策算法与数据服务商,以“多传感器融合计算”为核心技术路线,构建了适用于全栈自动驾驶且具备 “感知-决策-数据”闭环能力的量产方案,以“数据驱动量产化”为核心业务目标,为合作伙伴实现自动驾驶闭环能力。
内容 109
粉丝 0
觉非科技JueFX 觉非科技是国内领先的自动驾驶感知决策算法与数据服务商,以“多传感器融合计算”为核心技术路线,构建了适用于全栈自动驾驶且具备 “感知-决策-数据”闭环能力的量产方案,以“数据驱动量产化”为核心业务目标,为合作伙伴实现自动驾驶闭环能力。
总阅读144
粉丝0
内容109