毫末智行 Fluid 实践:云原生 AI 让汽车变得“更聪明”

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 毫末机器学习训练场景对于数据读取有较高的性能要求,且对于元数据和数据缓存的精细化控制要求较高, 通过 Fluid + JindoRuntime 的缓存能力可以灵活地缓存 OSS 训练文件进行元数据和数据,提供高效的元数据和数据访问性能。基于这种方案,我们可以实现精细化控制缓存的内容,提高生产资源利用率,不仅有效缓解了 OSS 带宽的压力,也大大提高了训练效率。

作者介绍:

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

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


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



自动驾驶商业应用正驶入快车道


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


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


毫末智行的快速发展也体现着更高级别的智能驾驶将在更广泛的场景中发挥作用,自动驾驶的商业应用正在驶入快车道。


1.jpeg



传统机器学习训练效能遭遇瓶颈


随着机器学习在自动驾驶业务场景中的广泛使用,机器学习平台扮演了非常核心的角色。该平台采用了存储与计算分离的架构,使得计算资源得以与存储资源解耦, 从而实现了灵活的资源配比以及便捷的存储扩展,并且降低了存储资金和运维成本。

2.png


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


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.png


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 的方式推理和训练,对比训练时长,发现性能带来了显示提升:

4.png


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


5.png


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


6.png


模型使用 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 难点攻破之旅。完成全部打卡任务,还有小米耳机、阿里云定制帽衫、精美周边等丰富的训练营奖品等你来拿!


lALPDiCpwMvStuDNAyDNAyA_800_800.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
监控 Kubernetes Cloud Native
云原生之旅:从理论到实践的探索
【10月更文挑战第34天】本文将引导你走进云原生的世界,从基础概念出发,逐步深入到实际的应用部署。我们将探讨云原生技术如何改变现代软件开发和运维的方式,并展示通过一个简单应用的部署过程来具体理解服务编排、容器化以及自动化管理的实践意义。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的视角和知识。
18 3
|
1天前
|
运维 Cloud Native 安全
云原生技术在现代软件开发中的实践与挑战####
【10月更文挑战第21天】 本文将深入探讨云原生技术在现代软件开发中的应用,分析其带来的优势及面临的挑战。通过案例分析和数据支持,揭示云原生化转型的关键因素,并展望未来发展趋势。 ####
12 7
|
1天前
|
Cloud Native 持续交付 云计算
云原生技术入门与实践
【10月更文挑战第37天】本文旨在为初学者提供云原生技术的基础知识和实践指南。我们将从云原生的概念出发,探讨其在现代软件开发中的重要性,并介绍相关的核心技术。通过实际的代码示例,我们展示了如何在云平台上部署和管理应用,以及如何利用云原生架构提高系统的可伸缩性、弹性和可靠性。无论你是云原生领域的新手,还是希望深化理解的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
|
3天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【10月更文挑战第35天】云原生技术,作为云计算的进阶形态,正引领着软件开发和运维的新潮流。本文将深入探讨云原生技术的核心理念、关键技术组件以及在实际项目中的应用案例,帮助读者理解如何利用云原生技术优化应用架构,提高开发效率和系统稳定性。我们将从容器化、微服务、持续集成/持续部署(CI/CD)等角度出发,结合实际代码示例,展现云原生技术的强大能力。
|
1天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
6 2
|
1天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
|
2天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
2天前
|
Cloud Native 持续交付 云计算
云原生之旅:从理论到实践
【10月更文挑战第36天】本文旨在探索云原生技术的核心概念、应用及其对现代软件开发的影响。通过深入浅出的方式,我们将一起了解云原生的基础知识,探讨其在企业中的应用,并通过具体案例分析云原生如何助力企业实现敏捷和创新。文章不仅为初学者提供了一个云原生技术的全景视图,同时也为有经验的开发者和架构师提供了深入的见解和策略。
12 1
|
5天前
|
Cloud Native API 云计算
云原生架构的深度探索与实践####
本文深入探讨了云原生架构的核心概念、技术特点及其在现代软件开发中的应用实践。通过分析云原生架构如何促进企业数字化转型,提升业务敏捷性与可扩展性,本文旨在为读者提供一个全面而深入的理解框架。我们将从云原生的定义出发,逐步深入到其关键技术组件、最佳实践案例及面临的挑战与解决方案,为开发者和企业决策者提供宝贵的参考与启示。 ####
|
5天前
|
Cloud Native 持续交付 云计算
云原生时代的技术革新与实践探索
【10月更文挑战第33天】在云计算的浪潮下,云原生技术如雨后春笋般涌现。本文将深入浅出地介绍云原生的基本概念、优势及其在现代IT架构中的应用,并探讨如何通过云原生技术推动企业的数字化转型,最后通过实际案例分析,展示云原生技术的强大潜力和广阔前景。