关于阿里云开发者:毫末智行-Fluid-实践云原生-AI-让汽车变得更聪明

45次阅读

共计 5146 个字符,预计需要花费 13 分钟才能阅读完成。

简介: 毫末机器学习训练场景对于数据读取有较高的性能要求,且对于元数据和数据缓存的精细化管制要求较高,通过 Fluid + JindoRuntime 的缓存能力能够灵便地缓存 OSS 训练文件进行元数据和数据,提供高效的元数据和数据拜访性能。基于这种计划,咱们能够实现精细化管制缓存的内容,进步生产资源利用率,不仅无效缓解了 OSS 带宽的压力,也大大提高了训练效率。

作者介绍:

李范:毫末智行 服务端开发工程师,负责 AI 主动训练平台的研发与算法优化

陈铁文:毫末智行 服务端开发工程师,负责 AI 主动训练平台的下层研发

引言:Fluid 是云原生基金会 CNCF 下的云原生数据编排和减速我的项目,由南京大学、阿里云及 Alluxio 社区联结发动并开源。本文次要介绍毫末智行机器学习平台在主动驾驶场景的应用,以及如何基于 Fluid +JindoFS 冲破原有存储与计算拆散架构带来的性能瓶颈,从而进步生产资源利用率,无效缓解 OSS 带宽压力,并且大大提高训练效率的生产实践。

主动驾驶商业利用正驶入快车道

毫末智行是一家致力于主动驾驶,提供智能物流解决方案的人工智能技术公司。企业使命为以零事变、零拥挤、自在出行和高效物流为指标,帮助客户重塑和全面降级整个社会的出行及物流形式。

数据智能是毫末智行的外围能力,乘用车主动驾驶零碎及解决方案、低速无人车生态系统及解决方案、主动驾驶相干产品研发与定制服务三大垂类产品为数据智能服务,数据智能反哺三大垂类产品,坚固其在各自市场内的相对领先地位。经近 10 年的积攒与全栈自研,以及 90% 以上的研发投入,在乘用车、低速无人车、智能硬件三个方 面一直积攒相干数据,目前已孵化出小魔盒、小魔驼、小魔盘等 10 余款成熟产品。

毫末智行的疾速倒退也体现着更高级别的智能驾驶将在更宽泛的场景中发挥作用,主动驾驶的商业利用正在驶入快车道。

传统机器学习训练效力遭逢瓶颈

随着机器学习在主动驾驶业务场景中的宽泛应用,机器学习平台表演了十分外围的角色。该平台采纳了存储与计算拆散的架构,使得计算资源得以与存储资源解耦,从而实现了灵便的资源配比以及便捷的存储扩大,并且升高了存储资金和运维老本。

然而,这种架构也带来了一些挑战,其中比拟要害的问题体现在数据拜访性能和稳定性方面:

1、计算存储拆散架构导致数据拜访高延时,导致训练慢:

业务团队应用的机器学习工作在训练过程中要实时频繁拜访 OSS 上的数据,在 OSS 带宽受限或者压力较大时,拜访 OSS 上数据速度比拜访本地文件速度要慢很多;

2、Kubernetes 调度器数据缓存无感知,同一数据源屡次运行拜访仍旧慢:

在事实利用中深度学习工作运行会一直 反复拜访同一数据,包含雷同模型不同超参的工作、微调模型雷同输出的工作、以及 AutoML 工作等。这种深度学习工作的反复数据拜访就产生了能够复用的数据缓存。然而,因为原生 Kubernetes 调度器无奈感知缓存,导致利用调度的后果不佳,缓存无奈重用,性能难以晋升;

3、OSS 成为数据并发拜访的瓶颈点,稳定性挑战大:

毫末机器学习平台上的大量机器学习工作在同时训练时都会并发拜访后端 OSS 存储。这种并发机器学习训练造成的 IO 压力比拟大,OSS 服务成为了性能单点,一旦 OSS 带宽呈现瓶颈则会影响所有机器学习工作;

4、训练文件扩散,元数据压力大: 

机器学习工作的训练数据文件通常会扩散在不同门路下,读取文件须要消耗大量的工夫在 list 操作上。对象存储的 list 操作性能较差,因而在进行大规模 list 时对 OSS 元数据压力很大,经常出现超时或者 list 失败的状况。

在事实利用中,通过对于毫末机器学习平台的监控剖析,咱们发现 IO 性能问题会导致 GPU 等低廉计算资源不能被充分利用。机器学习本身训练的特点导致了数据文件拜访较扩散,元数据压力较大。如果可能精细化地缓存元数据和文件数据,那么一方面能够进步缓存效率和磁盘利用率,另一方面也能够解决文件查找操作带来的元数据损耗。

