部署新思路 | Minuet:在 GPU 上加速 3D 稀疏卷积

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

>>点击进入→自动驾驶之心【3D目标检测】技术交流

原标题:Minuet: Accelerating 3D Sparse Convolutions on GPUs

论文链接:https://arxiv.org/pdf/2401.06145.pdf

代码链接:https://github.com/UofT-EcoSystem/Minuet

作者单位:多伦多大学 Vector Institute Amazon Meta Samsung AI Centre Toronto CentML

会议:EuroSys'24

ed60d256892da27e940df1f9dd989cbb.png

论文思路:

稀疏卷积(Sparse Convolution) (SC) 广泛用于处理本质上稀疏的 3D 点云。与密集卷积不同,SC 通过仅允许输出到特定位置来保留输入点云的稀疏性。为了有效地计算 SC,现有的 SC 引擎(engines)首先使用哈希表来构建内核映射(kernel map),该映射存储要执行的必要的通用矩阵乘法(GEMM)操作 (Map 步骤),然后使用 Gather-GEMM-Scatter 过程来执行这些 GEMM 操作 (GMaS 步骤)。在这项工作中,本文分析了现有最先进的 SC 引擎的缺点,并提出了 Minuet,一种专为现代 GPU 量身定制的新型内存高效 SC 引擎。Minuet 提出 (i) 用一种新颖的分段排序双遍历二分搜索算法(segmented sorting double-traversed binary search algorithm) 替换 Map 步骤中使用的哈希表,该算法高度利用 GPU 的 on-chip 内存层次结构,(ii) 使用轻量级方案在 GMaS 步骤的 Gather 和 Scatter 操作中自动调整 tile 大小,以便使执行适应每个 SC 层、数据集和 GPU 架构的特定特征,以及 (iii) 采用填充高效的 GEMM 聚合方法(grouping approach),减少内存填充和内核启动开销。本文的评估表明,对于端到端点云网络执行,Minuet 的性能明显优于之前的 SC 引擎,平均性能提高 1.74 倍(最大 2.22 倍)。本文新颖的分段排序双遍历二分搜索算法在 Map 步骤中比之前的 SC 引擎平均实现了 15.8 倍(最大 26.8 倍)的卓越加速。

主要贡献:

本文研究了现有 SC 引擎的缺点,并提出了 Minuet,这是一种内存高效的引擎,可以加速现代 GPU 架构上的 SC 执行。

本文提出了一种新颖的分段排序双遍历二分搜索算法来在 SC 中构建内核映射。本文提出的算法高度利用了 GPU 的 on-chip 内存层次结构。本文还在 Gather 和 Scatter 操作中动态选择性能最佳的 tile 大小,并在对 GEMM 操作进行聚合(group)之前重新排序,以最大程度地减少不必要的数据访问和计算。

本文使用广泛的真实数据集、稀疏 3D 网络和 GPU 架构来评估 Minuet,并表明它在分层和端到端执行方面都显着优于先前的工作。Minuet 还在 SC 的 Map 步骤中提供了卓越的加速。

论文方法:

在这项工作中,本文使用各种点云网络、真实数据集和 GPU 架构来描述现有 SC 引擎 [8,9,43],并发现它们存在三个关键缺点。首先,他们使用哈希表(例如,cuckoo 哈希表 [1])来构建内核映射,其中存储必要的 GEMM 操作。然而,在哈希表中执行大量查询会导致不规则的数据访问,其中大部分由昂贵的GPU全局内存来服务,从而导致较高的数据访问成本。其次,最先进的 SC 引擎在 Gather 和 Scatter 操作中将 在 tiles 中的 SC 的多个输入/输出特征通道处理为一组连续的特征通道,以提高 GPU 内存吞吐量。然而,本文观察到他们总是采用单一的固定 tile 大小,这会导致性能不佳。在图 4 中,本文证明了性能最佳的 tile 大小取决于点云网络的每个特定 SC 层、真实数据集和 GPU 架构的特征。第三,在 GMaS 步骤中,现有的SC引擎执行与批处理方案中的多个权重偏移相对应的GEMM操作:它们通过用零值填充GEMM操作数将多个GEMM操作聚合在一起,即,它们在所有GEMM操作数中提供相同的大小,并且将它们作为单个批处理 GEMM 内核执行。通过这种方式,他们可以最大限度地减少 GPU 内核启动开销并提高 GPU 硬件利用率 [43]。然而,本文发现先前的 SC 引擎在 GMaS 步骤中按照 Map 步骤产生的顺序(即权重偏移的顺序)将 GEMM 操作聚合。这种方法会导致高填充开销(第3节),即添加大量零值,从而产生许多冗余数据访问和计算。

为了解决上述问题,本文提出了 Minuet,这是一种专为现代 GPU 量身定制的新型内存高效 SC 引擎。Minuet 高度利用 GPU 的 on-chip 内存层次结构,使 SC 执行适应输入数据集和 GPU 架构的特点,减少不必要的数据访问和计算。在 Map 步骤中,本文挑战了基于哈希表的搜索比 GPU 上的二分搜索性能优越的普遍观念 [1, 2],并提出了一种基于二分搜索的创新算法,专门用于在现代 GPU 架构上的 SC 的 Map 步骤中构建内核映射。本文利用在执行排序查询时,二分搜索实现高系统效率的关键观察结果,利用连续排序查询之间的数据局部性,并提出分段排序双遍历二分搜索算法(segmented sorting double-traversed binary search algorithm)。

