随着深度学习和人工智能领域取得突破性进展,以及无人配送车、无人出租车、无人巴士等智驾场景逐步落地深入,自动驾驶行业近年来取得了越来越多的关注和进步。然而,想要真正实现在道路上行驶,还需要解决众多技术问题。
感知系统作为车辆路径规划的依据之一,需要通过“数据训练”夯实基础,以监督学习的方式,将数十 PB 的训练数据提供给算法,通过其生成具有普适感知能力的模型,帮助自动驾驶车辆拥有更好地感知实际道路、车辆位置、障碍物信息等方面的能力,达到实时感知在途风险,作出具体行为决策的目的。
随着越来越多的雷达、摄像头等传感器被部署在车辆里,各个环节的工作量与日俱增,尤其是高性能自动驾驶汽车对数据的存储需求更是巨大,一天生成的数据量可达到 3-8 TB 左右。因此,如何高效、稳定地保证自动驾驶过程中收集到的大量数据,并快速形成自动驾驶的计算模型,成为了各大自动驾驶企业关注的首要问题。
本篇文章,焱融科技将基于国内某专注于研发和应用L4级自动驾驶技术,聚焦自动驾驶出行和自动驾驶同城货运两大场景的自动驾驶公司实际案例,分享 YRCloudFile 在自动驾驶训练场景下针对 IO 模型、容器化部署、性能提升、智能分层方面的实践经验和启发,希望能给相关从业者解决类似问题时提供一些参考和帮助。
此前,国内某 L4 级自动驾驶公司主要采取的是开源的存储解决方案,将 GPU 计算和存储以融合的形式进行部署,但是随着文件数量的上升,性能出现明显下降,原有的存储方式也逐渐开始影响训练的效率。因此,他们开始考虑升级现有的存储解决方案。在升级过程中,该公司重点关注并解决以下问题:
在了解该公司驾驶训练场景以后,焱融科技针对其自动驾驶训练数据集进行了一系列分析,并总结出其训练数据具备以下特征:
针对上述特征,焱融科技从元数据处理能力、目录热点、多级智能缓存、针对性调优再到智能分层,提供了一系列高性能、高可用、高扩展的存储方案。
焱融 YRCloudFile 自动驾驶应用场景下的工作流程
在面临海量文件时,由于 MDS 不能及时地响应读写请求,所以极易出现应有性能无法发挥的情况。如果想要突破存储的瓶颈,主要解决方案是提升元数据的处理能力。为此,焱融科技选择通过可水平扩展设计的 MDS 架构,实现 MDS 集群化。这主要考虑到以下三方面:
目前,焱融 YRCloudFile 主要采用静态子树 + 目录Hash两者结合的方式搭建可水平扩展设计的 MDS 架构,其主要包含三大要素:
这种架构方式有两种好处,首先是实现了元数据的分布存储,通过扩展元数据节点,即可支持百亿级别的文件数量;其次是在一定程度上,保证了元数据的检索性能,减少在多个节点上进行元数据检索和操作。
由于大数据集群的目录以及文件数据数不胜数,所以在自动驾驶车辆训练过程中,如果遇到多个计算节点需要同时读取这批文件时,其所在的 MDS 节点就会变成一个热点。整体结构如下图所示:
为了进一步提升小文件筛选与治理流程,焱融科技采用了增加虚拟子目录的方式,虽然这种方式增加了一层目录查询的操作,但是其具备灵活性强的特点,可以将热点分摊到集群中所有元数据节点。同时,这种解决方法还可以解决另一个问题——单目录的文件数量问题,使单目录实现支撑 20 亿左右的文件数量,并且可以根据虚拟子目录的数量灵活调整。整体结构如下图所示:
我们可以尝试通过访问/dir1/dir2/file1,来查看虚拟子目录是如何实现的。在这里,我们假设,dir2 是开启了 dirStripe 功能。主要访问流程如下:
在整个模拟测试过程中,我们模拟了多个客户端,并发访问同一个目录的场景。在完成以后,我们通过对比发现,目录拆分后有10倍以上的性能提升。
由于自动驾驶训练数据有很多类型,不同数据信息存储数据量不可估计,所以普通文件缓存容易出现只提供内存缓存,导致容量有限,通常一台 GPU 服务器可用的内存缓存仅数十 GB;同时,也容易出现内存缓存 LRU 置换算法,epoch 缓存在每个 epoch 的命中率低的问题。为了应对上述问题,焱融 YRCloudFile 客户端采用能提升整体性能的多级智能缓存特点:
YRCloudFile 客户端多级智能缓存工作图
通过焱融 YRCloudFile 所提供的方案,可实现在整个训练中,数据集加载速度提升5倍的效果。
大多数存储厂商在产品规划、产品稳定性、技术服务等方面更为专业。在现场进行 POC 测试的过程中,焱融 YRCloudFile 进行了包括但不限于功能、性能、可靠性等方面的测试。从中我们发现,集群的性能已经超过原有存储系统,但是没有达到预期的数值。因此,我们可以通过对现场环境的分析,提出以下几点优化措施:
经测试,通过针对性的调整后,YRCloudFile 可以将以上存储参数的调整性能提升了 20%-30%。
了解数据存储的朋友都知道,访问频繁的数据为热数据,访问较少的数据为冷数据。然而,一旦冷数据过多,不仅会占用大量的存储空间,而且存储成本也随之增加。为此,焱融 YRCloudFile 专门提供了文件存储系统目录级的智能分层功能,通过高性能文件存储+低成本对象存储的组合,我们将有效实现热数据依然为人工智能等新兴业务提供高性能访问的特性,而冷数据可以在用户现有低成本的对象存储中有效保存。目前,焱融 YRCloudFile 智能分层技术支持以下特性:
通过冷、热数据智能分层的方式,可以满足绝对大多数企业在自动驾驶训练过程中,对于存储高性能和数据长期保存的需求。
当前,为了提升自动驾驶训练测试效率,大多数厂商以及 AI 应用会选择在容器为应用运行载体的 Kubernetes 平台上,运行 AI 训练和推理任务。Kubernetes 在 AI 训练方面主要有两个优势:
在自动驾驶训练过程中,存储系统对接容器场景常常遇到以下问题:
焱融 YRCloudFile 从设计到实现,主要场景就是解决 Kubernetes 环境中,容器化应用对存储的访问需求。焱融 YRCloudFile 通过支持 CSI、FlexVolume 等插件,实现对 AI 场景容器持久化存储的支持,并且根据客户实践应用,针对容器化场景的功能进行了优化:
YRCloudFile 高性能分布式文件存储架构图
通过焱融 YRCloudFile,该 L4 级自动驾驶公司突破了存储性能的瓶颈,完美对接容器服务,完成数据跟随服务。另外,通过快速定位 PV 热点,该公司实现呈现 Pod、PV、PVC 实时监控与关联关系等独创性的管理功能,提升容器的管理效率。
当前,该 L4 级自动驾驶公司在焱融 YRCloudFile 高性能、高可用、易扩展的分布式存储支撑平台的帮助下,可以轻松应对海量小文件性能、容量的挑战。同时,满足了未来扩容需求。未来,该公司工作人员将极大减少在存储系统管理、配置和排错的时间,将更多的精力投入到训练业务中。