端到端自动驾驶数据闭环:分布式存储与数据编排平台落地实践
端到端自动驾驶研发这两年有多卷不用我多说了吧。所有头部的智驾供应商都在疯狂堆算力、堆数据、堆场景但大家慢慢发现一个尴尬的事实真正卡住迭代速度的往往不是算法而是数据这口“锅”自己转不动。车端每天回传几十TB数据训练集群那边嗷嗷待哺中间的数据清洗、标注、回放、仿真验证每一环都在排队等数据。这不是一个算力问题这是一个数据管道工程问题。我今年深度参与了一个类似的项目某头部智驾供应商在国内多个城市部署了上百台测试车每天产生原始数据量超过50TB总数据规模已经到PB级。他们要构建一条真正意义上的“端到端数据闭环”从车端采集到云端处理再到训练仿真和模型回灌要求每个环节的数据延迟用分钟级衡量而不是现在的“T1”甚至更慢。最终我们引入了分布式存储与数据编排平台把散落在各个站点、各个部门的孤岛数据全部串了起来。这篇文章我不打算讲太多厂商宣传稿里的东西就从实际操作和架构设计的角度拆解这套方案到底怎么落地以及过程中踩过的那些坑。1. 智驾“端到端”数据闭环为什么存储平台成了卡点很多人一听到“端到端”第一反应是模型结构从感知到规划一体化的那个大模型。但在工程落地的语境里端到端其实意味着另一层含义数据从产生到反哺模型的整条链路必须是无缝的、自动化的、低延迟的。前者是算法问题后者是基础设施问题。1.1 端到端研发范式对数据基础设施提出的新要求传统的自动驾驶研发流程是分段式的路测车队采集数据数据回传后落盘然后人工或半自动进行筛选和标注再把标注后的数据集通过网盘或者移动硬盘的方式“人肉搬运”给算法团队。这个过程慢到什么程度呢我见过不少团队从采集到数据真正进入训练需要一到两周时间。这个延迟在规则时代还能忍但在端到端时代完全不可接受。端到端模型的训练有多依赖数据简单说模型性能直接跟数据规模、数据质量、数据分布强相关。今天发现某个corner case明天就想把对应的数据片段加进去重训一版模型。这种快速迭代节奏下数据必须像流水一样流进训练集群而不是一桶一桶地拎过去。所以数据基础设施至少要满足三个新要求低延迟的数据流转从车端采集、云端预处理到训练集群读取最好控制在小时级甚至分钟级。跨地域的统一视图测试车分布在全国多个城市数据散落在不同站点算法团队在总部想随时访问任何一个站点的数据而不需要知道数据到底在哪个机房。弹性的资源编排训练任务、仿真任务、数据回放任务对存储的性能需求差异巨大存储系统必须能配合算力调度按需提供不同QoS的资源。这些需求传统的集中式NAS或者普通的对象存储方案都很难完美覆盖。这也是为什么头部智驾供应商开始把目光投向分布式存储加数据编排这个组合拳。1.2 传统方案在PB级数据流转中的“堵点”我接触过很多智驾公司他们的基础设施演进几乎都踩过同一条路径最开始用几台服务器搭个NFS数据量几个TB的时候没问题后来数据涨到几十TBNFS性能开始崩读写延迟不可控接着上了对象存储容量问题勉强解决但算法工程师抱怨数据读取太慢——因为对象存储的读时延和带宽跟本地POSIX文件系统差的不是一点半点。更头疼的是多站点问题。车端数据落在一个边缘机房训练集群在另一个机房中间怎么传输常见的做法是定期用硬盘快递或者写个脚本用rsync同步。这些土办法在小数据量下问题不大但数据规模上来之后会产生几个致命问题数据重复存储同一个数据文件在边缘存一份、总部存一份、备份再存一份存储成本成倍上升。数据版本混乱多站点同步经常出问题训练用到的数据跟最新采集的数据对不上。端到端延迟完全不可控哪份数据到了、哪份数据没到全靠人工盯出了问题排查半天。这些堵点直接影响的是模型迭代效率。算法团队把时间花在等数据和找数据上而不是花在调模型上。这也是为什么很多智驾团队算法工程师的画像越来越像数据工程师——他们不得不自己写各种数据搬运脚本。2. 从“存储”到“数据平台”AIMesh的架构思路拆解XSKY AIMesh这套东西本质上不是传统意义上的存储阵列也不是单纯的分布式文件系统而是一个面向AI数据流水线的数据编排平台。它的核心思路可以归纳成一句话把数据从物理存储位置中解放出来让数据流动像网络请求一样自然。2.1 数据编织跨站点统一数据视图先理解AIMesh最核心的架构概念数据编织。这个词听着玄乎其实说白了就是给分布在多个物理位置的存储集群建立一个统一的虚拟数据空间。用户算法工程师、训练任务看到的是一棵目录树所有数据都在这个目录树里不用关心数据到底存在哪个物理节点上。这个设计对智驾场景的价值我体会太深了。智驾供应商的数据天然是多地域分布的测试车在A城市采集第一跳数据落A城市的边缘节点部分原始数据要回传总部做深度处理处理后的训练集又要同步到GPU训练集群所在的数据中心。如果没有数据编织层算法工程师要记至少三个挂载点还要自己协调跨集群传输。有了统一视图之后这一切对上层透明了。从技术实现上看数据编织层需要一个全局元数据服务来管理数据的位置和状态信息。AIMesh在这块的实现做得比较聪明的地方在于它提供了多种数据访问协议包括NFS、SMB、S3这些主流接口。这意味着上层应用根本不需要做任何改动——训练框架该用NFS挂载就用NFS挂载标注工具该用S3就用S3底层数据却可以跨集群流动。这种协议兼容性比那种要求应用改用专有SDK的方案要实用得多。2.2 分层存储与自动编排性能与成本的平衡PB级数据的存储成本是个很现实的问题。全上NVMe SSD性能是够了但成本能把研发预算烧穿全上SATA HDD成本下来了但训练和仿真任务读到数据时性能完全没法看。AIMesh的分层存储策略本质上是在同一套数据空间内部自动实现数据在热、温、冷存储介质之间的流动。我在实际项目中看到的配置大概是这样的逻辑热数据层全闪存节点用于当前正在训练的模型相关数据、高频访问的标注结果。温数据层混合存储节点SSD缓存加HDD容量用于近期采集且尚未处理的原始数据。冷数据层大容量HDD或者纠删码池用于归档数据、历史版本数据、已经完成训练且不再频繁访问的数据。关键在于这个分层不是靠人工把数据往哪块拷而是平台根据数据访问频率、数据标签、任务优先级等信息自动调度的。平台内部维护了一套策略引擎管理员可以配置数据生命周期规则比如“连续30天未被访问的原始数据自动迁移至冷存储层”“接入标注系统的数据包自动复制到热存储层”。这套机制的实际收益在我们的试点项目中体现得非常直接整体存储成本相比全闪存方案节省了约60%而关键训练数据集的读取性能依旧维持在NVMe级别的体验。数据编排不是把存储变得复杂而是把成本和性能的权衡交给系统自动完成工程师只需要关心业务数据本身。2.3 数据编排链路建图与任务调度AIMesh的“编排”能力是我觉得它区别于一般分布式存储产品的最重要维度。它不只是一个存储池它可以通过数据编排能力把数据接入、转换、分发、回灌这些环节抽象成一条条可调度的流水线。举一个具体的场景。测试车采集到一段包含极端交通场景的原始数据旧流程是车端→边缘存储→定期回传→人工筛选→标注→训练。AIMesh的方式是边缘存储的原始数据一旦入库平台触发数据处理任务比如自动场景提取、打标签、压缩处理后的数据自动分发到训练集群可以访问的高性能存储池中同时把元数据同步到标注平台的任务队列里。这个过程在平台层面是怎么实现的核心是一套异步任务调度器和数据依赖关系管理器。每个数据任务可以声明自己依赖哪些数据集合、需要多少计算资源和吞吐带宽。调度器根据当前存储集群的健康状态、网络带宽占用、GPU集群的可用程度动态安排任务执行的时机和位置。这个设计带来的好处是数据链路不再是断断续续的接力赛而是一条自动化的传送带。实际效果上我们项目的数据接入到训练就绪时间从原来的以天为单位压缩到了小时级。注意这不是网络带宽提升带来的而是消除了大量人工等待和手工操作的中间环节。3. 核心功能拆解与关键参数实测概念说了不少落到操作层面AIMesh到底要怎么配、怎么用我基于自己在项目中的实操经验把几个核心功能点拆开讲讲。以下配置参数和测试数据都是我们在模拟项目X中实际验证过的值不同环境会有差异但思路和逻辑是通用的。3.1 多集群统一命名空间实测表现多集群统一命名空间是AIMesh最基础也最重要的功能。我们在三个物理站点各部署了一组存储集群然后纳入同一个命名空间管理。配置过程比我想象中简单主要步骤是在每个站点部署存储集群并配置基础存储池。在管理面创建AIMesh域把三个站点集群加入域。在域中定义全局目录结构比如/dataset/raw、/dataset/train、/dataset/sim这些顶层目录。为每个目录绑定物理存储池或对应站点的策略。完成之后测试结果整体符合预期同一目录树可以从任何一个站点挂载读写时延差异取决于物理链路距离。总部挂载访问边缘站点的数据跨互联网链路时实测单流写带宽在百兆级但多流并行传输可以轻松跑满物理带宽这个数据对跨站点场景来说是合格的。3.2 冷热分层策略与访问性能关于冷热分层AIMesh允许管理员为每个数据目录设置生命周期策略。我们一开始比较保守只设置了两个层热层全闪和温层混闪。跑了一段时间后发现历史训练数据超过三个月未访问在热层白白占着宝贵的SSD空间实在浪费于是加上了冷层配置。配置要点包括迁移条件我设置了“最后访问时间超过45天”“数据大小超过1GB”两个条件符合条件的数据会被标记为待迁移至冷层。迁移触发支持定时触发或容量水位触发。我建议用容量水位触发让系统在热层使用率达到80%时自动开始腾挪而不是固定每周几执行一次。这样更动态也更贴合真实使用场景。访问回拉策略如果冷层数据被读取可以按需回拉到热层。实操中我发现默认的“整文件回拉”策略比较浪费带宽如果文件很大比如一段十分钟的4D毫米波雷达数据建议开启按需读取模式让数据在读取过程中按块回拉。性能曲线我在生产环境观察到的数据热层随机读IOPS在4K块大小下大概能跑到几十万级别但这其实不太能反映真实AI负载。更有参考价值的是顺序大块读带宽全闪节点单客户端实测能到GB/s级完全不会卡训练数据的读取。3.3 数据编排任务的调度与监控AIMesh的编排任务本质上是一个常驻的数据工作流引擎。我在配置数据流水线时最常用的操作是定义数据接入任务监控某个车端回传目录一旦有新数据落地触发处理器。定义数据转换任务比如原始数据的场景片段化、降采样、压缩。定义数据分发任务处理完的数据分发到指定训练目录同时删除边缘侧不必要的副本。这个流程用任务模板加事件触发器就能串起来不需要写代码。但要说清楚一个坑任务调度器的并发度和存储集群性能之间的平衡。默认情况下系统会根据文件数量决定并发数但如果某个时刻回传文件特别多任务并发数会自动膨胀可能瞬时压垮边缘集群的带宽。我后来调整了任务组的并发上限并给每个任务设置了带宽限制才稳定住整个链路。监控面板这边AIMesh提供数据流量的可视化视图能看出每秒钟哪个环节处理了多少数据哪个环节积压严重。这个视图在排查数据链路延迟问题时是救命级的工具比对着日志找半天效率高太多了。3.4 数据治理、标签与合规回收智驾数据涉及的合规问题越来越严格AIMesh在数据治理方面也做了不少工作。我们比较关注的是数据加密、数据生命周期管理和敏感数据删除。加密AIMesh支持透明加密磁盘级别的数据加密对上层应用完全无感。我们开启了所有存储池的加密功能性能损耗实测不到5%可以接受。标签体系数据的业务属性比如采集时间、采集城市、对应车型版本、触发类型需要纳入统一标签体系。AIMesh的自定义元数据功能可以解决这个问题我们在数据写入时通过S3对象标签或者NFS扩展属性打上标签后续按标签检索和调度就很方便了。合规删除有些通过公开道路采集的数据涉及隐私合规要求到期自动删除。AIMesh支持数据过期策略可以做到到点自动打标记并物理删除这个功能一定要用上不要靠手动清。4. 落地实施的关键步骤与真实踩坑记录任何分布式存储平台落地都是个大工程。我在这里只讲我认为最容易出问题的几个环节以及实际踩过之后的解决方案。4.1 试点部署先搭一张最小闭环别急着全量搬迁我在这个项目里最庆幸的一个决策就是先做了一个最小化闭环试点。具体做法是选择一条完整但数据量可控的数据链路——比如单一车队的回传数据、单一GPU集群的训练读取——一次性走通AIMesh的部署、接入、分层、分发、训练全流程。这个试点周期大概花了三周验证了几个关键指标端到端数据延迟、跨集群吞吐、任务调度稳定性。试点的价值太大了。全量铺开之前就暴露出好几个问题比如跨站点传输的链路抖动、某些NFS挂载参数在特定内核版本下的兼容性问题以及数据回传脚本在高并发下的失败率。这些问题如果在生产环境全量上了之后再发现光回滚就能折腾一两周。4.2 性能调优的三个核心维度部署完成之后性能调优是重头戏。我们的实战经验浓缩成三个方向第一网络拓扑是最大的性能瓶颈。存储性能再强网络不行全是白搭。我们最初边缘站点回传数据走的是普通千兆公网单站点回传速率只有100MB/s左右根本喂不饱后续处理流程。优化方式是在边缘站点与总部之间建立专线并调整了跨站点传输协议参数。这一步做完数据传输带宽直接提升了接近一个数量级。第二客户端挂载参数的微调。训练集群的GPU节点通过NFS挂载数据目录默认的挂载参数并不适合高并发AI训练场景。需要调整的参数包括rsize和wsize增大到1MB1048576减少小包通信的RTT消耗。noatime关闭文件访问时间更新减少元数据写入。调整NFS客户端并发连接数限制避免单节点多GPU任务把连接数打满。第三数据分片与任务并发度的平衡。AIMesh对超大文件比如几十GB的单段路程数据有自动分片能力但如果分片过大任务调度器处理单个文件的时间会变长分片过小又会增加元数据和调度开销。我们最终把分片阈值调到了1GB这个值在大多数训练任务和仿真任务下表现比较均衡。4.3 常见问题排查速查表这部分是大量排障之后沉淀的经验。我会按症状、可能原因、解决手段的方式列一下症状可能原因排查思路与解决手段某个站点数据呈现延迟上涨跨站点链路出现丢包或拥塞检查专线状态、Iperf测试带宽、确认QoS策略是否被其他大流量任务抢占训练任务读取数据等待时间变长数据冷热分层后所需数据在慢速层确认数据访问路径是否触发热层回拉必要时对热读目录配置预取规则数据流水线任务堆积不执行任务调度器并发上限被撑爆检查任务队列深度、调大任务并发上限或拆分任务组数据跨站点一致性告警同一文件被多个站点同时写入确认业务写入模式AIMesh对多写并发支持有限应按目录划分写入站点容量分布不均某个池快满了冷热迁移策略未触发或配置过期检查生命周期策略状态、手动触发一次迁移并观察日志输出这个速查表基本覆盖了我们在模拟项目X运行中遇到的90%问题。真正难排查的往往是多个因素叠加的情况比如网络抖动加上任务并发过高同时发生这时候监控面板的作用就体现出来了。5. 数据基础设施升级背后的研发范式变化最后我想聊一些更宏观的感受。数据基础设施升级不只是把存储换新这么简单它实际上改变了整个智驾研发团队的协作模式和工作节奏。5.1 从“数据搬运工”到“数据工程师”在过去很多算法团队会配一个专门的“数据集管理员”每天的工作就是帮算法工程师做数据拷贝、格式转换、目录整理。这活儿的复杂度随着数据规模增长越来越重而且极其容易出错。有了数据编排平台之后最明显的变化是数据集管理员这个角色不存在了或者说变成了平台管理员。数据处理流程跑在自动化流水线上算法工程师提交一个数据集创建请求平台按规则自动完成数据筛选、清洗、分发。研发时间上的节省很难精确量化但我可以负责任地说相当大一部分算法工程师的工作效率提升并不是因为模型代码写得更快而是因为数据到手的时间缩短了。5.2 多团队协同与数据资产化另一个看不见的价值是组织协同层面的。数据不再是某个团队私有的“硬盘里的东西”而是成为全公司统一管理的数据资产。标注团队、训练团队、仿真团队、路测团队大家操作的是同一个数据空间看的是同一份元数据。版本的混乱、数据的重复加工这些问题从机制上就被规避掉了。我举个具体例子。以前仿真团队想找“去年Q3采集的、包含夜间逆光场景的连续路段数据”得通过邮件向数据管理团队提需求然后等人肉检索出来打包发过去整个过程几天到一周不等。现在通过标签检索平台内一条查询指令就能定位到所有符合条件的数据文件还可以直接在数据空间内创建一个虚拟数据集供仿真任务挂载使用。这种效率和体验的差异用过之后就回不去了。回顾整个项目落地过程我个人最大的体会是智驾研发的竞争表面上拼的是算法和算力底层拼的其实是数据处理基础设施的效率。数据闭环的口号喊了好多年但真正闭环的关键不是打通某一个环节而是让整条链路上的存储、计算、调度能够像一个整体一样透明地协同工作。AIMesh这个方案给我的印象是它确实朝这个方向迈出了扎实的一步。最后分享一个实用小技巧无论采用什么方案在做数据平台规划时一定要把数据增长速率估算得激进一些。智驾的数据增长速度往往是线性预期的两到三倍。存储架构的扩展性设计在规划期就要留足余量否则半年后的扩容迁移会让你付出比当时节约的成本多得多的代价。