本文提出的 SC 算法可以实现与基于哈希表的搜索类似的理论计算复杂度(第 5.1.3 节),并提供显着更高的内存效率,提高 GPU on-chip caches 的命中率(图 16b)。在GMaS执行步骤中,Minuet提供了两种优化。首先,本文在每次 Gather 和 Scatter 操作中即时调整用于处理多个输入/输出特征通道的 tile 大小。这项关键技术使 Minuet 能够使 SC 执行适应点云网络、真实数据集和 GPU 架构中每个 SC 层的特定特征,从而在 Gather 和 Scatter 操作中提供高系统性能。其次,Minuet 集成了一种填充高效的 GEMM 聚合策略,该策略首先根据输入/输出特征向量的大小对 GEMM 操作进行重新排序,然后将 GEMM 操作聚合到批量的 GEMM 内核启动中。通过这种方式,Minuet 可以优化 (i) 零值填充量,从而最大限度地减少对 GEMM 内核中无用数据的不必要的数据访问和计算,以及 (ii) GEMM 内核启动(kernel launch) 开销。

本文使用各种 3D 点云网络、真实数据集和 GPU 架构对 Minuet 进行了广泛评估,并证明 Minuet 显着优于之前的作品。与最先进的 SC 引擎相比,Minuet 的端到端性能平均提高了 1.74 倍(最高 2.22 倍),并且在 Map 步骤比之前的 SC 引擎实现了平均 15.8 倍的卓越加速(最高 26.8倍),在 GMaS 步骤中平均提高 1.39倍(最高 2.38倍)。

10a7e72678b1cc2df1d8462818060a60.png

图 6.Minuet 的高层概述。

484561051305cc3b9dbc23a06c3d0ff2.png

图 1. 密集卷积与稀疏卷积。

5480551d25dc4cc27dbc79ba441f80e1.png

图 2. SC 执行可以分为两个步骤。为了简单起见,本文使用二维坐标进行说明。

529af9a04f15e7014e47780207fa0f88.png

图 5. 在 SC 中执行 GEMM 操作的各种方法,其中一个蓝色和白色方块分别表示一个实际输入特征向量和一个零填充特征向量。假设 ?? 和?? 分别是填充特征向量和实际输入特征向量的数量,则填充开销定义为(??/??)。

680992741ab9a3bd9dca989b69e58bd7.png

图 7. 随机遍历查询时执行四个查询的二分搜索示例(即未排序查询(左)与排序查询方法(右))。

43c886be1153b75bc2cec8e585d12632.png

图 8. 完整查询排序(顶部)和分段查询排序(底部)的示例。绿色实心框代表在 GPU 全局内存中具体化的(materialized)数组。绿色虚线框表示未在内存中具体化的(materialized)数组,它们的值是即时计算的。

56f8c7d307cfcc9fbb5a389912526291.png

图 9. 优化相邻 SC 层中权重偏移和输出坐标的排序开销。

cb670b1ac680ad6d711e0142dd488c2a.png

图 10. 当对已排序源数组中的排序查询段执行二分搜索时(表示为二叉搜索树 ),使用反向二分搜索查找查询数组段中 pivot 的下界以减少比较次数的示例。

1b104ede6bcb97f5c009c91513a67b19.png

图 11. 双重遍历二分搜索执行步骤。

8b00da4949d576f08756e2ab2d7f1dc1.png
adbc7a62c507eee5ee70ef522002e9e0.png

实验结果:

271b3b6a24b41f858a6d64b2e6a9c203.png
67c7bf5ad36ab6d12504b9b147b6f4ca.png
00c17b4a4a5d45e7d527dbee5f99c4b1.png
98a9e259526e4d90ff876b6df2c2416b.png
ba356ca7ac9a632f1b28444268db863c.png
e7c0a7aedd3fe196eabb004bd7ac1ac0.png
d446b939cce0f71796972a67cd4dd0fe.png
2b0ed67e58f994dea3f6658b7c9b8cf6.png
a98d54a62dcbf3628b281e478f01e84d.png
11169766c1425a1881a38ba5ee3344da.png
7a1ecb9341ff10d17e265cc47ef1294d.png

总结:

Minuet 是一款高效 SC 引擎,可在 GPU 上加速 3D 点云网络。Minuet 高度利用 GPU on-chip 内存层次结构,提高执行并行性和元数据成本,并减少 SC 执行时不必要的数据访问和计算。本文的评估表明,在各种稀疏点云网络、数据集和 GPU 架构中,Minuet 在端到端执行时的平均加速明显优于之前最先进的 SC 引擎 1.74 倍。本文的结论是 Minuet 是一种专为现代 GPU 量身定制的新型内存高效 SC 引擎,并希望本文的工作能够鼓励对点云网络和其他稀疏深度学习网络的进一步全面研究和优化策略。

引用:

Yang J, Giannoula C, Wu J, et al. Minuet: Accelerating 3D Sparse Convolutions on GPUs[J]. arXiv preprint arXiv:2401.06145, 2023.

投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署大模型与自动驾驶Nerf语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

f12c119d62e29b8ae31f99bb7a363bda.png
视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2400人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

b22e252200d93f1ac056c960650e823e.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

35a603c8e2819f1cf33091c6d74e7050.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

05f6f6e006e037e4295854156e3c1e30.jpeg