1. 课程导入
自动驾驶研发不是一次性的模型训练,而是一条持续迭代的工程链路:数据采集、标注、训练、仿真、回放、评测、上车验证,每一步都会产生大量实验。如果实验管理混乱,团队很快会遇到三个问题:结果无法复现、版本无法追溯、算力与人力被重复消耗。本课程的目标,是把"做实验"从个人经验行为,升级为可管理、可复现、可审计的工程能力。
一、学习目标:从"能跑通"到"可复现"
本课程围绕四个能力层次展开。第一层是实验可记录:每次训练的数据版本、代码提交、超参数、环境依赖都被结构化保存。第二层是实验可复现:任何人拿到实验记录,都能在相同或等价环境中重建结果。第三层是实验可比较:不同实验之间的指标、数据、模型差异能被自动对齐和对比。第四层是实验可治理:实验资产可检索、可复用、可审计,支撑团队级协作与合规要求。
二、核心概念:实验、运行、产物与血缘
在自动驾驶场景中,一个"实验"通常不是单次运行,而是一组相关运行的集合。理解以下概念是后续所有工程实践的基础:
- Experiment(实验):围绕一个假设或目标组织的运行集合,例如"提升雨天场景下的车道线检测召回率"。
- Run(运行):一次具体的训练或评测执行,拥有唯一 ID、开始时间、结束状态。
- Artifact(产物):运行产生的模型权重、日志、指标文件、可视化结果、ONNX 导出件等。
- Lineage(血缘):数据版本、代码提交、配置、运行、产物之间的有向依赖关系。
- Environment(环境):CUDA、PyTorch、驱动、容器镜像、随机种子等影响结果的可变因素。
其中,血缘关系是自动驾驶实验管理区别于普通机器学习实验的关键。因为自动驾驶的数据集往往经过多轮筛选、场景挖掘和标注修订,一个模型权重背后可能对应着数十个数据版本和配置变更。
三、整体框架:五层实验管理架构
下图展示了本课程贯穿始终的整体框架。自下而上分别是基础设施层、数据与代码层、实验执行层、追踪记录层和协作治理层。每一层都有明确的职责边界,上层依赖下层的稳定输出。
需要特别强调的是追踪记录层。它位于中间,向下采集环境与数据版本,向上支撑治理与协作。没有这一层,实验管理就退化为"文件夹加命名规范",无法应对自动驾驶动辄数百次训练迭代的规模。
四、方法流程:一次可复现实验的标准动作
下面给出一次可复现训练实验的最小流程。它看起来简单,但每一步都对应着具体的工程约束。
- 冻结输入:确定数据集版本号、代码 commit、配置文件哈希。
- 声明环境:记录容器镜像 tag、CUDA 版本、关键依赖版本、随机种子。
- 启动运行:由调度系统分配资源,生成唯一 run_id,写入追踪系统。
- 记录过程:训练指标、损失曲线、学习率、显存占用按步或按 epoch 上报。
- 登记产物:模型权重、日志、评测报告、可视化结果关联到 run_id。
- 验证复现:在另一环境或另一时间重跑,对比关键指标是否在容差范围内。
其中第 6 步是很多团队缺失的环节。复现不是"再跑一次看看",而是有明确容差标准的验证动作。例如感知模型 mAP 波动不超过 0.3%,或规划模块碰撞率差异不超过 0.1%。
五、案例场景:雨天车道线实验的复现困境
假设团队要验证"雨天场景下车道线检测召回率提升"这一假设。第一次实验由工程师 A 完成,mAP 从 0.72 提升到 0.78。两周后工程师 B 尝试复现,结果只有 0.74。排查发现三个差异:
| 差异项 | 工程师 A | 工程师 B | 影响 |
|---|---|---|---|
| 数据集版本 | rain_v3(含新增 1200 帧) | rain_v2 | 训练样本分布不同 |
| 随机种子 | seed=42 | 未固定 | 初始化与增强顺序不同 |
| 图像增强 | 开启雨天模拟增强 | 默认关闭 | 域适应能力差异 |
这个案例说明:复现失败往往不是模型问题,而是元数据缺失。如果实验追踪系统自动记录了数据版本、种子和增强配置,工程师 B 可以在几分钟内定位差异,而不是花两天做消融排查。
六、常见误区与复盘
在课程开始前,先明确几个高频误区,避免后续走弯路:
- 误区一:把日志当实验管理。日志是文本流,无法结构化查询和对比,不能替代元数据系统。
- 误区二:只记录成功实验。失败实验同样有价值,尤其是失败原因和对应配置,能避免团队重复踩坑。
- 误区三:追求工具而忽略规范。再好的平台,如果字段定义混乱、命名随意,也无法产出可复现结果。
- 误区四:复现等于完全一致。GPU 非确定性、浮点累加顺序等因素会导致微小差异,关键是定义合理容差。
本课程后续章节将沿着"概念—工具—实操—治理"的路线推进:先建立元数据与血缘的认知,再动手搭建追踪系统,随后进入数据版本管理、训练复现、仿真评测和团队协作等专题。你现在需要记住的核心只有一句话:可复现不是结果,而是被工程化保障的过程。
# 一次可复现实验的最小元数据示例
experiment: rain_lane_detection
run_id: run-20240612-0831-a7f3
dataset_version: rain_v3
code_commit: 9c2f1ab
config_hash: 4d8e0f2c
seed: 42
image: registry.local/perception:cu121-torch2.2
metrics:
mAP: 0.781
recall_rain: 0.803
artifacts:
- s3://models/rain_lane_detection/run-20240612-0831-a7f3/best.pt
- s3://reports/rain_lane_detection/run-20240612-0831-a7f3/eval.json
当这样的记录成为团队默认动作时,实验管理才真正落地。接下来,我们将从实验元数据模型开始,逐步构建这套能力。