0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何提高自动驾驶汽车感知模型的训练效率和GPU利用率

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 2024-04-29 09:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

由于采用了多摄像头输入和深度卷积骨干网络,用于训练自动驾驶感知模型的 GPU 内存占用很大。当前减少内存占用的方法往往会导致额外的计算开销或工作负载的失衡。

本文介绍了 NVIDIA 和智能电动汽车开发商蔚来的联合研究。具体来说,文中探讨了张量并行卷积神经网络(CNN)训练如何有助于减少 GPU 内存占用,并展示了蔚来如何提高自动驾驶汽车感知模型的训练效率和 GPU 利用率。

自动驾驶的感知模型训练

自动驾驶感知任务采用多摄像头数据作为输入,卷积神经网络(CNN)作为骨干(backbone)来提取特征。由于 CNN 的前向激活值(activations)都是形状为(N, C, H, W)的特征图(feature maps)(其中 N、C、H、W 分别代表图像数、通道数、高度和宽度)。这些激活值需要被保存下来用于反向传播,因此骨干网络的训练通常会占据显著的内存大小。

例如,有 6 路相机以 RGB 格式输入分辨率为 720p 的图像,批大小(batchsize)设置为 1,那么骨干网络的输入形状为(6, 3, 720, 1280)。对于如 RegNet 或 ConvNeXt 这样的骨干网络而言,激活值的内存占用是远大于模型权重和优化器状态的内存占用的,并且可能会超出 GPU 的内存大小限制。

蔚来汽车自动驾驶团队在这一领域的研究表明,使用更深的模型和更高的图像分辨率可以显著提高感知精度,尤其是对尺寸小和距离远的目标的识别;同时,蔚来 Aquila 超感系统搭载 11 个 800 万像素高清摄像头,每秒可产生 8GB 图像数据。

GPU 内存优化需求

深度模型和高分辨率输入对于 GPU 内存优化提出了更高的要求。当前解决激活值 GPU 内存占用过大的技术有梯度检查点(gradient checkpointing),即在前向传播的过程中,只保留部分层的激活值。而对于其他层的激活值,则在反向传播的时候重新计算。

这样可以节省一定的 GPU 内存,但会增加计算的开销,拖慢模型训练。此外,设置梯度检查点通常需要开发者根据模型结构来选择和调试,这给模型训练过程引入了额外的代价。

蔚来还使用了流水线并行技术,将神经网络按照 GPU 内存开销进行平均分段,部署到多个 GPU 上进行训练。此方法虽然将存储需求平分到多个 GPU 上,但是因为计算不平衡,会导致明显的 GPU 间负载不均衡现象,一些 GPU 的计算资源无法被充分利用。

基于 PyTorch DTensor 的张量并行 CNN 训练

综合考虑以上因素,NVIDIA 和蔚来合作设计并实现了张量并行(Tensor Parallel)卷积神经网络训练方案,将输入值和中间激活值切分到多个 GPU 上。而对于模型权重和优化器状态,我们采用和数据并行训练相同的策略,将其复制到各个 GPU 上。该方法能够降低对单个 GPU 的内存占用和带宽压力。

PyTorch 2.0 中引入的 DTensor 提供了一系列原语(primitives)来表达张量的分布如切片(sharding)和重复(replication),使用户能够方便地进行分布式计算而无需显式调用通信算子,因为 DTensor 的底层实现已经封装了通信库,如 NVIDIA 集合通信库 (NCCL)

有了 DTensor 的抽象,用户可以方便地搭建各种并行训练策略,如张量并行(Tensor Parallel),分布式数据并行(Distributed Data Parallel)和完全切片数据并行(Fully Sharded Data Parallel)。

实现

以用于视觉任务的 CNN 模型 ConvNeXt-XL 为例,我们将展示 Tensor Parallel 卷积神经网络训练的实现。DTensor 放置方式如下:

模型参数:Replicate

重复放置在各个 GPU 上,模型包含 3.50 亿个参数,以 FP32 存储时占据 1.4GB GPU 内存。

模型输入:Shard(3)

切分(N, C, H, W)的 W 维度,将输入分片放到各个 GPU 上。例如,在 4 个 GPU 上对形状为(7, 3, 512, 2048) 的输入执行 Shard(3) 会生成四个切片,形状为 (7, 3, 512, 512)。

激活值:Shard(3)

切分(N, C, H, W)的 W 维度,将激活值分片放在各个 GPU 上