基于 Fluid+JindoRuntime 减速模型推理训练的生产实践

为了能更好地满足大规模机器学习模型训练的高效性需要,模型训练过程中须要对数据拜访获得更好的数据本地化成果。因而,咱们心愿达到以下指标:

  • 计算可能充分利用本地化数据拜访:这样就不需通过网络重复读取,从而减速机器学习模型的训练速度,并晋升集群的 GPU 使用率。
  • 升高 OSS 负载压力:通过利用对于局部数据的本地读取,减小数据拜访延时和升高对底层 OSS 的带宽压力。
  • 充分发挥热点数据集的缓存节点劣势:在对用户无感知的前提下,智能地将任务调度到数据缓存节点上,从而使得罕用模型训练程序越来越快。
  • 自定义文件列表模式缓存指定文件:只缓存训练须要的文件,极大进步缓存使用率和磁盘利用率。
  • 元数据缓存和数据缓存拆散:可独自对文件进行元数据缓存,缓存策略定制化。
  • 通过 POSIX 接口读取数据:这样无需在模型开发和训练阶段应用不同的数据拜访接口,升高开发机器学习模型程序的老本。

为了达到上述指标,咱们迫切希望找到 Kubernetes 上具备分布式缓存减速能力的零碎平台。咱们发现 CNCF Sandbox 我的项目 Fluid 正好能够满足咱们的诉求。于是,咱们设计了基于 Fluid 的新架构计划,通过验证比拟,咱们抉择 JindoRuntime 作为减速运行时。

3.1 技术计划

  • Fluid

Fluid 是一个运行在 Kubernetes 上可扩大的分布式数据编排和减速零碎,它通过数据的编排和 应用数据的利用调度,解决云原生编排框架运行此类利用面临数据拜访延时高、多数据源联结剖析难、利用应用数据过程简单等痛点。

  • JindoRuntime

JindoRuntime 是 Fluid 一种分布式缓存 Runtime 的实现,基于 JindoFS 分布式缓存减速引擎 。JindoFS 是阿里云开源大数据 - 数据湖存储团队自研大数据存储优化引擎,齐全兼容 Hadoop 文件系统接口,给客户带来更加灵便、高效的计算存储计划。JindoRuntime 应用 JindoFS 的 Cache 模式进行远端文件的拜访和缓存,反对 OSS、HDFS、规范 S3 协定等多种存储产品的拜访和缓存减速。在 Fluid 上应用和部署 JindoRuntime 流程简略、兼容原生 K8s 环境、能够开箱即用。深度联合对象存储个性,应用 Navite 框架优化性能,并反对免密、checksum 校验等云上数据安全性能。

之所于选型基于 JindoRuntime 的 Fluid,次要是基于以下思考:

  • Fluid 能够将数据集编排在 Kubernetes 集群中,实现数据和计算的同置,并且提供基于 Persistent Volume Claim 接口,实现 Kubernetes 上利用 的无缝对接。同时 JindoRuntime 提供对 OSS 上数据的拜访和缓存减速能力,并且能够利用 FUSE 的 POSIX 文件系统接口实现能够像本地磁盘一样轻松应用 OSS 上的海量文件,pytorch 等深度学习训练工具可利用 POSIX 文件接口读取训练数据。
  • 提供元数据和数据分布式缓存,可独自进行元数据缓存预热。
  • 提供元数据缓存预热,防止训练文件在 OSS 上大量元数据操作、提供数据预热机制,防止在训练时刻拉取数据造成的数据拜访竞争
  • 提供文件列表模式的数据定制化预热,精细化预热数据。
  • 通过 Fluid 的数据感知调度能力,用户无需晓得缓存节点信息就能够将工作搁置到有缓存数据的节点,实现数据拜访性能的劣势最大化。

3.2 落地实际

  • 抉择适合的缓存节点:

 应用 JindoRuntime 能够取得更好的数据本地性能,在理论生产中咱们发现不是所有节点都来做缓存性能就比拟好。起因是有些 节点的磁盘和网络 IO 性能不是很好,这个时候须要咱们可能把缓存节点尽量抉择到一些大容量磁盘和网络较好的节点上。Fluid 反对 dataset 的可调度性,换言 之,就是缓存节点的可调度性,咱们通过指定 dataset 的 nodeAffinity 来进行数据集缓存节点的调度,从而保障缓存节点可高效的提供缓存服务。

  • 配置缓存容量与门路:

通过 dataset 的 Mounts 和 JindoRuntime 的 tieredstore 能够设定数据的挂载目录。同时,为防止数据量过多而导致 缓存量过于宏大,可手动配置 JindoRuntime 的 tieredstore 来束缚缓存的最大容量与水位线(超过水位线的数据会被主动抛弃),tieredstore 也蕴含对缓存 寄存门路的设定与存储层(SSD/MEM/HDD)的设定,以满足各种场景的须要。对于多节点的场景,应用 dataset 的 replacement 能够反对在同一集群上部署多个 dataset。

  • 设定缓存安全策略:

在 Fluid 中创立 Dataset 时,有时候咱们须要在 mounts 中配置一些敏感信息,如 oss 账号的 accessKeyId、accessKeySecret。为了保障平安,Fluid 提供应用 Secret 来配置这些敏感信息的能力。通过创立 Secret,dataset 以 EncryptOptions 字段指定 Secret 的 name,实现对敏感信息的绑定。

  • 数据预加载:

对于曾经创立实现的 dataset 和 jindoruntime,第一次拜访挂载的数据会经验一次下载数据目录下全副文件的过程,这就产生了一个问题:若数据所在的目录存在无需应用的其余数据,会造成无意义的空间资源与网络资源节约。为防止这种问题,Fluid 既反对对数据的预加载,同时也反对元数据缓存。通 过创立 dataload 读取所要预加载数据门路信息,能够动静将数据注入。dataload 反对缓存元数据与屏蔽非预加载数据的拜访,这样就大大降低的数据拜访效率。

3.3 带来的性能显著晋升

咱们应用了不同的模型,推理和训练雷同的数据,别离以应用 JindoRuntime 和不应用 JindoRuntime 的形式推理和训练,比照训练时长,发现性能带来了显示晋升:

模型在云端推理 1 万帧图片的测试后果

另一个稍大的模型在云端推理 1 万帧图片的测试后果

模型应用 4 卡在云端训练 1 万帧图片帧耗时测试后果

集成了 Fluid+JindoRuntime 后,显著晋升了云端训练和推理的效率,尤其是一些小模型,在云端做训练和推理 JindoRuntime 能够无效解决 IO 瓶颈问题,训练速度最高可晋升约 300%。同时也大幅度晋升云端 GPU 应用效率,减速了在云端数据驱动的迭代效率。

共建 Fluid 开源生态,让更多行业更“聪慧”

毫末机器学习训练场景对于数据读取有较高的性能要求,且对于元数据和数据缓存的精细化管制要求较高,通过 Fluid + JindoRuntime 的缓存能力能够灵便地缓存 OSS 训练文件进行元数据和数据,提供高效的元数据和数据拜访性能。基于这种计划,咱们能够实现精细化管制缓存的内容,进步生产资源利用率,不仅无效缓解了 OSS 带宽的压力,也大大提高了训练效率。

以后 Fluid + JindoRuntime 可能满足生产环境的根本须要,对 OSS 的减速成果也比拟显著,提供的精细化缓存策略更加高效。咱们冀望可能把弹性的数据减速作为毫末机器学习平台的差异化竞争能力,晋升整体训练任务速度和计算资源的利用率。在将来的工作中,咱们也心愿也帮忙社区一直演进,帮忙到更多的开发者。具体来说,前面在平台中打算减少的性能包含:

  • 反对定时工作反对动静扩缩容
  • 提供性能监控控制台
  • 反对规模化 K8s 集群中多数据集的全生命周期治理
  • 反对对缓存数据和缓存元数据的动静删减

致谢

感激阿里云 JindoFS 团队的辰山、扬礼和容器团队的车漾在整个方案设计和优化过程中的微小帮忙,对生产过程中的需要给予定制化的反对,对遇到的各种问题进行疾速的帮忙和解决。

相干链接

[1] Fluid:_https://github.com/fluid-cloudnative/fluid_

[2] JindoFS:_ https://github.com/aliyun/alibabacloud-jindodata_

如果你对 Fluid 我的项目感兴趣,欢送点击下方链接理解更多:

https://github.com/fluid-cloudnative/fluid

「Kubernetes 难点攻破系列:容器长久化存储训练营」启动倒计时!

9 月 22-24 日 3 天工夫集中冲破,从容器长久化存储开始,关上 Kubernetes 难点攻破之旅。实现全副打卡工作,还有小米耳机、阿里云定制帽衫、精美周边等丰盛的训练营奖品等你来拿!

版权申明: 本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

正文完
 0