3. 模型部署基础
在自动驾驶系统中,模型从实验室走向车端,并不是简单地把训练好的权重文件复制到计算平台。训练与推理在目标、计算模式、资源约束和工程要求上存在本质差异。理解这些差异,是构建可靠部署链路的第一步。本节将围绕训练与推理差异、模型格式、推理引擎、硬件加速器以及部署流程与工具链展开,帮助读者建立完整的部署基础认知。
一、训练与推理的核心差异
训练阶段的目标是让模型从数据中学习参数,通常运行在数据中心的大算力 GPU 集群上,关注收敛速度、精度上限和实验迭代效率。推理阶段的目标是用已训练好的参数对新输入快速给出结果,运行在车端嵌入式平台或边缘设备上,关注延迟、吞吐、功耗、内存占用和确定性。
从计算图角度看,训练需要前向传播、损失计算、反向传播和参数更新,计算量大且包含大量动态行为;推理只需要前向传播,计算图可以被固化、剪枝、量化和算子融合。训练时 batch size 往往较大,而推理时 batch size 通常为 1 或很小,且要求稳定的帧率。训练可以容忍一定的数值波动,推理则要求结果可复现、可验证,尤其在功能安全相关场景中。
二、模型格式:从训练框架到部署中间表示
不同训练框架产出的模型格式各不相同。PyTorch 常用 .pt 或 .pth,TensorFlow 常用 SavedModel 或 .pb,Keras 使用 .h5。这些格式偏向训练生态,包含大量训练相关元信息,直接用于车端推理往往不够高效。
因此,部署链路中通常需要将模型转换为中间表示或推理专用格式。常见的有 ONNX、TensorRT Engine、OpenVINO IR、TFLite、NCNN、MNN 等。ONNX 作为开放交换格式,承担了“框架间桥梁”的角色;TensorRT Engine 则针对 NVIDIA 平台做了深度优化,包含层融合、精度校准和内核自动调优结果。
# 以 PyTorch 导出 ONNX 为例
torch.onnx.export(
model,
dummy_input,
"detector.onnx",
opset_version=13,
input_names=["images"],
output_names=["boxes", "scores"],
dynamic_axes={"images": {0: "batch"}}
)
模型格式转换不是无损的。算子支持度、动态 shape、控制流和自定义算子都可能成为转换失败或精度下降的原因。部署前必须做逐层比对和端到端精度验证。
三、推理引擎与硬件加速器
推理引擎负责加载模型、管理内存、调度算子并在目标硬件上执行。它通常包含图优化器、算子库、运行时和硬件后端。常见推理引擎包括 TensorRT、ONNX Runtime、OpenVINO、TFLite、NCNN、MNN 和 TVM。选择引擎时,需要综合考虑目标芯片支持、算子覆盖、量化能力、社区活跃度和车规认证情况。
硬件加速器方面,自动驾驶常见的有 NVIDIA GPU、地平线征程、华为昇腾、黑芝麻华山、TI TDA4、高通 Snapdragon Ride 等。不同加速器有各自的编程模型、内存层级和算子限制。例如,TensorRT 在 NVIDIA GPU 上可充分发挥 INT8 和 DLA 能力;地平线平台则依赖其工具链将模型编译为 BPU 可执行文件。
四、部署流程与工具链概览
一个典型的自动驾驶模型部署流程包括:模型导出、格式转换、图优化与量化、编译部署、精度验证和上车测试。每一步都有对应的工具链支撑。
| 阶段 | 主要任务 | 常用工具 | 关键输出 |
|---|---|---|---|
| 模型导出 | 从训练框架导出静态图 | torch.onnx.export、tf2onnx | ONNX 模型 |
| 格式转换 | 转换为目标推理格式 | TensorRT、OpenVINO、MNN | Engine / IR / .mnn |
| 图优化与量化 | 层融合、剪枝、INT8 校准 | TensorRT、NNCF、AIMET | 优化后模型 |
| 编译部署 | 生成车端可执行文件 | 厂商工具链、CMake | 可执行包 |
| 精度验证 | 逐层比对与端到端评测 | ONNX Runtime、自定义脚本 | 精度报告 |
| 上车测试 | 实车数据回放与路测 | ROS、数据回放平台 | 测试报告 |
五、常见误区与复盘
误区一:只关注模型精度,忽略部署约束。训练集上的高精度不代表车端可运行。延迟、内存和功耗往往才是决定能否上车的硬门槛。
误区二:认为格式转换是无损的。算子不支持、动态 shape 和量化误差都可能导致精度下降,必须做逐层和端到端验证。
误区三:忽略硬件特性。不同加速器对算子、内存对齐和量化方式的支持差异很大,同一模型在不同平台上的表现可能截然不同。
建议在项目早期就建立“训练—导出—转换—验证”的自动化流水线,把部署约束前置到模型设计阶段。例如,优先选择目标推理引擎支持的算子,控制动态 shape 的使用,并在训练时加入量化感知训练,可以显著降低后期部署风险。
总结来看,模型部署基础可以概括为:理解训练与推理的差异,选择合适的模型格式,匹配目标推理引擎和硬件加速器,并按照标准流程完成导出、转换、优化、验证和上车测试。只有把这条链路打通,模型才能真正在自动驾驶系统中稳定运行。