模型参数的梯度:Replicate

重复放置在各个 GPU 上。

优化器状态:Replicate

重复放置在各个 GPU 上。

上述配置可以通过 DTensor 提供的 API 来实现,且用户只需指明模型参数和模型输入的放置方式,其他张量的放置方式会自动生成。

而要达成张量并行的训练,我们需要给卷积算子 aten.convolution 和 aten.convolution_backward 注册传播规则,这将根据输入 DTensor 的放置方式来确定输出 DTensor 的放置方式:

aten.convolution

Input 放置方式为 Shard(3),weight 和 bias 放置方式为 Replicate,output 放置方式为 Shard(3)

aten.convolution_backward

grad_output 放置方式为 Shard(3),weight和 bias 放置方式为 Replicate,grad_input 放置方式为 Shard(3),grad_weight 和 grad_bias 方式方式为 _Partial

放置方式为 _Partial 的 DTensor,在使用其数值时会自动执行规约操作,默认规约算子为求和。

接下来,我们便要给出张量并行的卷积算子前向和反向的实现。由于将激活值切分到了多个 GPU 上,1 个 GPU 上的本地卷积可能需要相邻 GPU 上激活值的边缘数据,这就需要 GPU 之间进行通信。在 ConvNeXt-XL 模型中,其降采样层的卷积不存在该问题,而 Block 中的逐深度卷积则需要处理该问题。

如果无需交换数据,用户可以直接调用卷积的前向和反向算子,传入本地张量即可。如果需要交换本地激活值张量边缘数据,则使用如图 1 和图 2 所示的卷积前向算法和反向算法,省略了图中的 N 和 C 维度,并假设卷积核大小为 5x5,padding 为 2,stride 为 1。

3e402744-0575-11ef-a297-92fbcf53809c.png

图 1 张量并行卷积前向算法示意图

如图 1 所示,当卷积核大小为 5x5,padding 为 2,stride 为 1 时,每个 GPU 上的本地 input 都需要取用相邻 GPU 的宽度为 2 的输入边缘,并将收到的边缘数据拼接到自身上。换句话说,需要 GPU 间的通信来确保张量并行卷积的正确性。这种数据交换,可以通过调用 PyTorch 封装的 NCCL 发送接受通信算子来实现。

值得一提的是,在多个 GPU 上存在激活切片时,卷积算子的有些 padding 是不需要的。因此本地卷积前向传播完成后,需要切除 output 中由不需要的 padding 引入的无效像素,如图 1 中的蓝色条所示。

图 2 显示了张量并行卷积的反向传播。首先,在梯度输出上应用 zero padding,这与前向传播过程中的输出切除操作相对应。对本地输入同样要进行数据交换、拼接和 padding 操作。

之后,通过调用每个 GPU 上的卷积反向算子,即可获得权重梯度、偏置梯度和梯度输入。

3e60a0aa-0575-11ef-a297-92fbcf53809c.png

图 2 张量并行卷积反向传播工作流程

权重梯度和偏置梯度的 DTensor 放置方式是 _Partial,因此使用时会自动对它们的值进行多 GPU 规约操作。梯度输入的 DTensor 放置方式是 Shard(3)。

最后,本地梯度输入的边缘像素会被发送到邻近 GPU 并在相应位置累积,如图 2 中的橙色条所示。

除了卷积层之外,ConvNeXt-XL 还有一些层需要处理以支持张量并行训练。例如我们需要为 DropPath 层使用的 aten.bernoulli 算子传播规则。该算子应被置于随机数生成追踪器的分布式区域内,以保证各个 GPU 上的一致性。

所有代码已经并入了 PyTorch GitHub repo 的主分支,用户使用时直接调用 DTensor 的上层 API 便可实现张量并行的卷积神经网络训练。

使用张量并行训练 ConvNeXt 的基准效果

我们在 NVIDIA DGX AI 平台上进行了基准测试,研究 ConvNeXt-XL 训练的速度和 GPU 内存占用。梯度检查点技术和 DTensor 是兼容的,并且结合两项技术,GPU 的内存占用能够更显著地降低。

测试的基线是在 1 个 NVIDIA GPU 上使用 PyTorch 原生 Tensor,输入大小为(7, 3, 512, 1024)时的结果:不使用梯度检查点时 GPU 内存占用为 43.28 GiB,一次训练迭代时间为 723 ms;使用梯度检查点时 GPU 内存占用为 11.89 GiB,一次训练迭代时间为 934 ms。

