导读
本文整理自 2022 年 12 月的智算峰会 · 自动驾驶分论坛上的同名主题分享。
百度百舸为自动驾驶客户提供从数据上云、数据存储、数据处理、模型训练、仿真平台、车端部署的端到端低成本、高效率的 AI IaaS 解决方案。
数据访问性能提升了 5 倍,自动驾驶典型模型训练性能最高提升 391%,典型模型推理延迟最高降低了 90%,模型仿真成本降低了 60%。
本次演讲文字内容如下。
今天给大家分享的主题是关于百度智能云的 AI IaaS——百度百舸 · AI 异构计算平台,是如何通过跟自动驾驶场景的深度结合,助力于自动驾驶业务快速发展和迭代。
一、自动驾驶的技术成熟度与市场接受度越来越高
从一些公开的数据我们可以看到,自动驾驶的渗透率也是越来越高。到目前为止,L2 以上的自动驾驶渗透率已经达到了 23.2%,L3、L4 这些更高阶的自动驾驶的能力也越来越成熟,获得越来越多的认可。
以百度为例,基于 L4 的 Apollo 现在的日单量已经过万。从另外一个数据来看,新能源的汽车销量也日益增长,到目前为止单月都已经超过了 60 万台,这也证明了中国消费者的消费意愿非常高,消费潜力非常大。
因此,从自动驾驶的维度来看,无论是相关技术的成熟度、市场的接受度,还有用户消费的潜力都非常大,所以说完全智能驾驶的智能生活也是指日可待。
二、 构建自动驾驶云遇到的重要问题以及端到端的解决方案
为了让自动驾驶技术更快地发展,我们需要越来越多的数据,也需要越来越大的模型,覆盖越来越多的场景,这些都要求相关企业去构建一个高效的自动驾驶云。
那我们在构建高效的自动驾驶云的过程中,遇到的最大问题是什么?其实就是成本问题——数据这么多,模型这么大,迭代一次就需要花费极大的成本和时间。
那么怎么样才能让资源的效率得到更充分的发挥,让模型端到端更快地完成,让研发的效率更高。这也就是我们在构建自动驾驶云的过程中需要去考虑的非常重要的几个问题。
百度百舸 · AI 异构计算平台针对这些问题,为大家提供了一个低成本、高效能的 AI IaaS 解决方案。
在整个解决方案中最底层,就是我们的 AI 计算和 AI 存储,为大家提供极致成本的算力和存储。基于此之上,我们将自动驾驶和 AI 场景结合,丰富了我们 AI 加速和 AI 容器相关的一些能力,同时通过一些加速手段和资源效能提升的手段,来解决刚才介绍的自动驾驶云构建过程中的极致成本和极致效率相关的问题。
百舸和自动驾驶是如何结合起来的?
现在先进的自动驾驶解决方案都希望去实现数据的闭环,让模型可以自动更新以及自动迭代。
在一个完整的闭环中,它涉及到这么几个环节,包括数据上云、数据存储、数据处理、模型训练、仿真平台,还有车端部署这几个环节。车端部署的模型又源源不断产生新的的数据继续上云,以此不断迭代,模型持续的更新。
在这些不同的环节中,对我们底层的云平台或者基础云平台的诉求不尽相同,需要我们的存储和计算尽可能快、尽可能便宜。
因此,针对自动驾驶这种具有海量的车数据、大规模数据处理(或者说标注任务)、特殊的感知模型、大规模的仿真任务等特点的业务,百舸的解决方案在 AI 加速、AI 存储场景下与其进行深度结合,为大家提供丰富的 AI IaaS 产品。
这些产品包括我们的 AI 加速套件中的数据湖存储加速 RapidFS、模型推理加速 AIAK-Inference、模型训练加速 AIAK-Training,以及针对大规模容器处理的 AI 容器调度平台。
我们希望通过这些相关的组件和产品,让自动驾驶云平台端到端地获得极致的性能和极致的成本,所以接下来也是针对这几个方面来给大家做相关的介绍和阐述。
三、百度百舸的数据存储与处理方案
3.1 车端数据上云后的存储方案
数据上云之后遇到的第一个问题是存储问题。
车端的数据上云之后,其实还需要做各种各样的处理,包括从原始数据中提取出主体数据和敏感数据,将原始数据归档等等。这些不同的操作对存储系统的访问频次是不一样的,因此对存储系统的要求也是不同的。
因此,百度百舸 · AI 异构计算平台首先为大家提供的是一个分级的存储底座,这里包括了极低成本的冷存储系统和归档存储系统,也包括了高性能的并行文件存储系统,总计有 6 级的分级数据湖存储的能力。并且基于我们统一的数据管理,这些数据在不同级别的存储系统之间还可以自由的迁移。
除此之外,为了加快这种数据处理的效率,我们还提供了三大类、30 小类的智能处理的方案,在数据侧极大地提升了我们数据访问和业务处理的效率。
3.2 车端数据上云后的加速方案
除了存储侧,我们在计算侧也提供了分布式的 I/O 缓存系统 RapidFS,将我们的数据迁移到计算侧就近的内存中,这样让我们数据的访问更快、更极致。
RapidFS 具有三个方面的显著特点。
首先就是按需弹性、极致成本。我们复用计算端的存储的资源,也就是说没有额外的去增加额外的存储成本。同时在这个过程中,我们会动态的感知数据处理任务、AI 训练任务,以及对内存、对存储相关的需求,从而去动态的调整 RapidFS 所使用的内存或者存储的容量,这样就保证我们获得极致 I/O 的同时对计算的任务也没有多大的影响。
第二个特点是极致性能。RapidFS 通过将计算侧的内存池互联起来,构成一个极大的分布式计算池。这样即使针对大规模的数据访问,我们都能够实现就近访问,降低了百微秒的延迟。
第三个特点是数据的自动更新迭代。当数据发生一些变化或者发生一些更新时,我们会自动的同步或者加载到我们的缓存系统中,这样减少了人为的一些工作,极致的方便。基于这些数据技术的加成,通过 RapidFS 能获得一个接近于本地盘的数据访问效果,将我们数据的访问性能提升了 5 倍。
四、自动驾驶的模型推理和训练加速
介绍完数据的存储和访问之后,数据就会进入到数据处理的环节。
在整个自动驾驶业务的数据处理环节中,无论是数据过滤,还是数据标注,依然依赖很多人工的工作。为了进一步提升数据处理的效率上,很多先进的自动驾驶解决方案都开始尝试引入模型来去做数据处理的加速,通过模型来去过滤数据,以及实现图片的预标注。
4.1 AIAK-Inference推理加速引擎
AIAK-Inference 推理加速引擎也是应这种日益增长的数据处理端的算力增长的需求和加速的需求而生。
作为一个云原生的推理加速引擎,AIAK-Inference 的一个显著特点就是基于多引擎的抽象,将百度内部的许多高效的经过大规模验证的推理加速引擎给集成起来。因此 AIAK-Inference 在云端一推出,就具备了很好的这种模型加速的能力。
为了加速自动驾驶业务在数据处理过程中自动处理的效率,我们也针对数据处理过程中所用到的部分经典的模型的一些典型结构,在算子层做了专门的优化。
这也就是我们在 PPT 中展示的整个 AIAK-Inference 的一个层次结构。
为了让我们模型的训练效率足够高,我们需要去解决三个方面的问题:模型的计算量、GPU 卡的等效算力以及GPU Kernel 的开销。
因此,我们也是基于下方 PPT 上这样一个简短的公式,逐步去追求模型性能的极致。与这三个指标相对应的其实就是模型的精简,单算子的优化,以及算子的融合。
左下角也放了一些我们 AIAK-Inference 中常用的一些加速手段。在这些加速手段中,包括业界比较通用的量化层面的一些优化,也包括我们针对于自动驾驶模型中特殊的一些结构所做的特殊的算子融合,还包括我们在整个分析过程中所发现的那种效率非常低的算子的高效实现。
通过这些相关的优化手段,使得我们在数据处理过程中所用到的模型的计算效率提升了 40%-90%。
4.2 AIAK-Training训练加速引擎
当数据处理完成之后,我们就将数据送入到了 AI 训练与模型训练的环节。模型训练也是在我们整个自动驾驶云中最耗时间、最耗成本的一个环节。
从一个模型训练的过程来看,它其实分为数据的加载、前向的计算、参数的更新等等这些环节。任何一个环节的性能问题都会导致整个模型训练的性能受到影响。
因此, AIAK-Training 训练加速引擎是一个面向 AI 训练全生命周期的全链路优化的产品。这里面包括数据加载过程中的显存优化,也包括前向计算过程中的算子优化,即损失函数中的算子优化,甚至包括我们在梯度更新过程中的分布式相关的组件,让整个的模型训练能够获得一个最大化的提升。
在我们的实践中,针对典型的一些模型训练的优化往往会遇到一个问题——由于模型跟框架的耦合度会非常高,使得第三方的客户或者第三方的合作伙伴在应用起来的过程中需要去修改比较多的代码,用起来比较麻烦。所以 AIAK-Training 针对于框架的几大组件进行了相关的抽象。
我们抽象出了 AIAK.OP、AIAK.IO、AIAK.Loss,甚至和分布式相关的几个组件,这样用户仅仅需要修改几行代码,就能够享受到我们 AIAK-Training 所实现的各种加速的功能。
另外,针对不同的模型,基于模型结构的复杂性,还有基础设施环境的复杂性,不同的优化策略在不同模型上有时候可能会存在负的收益。因此,我们现在 AIAK-Training 正在研发的实际上是基于一个自动调优的策略。
通过实时的跟踪运行过程中的各种性能指标,再动态的去使用我们所配置的各种优化能力,这样让整个优化能力能够得到更好的泛化。AIAK-Training 实际上通过模块化的设计,能够让我们这种训练的效能得到一个非常大的提升。
为了追求训练的极致性能,我们跟踪的主要有两个指标,一个是单卡本身的训练性能,另一个是多卡之间的并行效率。
这也对应着下面说的三个事情:数据的加载优化、模型计算的优化、以及多卡并行的优化。所以在左下角也列出了我们在 AIAK-Training 过程中所实现的一些典型优化能力。
在这里需要强调一下,在我们的计算优化和 loss 优化的过程中,针对自动驾驶模型在训练过程中所遇到的特殊的模型结构,甚至特殊的训练方式做了专业的优化。
这样结合前面所说的 I/O 优化、分布式优化,让我们在整个训练过程中的模型性能得到了极大的提升。右下角我们也展示出了一些模型的性能数据,包括雷达、视觉、以及多模态融合的模型。平均来看,我们可以获得 50% ~ 391% 的效率提升。
五、AI 容器的任务调度和资源池化
除了前面介绍的能力以外,百度百舸 · AI 异构计算平台还有一个核心的杀手锏或者核心的亮点,就是大规模的 AI 容器的调度。
在整个自动驾驶云平台以及自动驾驶的任务中,包括前面的数据处理和模型训练,甚至我们没有展开的仿真平台,都有大量的任务在并发执行。数百训练任务、数千仿真任务在并发执行是一个常态。
所以我们 AI 容器相关的功能可以提供大规模调度的能力。首先它为了支撑起大规模的任务调度,为大家增强了 AI Job Operator、异构增强调度器等核心组件。
除此之外,为了让底层 CPU 和 GPU 的资源充分发挥出来,我们还持续地做深我们底层的池化技术。通过这种 CPU 与 GPU 解耦的方式,形成 CPU 资源池和 GPU 资源池,最后让整个资源效率充分地发挥出来。
在 AI 容器这一块,我想跟大家分享池化技术。
5.1 GPU容器虚拟化
第一个部分就是 GPU 容器虚拟化,这也是我们介绍百度百舸 · AI 异构计算平台的时候经常会着重介绍的内容。
因为我们的任务是多样的,所以对资源的需求也是多样的。当前基于这种独占卡的使用方式,使得我们资源的利用效率总是得不到充分的发挥,所以我们的 GPU 容器虚拟化,给大家提供了这种 1/4、1/2,甚至更细力度的这种容器的使用能力。
在最新的容器虚拟化 2.0 中,除了刚才提供了基础的隔离的一些资源分配的能力之外,我们还重点增强了编解码的隔离、显存超发这些相关的高阶能力,让我们底层的资源效率能获得进一步的提升。
我们以前说 GPU 容器虚拟化,经常使用的是基于用户态劫持的容器虚拟化方案。在越来越多的云平台场景下逐渐对资源隔离的要求越来越高。基于这一点,我们在 GPU 容器虚拟 2.0 中实现了我们基于内核态的容器虚拟化方案。
除了获得如用户态的性能以外,我们在内核态也能获得更好的隔离性。这样就可以满足在云平台下各种各样的需求。也就是说基于这种双引擎的虚拟化方案,让 GPU 利用率在更多的场景下能充分地发挥出来。
5.2 远程GPU
除了 GPU 容器虚拟化技术,在我们的池化技术中,另外一个就是我们的远程 GPU。
在我们分析自动驾驶任务过程中发现,有一些数据处理、仿真相关的任务,在使用 GPU 资源的时候是间歇式的,包括开发人员使用 GPU,它的使用也是间歇式的。这样就导致了分配出来的 GPU 有大量的时间都处于闲置的状态,这样远程 GPU 就应运而生了。
远程 GPU 具有这样四个特点:
- 第一个特点是资源解耦。因此当我们申请 CPU 和 GPU 资源的时候,可以采用任意的配比,这样就打破了我们单机层面 CPU 和 GPU 资源的硬配比的一个限制。
- 第二个特点是动态挂载。就是让间歇式的任务在需要的时候去挂载,在不需要的时候就释放。这样也极大的降低了这些任务的资源消耗,同时也可以让调度系统去分配更多的任务,让我们底层的 GPU 的资源效率得到了充分的发挥。
- 第三个特点是动态隔离。我们在后端实现了根据任务的本身的需求动态的去调整算力和显存的隔离能力与资源的分配。
- 第四个特点是透明容错。由于使用了独立的资源池,我们还实现了透明容错的能力。这样当后端的 GPU 发现故障的时候,我们会将 GPU 上的任务透明化,让业务无感的迁移到一个新的 GPU 上继续运行,让整个 GPU 的稳定性也得到了极大的提升。
关于远程 GPU 的技术,我们现在针对开发场景、仿真训练、数据处理这种间歇式的任务,已经完成了较为完善的适配,可以获得不亚于本地盘的吞吐性能。
针对于一些敏感的推理场景、或者说训练场景,相关的适配和研发还在进行过程中。同时远程 GPU,由于使用了比较先进的资源使用方式,在百度内部也获得了越来越多的应用。
百舸核心能力我们就先介绍到这里。基于这些核心的能力,百度百舸 · AI 异构计算平台在厂内外也获得了非常多客户的使用和打磨。
六、经典案例
基于我们所服务的一个头部车企,它也遇到了前面所说的训练效率低下、GPU 资源效率低的问题。借助于我们前面的端到端的加速能力以及池化技术,帮助它的模型训练性能提升了 170%, GPU 的资源效率提升了 2.5 倍,非常的有效。
除了外部以外,百度百舸 · AI 异构计算平台作为百度自己的自动驾驶解决方案 Apollo 的底层的算力底座,也是通过端到端的加速方案,还有资源调度的能力,助力于 Apollo 的数据闭环,能够实现周级别的 OTA。
它的仿真能够实行日行百万公里的更新,让咱们的百度 Apollo 的能力也获得了一个极大的提升。
好的,我今天要给大家分享内容就到这结束了。
——END——
推荐阅读: