简介:面向汽车智能驾驶与IT基础架构规划人员的一份技术方案文档,聚焦先进驾驶辅助系统(ADAS)研发基础设施的构建。文档从汽车行业数字化转型切入,梳理全球ADAS发展状况与市场规模,剖析ADAS研发中面临的高带宽并发数据流、数据长期保存归档、源数据快速导入、数据预处理与元数据管理、海量存储以及与时间赛跑的高试错成本等六大挑战,进而给出完整的解决方案,涵盖数据摄取、数据湖分层存储、备份容灾、高性能计算和仿真测试平台,并介绍了整体监控运维体系。资源为单个PDF文件,大小4.58MB,已有149人学习。对于正在规划或优化自动驾驶研发数据平台的工程师与架构师,可从中获得系统性的方案设计思路与组件选型参考,有助于构建从路测采集、数据归档到深度学习训练与仿真验证的闭环基础设施。
1. ADAS研发最贵的不是路测车,是接住路测数据的平台
ADAS研发进入量产阶段,算法模型半年迭代一版,路测数据的回传、归档、回放链路一旦设计错了,之后每一轮训练都要替当初的选型还债。Dell EMC这份方案里反复出现几组硬指标:中等规模团队的归档规模50PB量级,峰值并发带宽800GB/s,计算集群12000核。到了这个规模,ADAS研发基础架构不再是加几台备份服务器能覆盖的事,必须从数据链路角度整体设计。
表面看是存储问题,实际是采集吞吐、数据湖分层、仿真回放带宽、GPU训练喂数四个环节的串行链路。很多人问ADAS研发基础架构包括哪些环节,答案不是单一产品,而是一条从路测车到数据湖再到仿真训练流水线的通路。内容适合正在搭ADAS路测数据平台、或在ADAS仿真与深度学习场景里被存储和网络吞吐卡住的人。
2. ADAS数据链路分层:从车载Logger到归档数据湖的流程拆分
2.1 车载采集端:多传感器并发写入的第一道坎
ADAS路测车上的传感器组合,在方案里写得很明确:RADAR、Camera、Lidar、Interior Camera、ECU,之外还有Ultrasonic。车内Logger把这些传感器的输出汇成一到两路10Gbit/sec以太网流,写入车规级Rugged Server。这里最容易犯的错是把车端存储按通用NAS来选型——车规设备要扛振动、宽温和断电,真正要看的指标是SSD持续写入吞吐和掉电保护能力,而不是随机读性能。
另一个经常被低估的是传感器时钟对齐。Camera和Lidar的时间戳如果不在采集端统一,后面打标签和仿真回放时,一帧图像和一帧点云错开几十毫秒,整个数据集就废了。所以车载Logger这一层,必须把多传感器时间同步结果和粗粒度场景标记(车辆ID、GPS路径、启停时间)直接写进原始数据包头,而不是依赖后处理去猜。
2.2 数据导入与预处理:解压、解码、打标签的Ingest流水线
路测车回库后,可移动存储介质通过CopyStation快速导入数据中心,避免在弱网环境下硬传几百GB文件。Data Ingestion Service接收后先做解压缩和解码,把厂商私有格式转成统一编码,再交给Data Management Service登记元数据。这一步放在Ingest Station集群上执行,每个节点配高吞吐网卡和本地NVMe暂存区,而不是把数据直接打向最终的数据湖,否则写入放大和碎片化会拖垮归档层。
# 并行度与校验分离的导入脚本(常见做法) CAMPAIGN="2024-Q3-urban-night" SOURCE="ingest-station-01:/srv/ingest/${CAMPAIGN}" DEST="data-lake:/ifs/adas/raw/${CAMPAIGN}" # --files-from 管文件清单,--bwlimit=0 表示不限制带宽 # PB级数据不要用 rsync --checksum,完整性校验丢给下游单独跑 rsync -a --partial --bwlimit=0 \ --timeout=300 \ --files-from="filelist_${CAMPAIGN}.txt" \ "${SOURCE}" "${DEST}"这段脚本的逻辑是:用文件清单控制导入范围,rsync断点续传保证几TB的训练包传一半断了不用重来。带宽不限制,是因为Ingest窗口通常安排在夜间,白天给仿真和训练让路。MD5校验我一般不在rsync里做,全量校验的耗时和IO消耗在PB级规模下不可接受,改成下游对抽样文件做完整性校验更实际。
2.3 数据分级存储:Hot、Warm、Cold三层与Auto-Tiering
数据接进数据湖后,如果都留在高性能层,成本会直接失控。方案里的Data Lake做了Hot和Cold自动分层,数据管理服务定期把超过访问周期的冷数据迁到高密度存储。分层核心依据不是文件年龄,而是最近访问时间和训练集引用频率:
| 数据层级 | 访问特征 | 介质与策略 | 典型场景 |
|---|---|---|---|
| Hot | 多训练任务并发读 | NVMe/SSD、双副本 | 当前迭代训练集 |
| Warm | 数周内可能重建 | HDD RAID、压缩存储 | 采样分析与回归测试 |
| Cold | 事故溯源、法规审计 | 高密度HDD或磁带 | 长期归档、异地复制 |
Auto-Tiering的参数要按数据吞吐特征调。ADAS原始数据是大文件顺序读,不是数据库日志那种随机写,所以分层迁移阈值建议按「最近访问时间+文件大小」双条件判断;只按修改时间迁移,会把正在反复读取的旧采集文件误判成冷数据。
3. 50PB数据湖与Spine-Leaf组网:存储选型与VLT配置落地
3.1 数据湖选型:HDFS/NFS/SMB三协议并存的原因
方案里的Data Lake对外提供HDFS、NFS、SMB三种协议,这是ADAS研发团队构成的直接映射:深度学习训练框架走HDFS,仿真平台依赖NFS的POSIX语义,Windows端的标定和标注工具链走SMB。多协议并存不是功能堆砌,而是避免数据在多份拷贝之间反复转格式——转换在PB级规模下意味着额外存储和迁移时间的双重浪费。
选型上要说服自己的不是单机性能,而是扩展边界。50PB规模对应700+台设备、2000U以上机柜空间、60+个机柜。横向扩展存储的节点数、目录结构和配额管理都要提前规划。我一般会在立项阶段定死三个数字:单目录最大文件数、并发客户端数、元数据操作每秒请求数,这三个指标决定数据湖能支撑多大的团队规模而不出现「打开目录卡死」。
| 网络层级 | 设备选型 | 端口特征 | 职责 |
|---|---|---|---|
| Spine | Z9100-ON 等 | 100G QSFP28 高密度 | 跨Leaf无阻塞转发 |
| Leaf/接入 | S4048-ON | 48×10G SFP+ 为主,40G上行 | 服务器接入、VLT双归 |
| 汇聚/存储接入 | S6100-ON | 40G/100G 混配 | 大流量仿真与存储节点接入 |
3.2 40G/100G Spine-Leaf组网与VLT配置
ADAS场景的流量模型是南北向和东西向并存:GPU节点从数据湖拉训练集,存储节点之间做数据迁移,仿真集群回放路测数据。传统三层网络收敛比余量不够,Spine-Leaf扁平化之后,Leaf直接接入计算和存储节点,Spine把全部Leaf连成一张低收敛比交换矩阵。方案拓扑里能看到明确的VLT域规划(VLT Domain 10到28),接入层用S4048-ON这类设备,核心Spine用Z9100-ON做100G互联。
VLT解决的是双归接入的环路和链路利用率问题,配置时最关键是保证Discovery、Keepalive、Backhaul三条链路状态一致:
# Dell OS10 上 VLT 域的典型配置参数 configure terminal vlt-domain 10 discovery-interface ethernet 1/1/53 keepalive destination 10.0.0.2 source 10.0.0.1 primary-priority 1 backhaul-interface port-channel 128 interface port-channel 128 description backhaul-to-peer no switchport ip address 192.168.10.1/30说明一下意图。discovery-interface是VLT域的协商通道,两台Leaf交换机通过它确认彼此的VLT Domain ID和角色;keepalive是心跳,用独立IP段承接,避免业务流量抖动时误判;backhaul是把两条40G互联链路绑成port-channel,承接跨机箱转发。踩坑最多的是keepalive和discovery混用同一条链路,业务流量拥塞时心跳超时导致VLT域脑裂,Leaf同时向双Spine转发,出现MAC漂移。
3.3 数据保护与异地容灾:备份、复制与同步策略
数据保护在ADAS场景有两层含义。一是防误删和恶意加密的备份,方案里用集成备份设备对数据湖做定期快照;二是防站点级故障的复制,Off-site Replication和Geo-Replication分别覆盖同城和异地容灾。路测数据的不可再生性决定了容灾不是可选项——一段事故场景路测视频丢失的成本远高于存储硬件本身。
复制策略建议按数据集打标。正在标注的Hot数据做同步复制或短周期异步复制;已冷归档的历史数据做长周期复制或异地单副本。数据保护窗口要跟仿真作业调度表错开,避免备份流量和训练集读取在同一时段抢占带宽。方案把备份、归档、复制的流量规划在管理平面,业务网络和运维网络隔离越干净,高峰期的延迟抖动越可控。
4. HiL/SiL仿真与深度学习训练:算力池化的调度参数
4.1 HiL/SiL测试闭环与数字双胞胎
ADAS测试不只是路测。方案把测试分成SiL(Software in the Loop)和HiL(Hardware in the Loop)两类:SiL在纯软件环境跑算法,HiL把真实ECU接进测试单元,Sensors数据流以实时方式注入R/T ECU。HiL对存储的要求是低延迟随机读——回放路测数据不能有卡顿,否则ECU响应时序失真,测试结论没有意义,所以HiL Test Cells要单独规划带宽,不与训练集读取混在同一个存储池。
方案里反复出现的数字双胞胎,是把物理测试车的传感器配置、总线拓扑和标定参数在仿真环境建模。新感知模型先在数字模型车上跑影子模式,用同一段路测数据做回归对比,不占用实车资源。这样一辆测试车的百万公里路测数据,可以被多路仿真任务并行回放,等效里程成倍放大。
4.2 深度学习训练集群的Slurm调度参数
12000核的算力池要同时喂给HPC/SiL仿真、深度学习训练和数据科学作业,混部调度是必然选择。常见的做法是用Slurm分区加QOS组合:GPU节点放进独立分区,HiL回放作业用QOS限制存储带宽上限,避免大流量回放把训练的数据读取打到几百MB/s以下。训练作业提交脚本的几个关键参数如下:
# 4节点、每节点8卡的ADAS感知训练作业 #!/bin/bash #SBATCH --job-name=adas-yolo-train #SBATCH --partition=ml-gpu #SBATCH --nodes=4 #SBATCH --ntasks-per-node=1 #SBATCH --gres=gpu:8 #SBATCH --cpus-per-task=32 #SBATCH --exclusive srun --cpu-bind=none python -u train.py \ --data configs/adas_camera.yaml \ --batch-size 256 \ --data-loader-workers 16 \ --cache-raw-data关键参数是 --exclusive 和 --cpus-per-task。--exclusive 保证节点不被多个小作业混跑,否则显存和CPU争抢会让训练时间不可控;--cpus-per-task=32 是给数据加载线程留足CPU,否则GPU吃不满。ADAS数据集里一张1920×1080相机图解码后约6MB,8卡节点每步要喂256张图,数据加载瓶颈往往比GPU算力更早出现。--cache-raw-data 把常用场景原始数据放页面缓存,减少存储侧重复读。
4.3 单测路车数据量估算与容量规划
| 传感器配置 | 单路原始带宽 | 1小时数据量(压缩后) |
|---|---|---|
| 8路1.2MP相机@30fps | 350-500MB/s | 1.0-1.5TB |
| 64线Lidar | 70-100MB/s | 0.2-0.35TB |
| RADAR+超声波+CAN总线 | 20-50MB/s | 0.1-0.18TB |
按常见配置估算,实际数据量取决于编码格式、分辨率和压缩率。单台测试车一天跑8小时,原始数据就是10TB量级,100台车一个月接近30PB。这正是方案里数据分级和历史归档不是优化项而是必选项的原因。容量规划时用Hot数据有损压缩、Cold数据无损归档的双轨策略,能在保证训练可用的前提下把存储成本压下一个数量级。
5. 数据打标签、元数据查询和监控排错的实用技巧
5.1 元数据模型:打标签要可统计
打标签阶段最容易失控的不是标注质量,而是标签体系不可统计。元数据管理服务应在数据进入数据湖时登记车辆ID、GPS轨迹、天气、场景类型、传感器时间戳,标注结果再以增量方式回写。按场景统计数据集分布应该只是一行SQL:
-- 按场景和天气统计可用数据量,指导训练集采样 SELECT scene_type, weather, COUNT(*) AS clip_count FROM dataset_metadata WHERE project = 'highway-l3' AND label_status = 'verified' AND capture_date BETWEEN '2024-01-01' AND '2024-06-30' GROUP BY scene_type, weather ORDER BY clip_count DESC;查询结果直接暴露数据分布缺陷:雨天夜晚样本只有几十条,模型在这种工况下的表现就可以预期地差。把元数据设计成可统计的维度表,比维护一堆标注文件和目录命名规范可靠得多。
5.2 SNMP监控与存储告警阈值
方案里的一体化监控运维平台通过SNMP统一采集存储、网络和计算设备状态。ADAS基础架构要盯的不是「设备挂了」这种故障,而是性能劣化趋势——数据湖元数据服务响应变慢、Spine端口丢包率上升、冷数据迁移队列积压,这些问题通常比训练任务报错早几个小时出现。
# 用 snmpwalk 拉取设备健康状态(net-snmp) snmpwalk -v2c -c adas-ro -t 5 -r 2 10.20.0.1 \ .1.3.6.1.4.1.674.12100-t 和 -r 分别是超时秒数和重试次数。生产环境建议用SNMP v3替代v2c的明文community。告警阈值按存储池容量85%、CPU五日移动均值、链路丢包率0.1%三条线设置,告警统一进监控平台,而不是散落在各自的邮件列表。
5.3 带宽验证与VLT排错:把fio和iperf3用对
方案交付后第一件事不是跑算法,而是验证存储带宽和网络连通性。存储侧用fio做顺序读压测:
# 64GB文件、16并发、1MB块顺序读 fio --name=seqread --rw=read --size=64g --numjobs=16 \ --bs=1m --direct=1 --group_reporting --runtime=120网络侧用iperf3双向打流,重点看Spine-Leaf链路的线速保持能力。如果fio吞吐低于预期的80%,先用iperf3排除网络因素,再看存储节点的CPU和网卡中断绑定。VLT域排错从show vlt开始,确认域状态、peer链路和心跳都正常,再核对backhaul的port-channel两侧成员是否一致——VLT配置不一致时,典型现象就是单条链路流量冲到100%。
本文还有配套的精品资源,点击获取