全部测试结果如图 3 和图 4 所示:全局输入形状为 (7,3,512,W),其中 W 从 1024 到 8192 不等。实线为未使用梯度检查点时的结果,虚线为使用梯度检查点时的结果。

3e775002-0575-11ef-a297-92fbcf53809c.png

图 3 各种测试条件下的 GPU 内存占用

3e887f9e-0575-11ef-a297-92fbcf53809c.png

图 4 各种测试条件下一次训练迭代耗时

如图 3 所示,使用 DTensor 切分激活值可以有效降低 ConvNeXt-XL 训练的 GPU 内存占用,并且同时使用 DTensor 和梯度检查点,ConvNeXt-XL 训练的 GPU 内存占用可以降到很低的水平。如图 4 所示,张量并行方法有很好的弱扩展性;在问题规模足够大时,也有不错的强扩展性。下面是不使用梯度检查点时的扩展性:

全局输入(7, 3, 512, 2048)给 2 个 GPU 时,一次迭代时间为 937 ms

全局输入(7, 3, 512, 4096)给 4 个 GPU 时,一次迭代时间为 952 ms

全局输入(7, 3, 512, 4096)给 8 个 GPU 时,一次迭代时间为 647 ms

结论

蔚来自动驾驶开发平台(NADP)是蔚来专门用于研发核心自动驾驶服务的平台。该平台可提供高性能计算和全链工具,用来处理每天成千上万的日常推理和训练任务,以确保主动安全和驾驶辅助功能的持续演进。使用 DTensor 实现的张量并行 CNN 训练能够有效提高 NADP 上的训练效率。

该关键性的方案使得 NADP 能够进行万卡规模的并行计算,它提高了对 GPU 的利用率,降低了训练模型的成本,支持了更灵活的模型结构。基准测试显示,在蔚来自动驾驶场景下,该方法表现良好,有效解决了视觉大模型的训练难题。

基于 PyTorch DTensor 的张量并行 CNN 训练可显著减少内存占用并保持良好的可扩展性。我们预计该方法将充分利用多个 GPU 的算力和互连功能,使感知模型训练更加普及。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5496

    浏览量

    109086
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5099

    浏览量

    134454
  • 自动驾驶
    +关注

    关注

    791

    文章

    14669

    浏览量

    176487
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14697

原文标题:使用张量并行技术进行自动驾驶感知模型训练

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自动驾驶汽车如何确定自己的位置和所在车道?

    比人类更多的“感官”和更强的计算能力;复杂则在于,这项工作必须做到精准(米级甚至分米级)、稳定、连续,并且要在各种极端环境下都要可靠。那自动驾驶汽车是如何确定自己的位置和所在车道的?   车辆如何感知世界?
    的头像 发表于 11-18 09:03 567次阅读
    <b class='flag-5'>自动驾驶</b><b class='flag-5'>汽车</b>如何确定自己的位置和所在车道?

    自动驾驶感知不一致是怎么发生的?

    [首发于智驾最前沿微信公众号]为了让自动驾驶汽车能够安全行驶,很多技术方案中会将多个感知硬件加装到车辆上,以确保自动驾驶汽车
    的头像 发表于 09-17 12:45 436次阅读
    <b class='flag-5'>自动驾驶</b><b class='flag-5'>感知</b>不一致是怎么发生的?

    如何确保自动驾驶汽车感知的准确性?

    [首发于智驾最前沿微信公众号]自动驾驶汽车想要自动驾驶,首先要做的就是能对周边环境实现精准感知,也就是能“看”清道路,那自动驾驶
    的头像 发表于 08-23 15:06 1370次阅读
    如何确保<b class='flag-5'>自动驾驶</b><b class='flag-5'>汽车</b><b class='flag-5'>感知</b>的准确性?

    自动驾驶数据标注主要是标注什么?

    的结构化标签。这些标签不仅构成了模型训练与评估的数据基础,也直接影响系统在实际道路环境中的识别、理解和决策能力。准确、系统的数据标注能够有效提升感知算法的鲁棒性与泛化能力,因此数据标注在整个
    的头像 发表于 07-30 11:54 903次阅读
    <b class='flag-5'>自动驾驶</b>数据标注主要是标注什么?

    太阳光模拟器 | 在汽车自动驾驶开发中的应用

    汽车产业向电动化、智能化转型的浪潮中,自动驾驶技术的研发面临着复杂环境感知的挑战。光照条件作为影响传感器性能的关键因素,直接关系到自动驾驶系统的安全性和可靠性。紫创测控Luminbo
    的头像 发表于 07-24 11:26 427次阅读
    太阳光模拟器 | 在<b class='flag-5'>汽车</b><b class='flag-5'>自动驾驶</b>开发中的应用

    什么是自动驾驶数据标注?如何好做数据标注?

    [首发于智驾最前沿微信公众号]在自动驾驶系统的开发过程中,数据标注是一项至关重要的工作。它不仅决定了模型训练的质量,也直接影响了车辆感知、决策与控制的性能表现。随着传感器种类和数据量的
    的头像 发表于 07-09 09:19 926次阅读
    什么是<b class='flag-5'>自动驾驶</b>数据标注?如何好做数据标注?

    海光DCU率先展开文心系列模型的深度技术合作 FLOPs利用率(MFU)达47%

    模型的深度技术适配,预训练模型FLOPs利用率(MFU)达到47%,在多个文本与多模态基准测试中取得SOTA水平。此次合作标志着国产算力基础设施与大
    的头像 发表于 07-01 14:35 1925次阅读

    新能源车软件单元测试深度解析:自动驾驶系统视角

    ‌ AWS RoboMaker等云平台支持万级测试用例的并行执行。某自动驾驶初创企业利用云端GPU集群,将AI模型单元测试时间从3周缩短至6小时。 ‌标准体系演进‌ UL 460
    发表于 05-12 15:59

    DeepSeek MoE架构下的网络负载如何优化?解锁90%网络利用率的关键策略

    近年来,随着AI大模型训练(如GPT-4、Gemini)的爆发式增长,数据中心网络的流量压力急剧上升。单次训练任务可能涉及数千张GPU卡协同工作,生成集合通信流量(All-Reduce
    的头像 发表于 04-28 12:04 689次阅读
    DeepSeek MoE架构下的网络负载如何优化?解锁90%网络<b class='flag-5'>利用率</b>的关键策略

    模型如何推动自动驾驶技术革新?

    [首发于智驾最前沿微信公众号]近年来,人工智能技术正以前所未有的速度在各个领域渗透与应用,而大模型(大语言模型和多模态大模型)的迅猛发展为自动驾驶技术带来了新的机遇。传统的
    的头像 发表于 04-20 13:16 685次阅读
    大<b class='flag-5'>模型</b>如何推动<b class='flag-5'>自动驾驶</b>技术革新?

    NVIDIA Halos自动驾驶汽车安全系统发布

    NVIDIA 整合了从云端到车端的安全自动驾驶开发技术套件,涵盖车辆架构到 AI 模型,包括芯片、软件、工具和服务。 物理 AI 正在为自动驾驶和机器人开发技术的交叉领域释放新的可能性,尤其是加速了
    的头像 发表于 03-25 14:51 966次阅读

    自动驾驶行业,分析数据标注在人工智能的重要性

    自动驾驶中,数据标注的作用尤为突出。自动驾驶系统依赖大量传感器数据(如摄像头、激光雷达、雷达等)来感知周围环境,而这些数据必须经过精确标注,才能用于训练
    的头像 发表于 02-08 15:43 1469次阅读

    自动驾驶角度解析数据标注对于人工智能的重要性

    自动驾驶中,数据标注的作用尤为突出。自动驾驶系统依赖大量传感器数据(如摄像头、激光雷达、雷达等)来感知周围环境,而这些数据必须经过精确标注,才能用于训练
    的头像 发表于 02-08 15:40 3743次阅读
    以<b class='flag-5'>自动驾驶</b>角度解析数据标注对于人工智能的重要性

    吉利汽车自动驾驶脱困专利获授权

    自动驾驶车辆在复杂环境中的应对能力。 据专利摘要显示,该脱困方法首先通过车辆传感器获取自动驾驶过程中的实时感知信息。这些信息随后被输入到一个脱困决策模型中,该
    的头像 发表于 01-15 11:33 1266次阅读

    GPU是如何训练AI大模型

    在AI模型训练过程中,大量的计算工作集中在矩阵乘法、向量加法和激活函数等运算上。这些运算正是GPU所擅长的。接下来,AI部落小编带您了解GPU是如何
    的头像 发表于 12-19 17:54 1322次阅读