第8章:自动驾驶客户端系统
自动驾驶客户端系统是将算法转化为车辆控制指令的关键基础设施。不同于云端服务器或移动设备,车载计算系统必须在严苛的物理环境下提供确定性的实时响应,同时满足汽车行业严格的功能安全标准。本章将深入探讨车载计算平台架构、实时操作系统、中间件设计以及功能安全实现,帮助读者理解如何构建可靠、高效、安全的自动驾驶客户端系统。
8.1 车载计算平台架构
8.1.1 异构计算架构设计
现代自动驾驶系统需要处理每秒数GB的传感器数据,运行复杂的深度学习模型,并在毫秒级延迟内做出决策。这种计算密集型任务催生了专门为自动驾驶设计的异构计算架构。
核心计算单元分工
典型的车载计算平台包含以下计算单元,each有其专门的职责:
┌─────────────────────────────────────────────────────────┐
│ 车载计算平台架构 │
├─────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │ CPU │ │ GPU │ │ NPU │ │ DSP │ │
│ │ (控制流) │ │ (并行化) │ │ (AI推理) │ │(信号处)│ │
│ └─────┬────┘ └─────┬────┘ └─────┬────┘ └────┬───┘ │
│ │ │ │ │ │
│ ┌─────┴──────────────┴──────────────┴─────────────┴──┐ │
│ │ 高速互联总线 (PCIe/CXL) │ │
│ └─────┬──────────────┬──────────────┬────────────────┘ │
│ │ │ │ │
│ ┌─────┴────┐ ┌─────┴────┐ ┌─────┴────┐ │
│ │ 共享 │ │ ISP │ │ VPU │ │
│ │ 内存 │ │ (图像处) │ │ (视频编) │ │
│ │ (LPDDR) │ │ │ │ 解码 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
CPU(中央处理器): 负责系统调度、任务协调和顺序逻辑处理。在自动驾驶系统中,CPU主要运行操作系统、中间件和决策规划算法。ARM Cortex-A78AE等车规级CPU提供了锁步执行模式,确保计算的确定性。
GPU(图形处理器): 处理大规模并行计算任务,特别是深度学习推理。NVIDIA的Ampere架构GPU包含Tensor Core,专门加速矩阵运算。在自动驾驶中,GPU主要用于运行感知网络如BEVFormer、DETR3D等。
NPU/DLA(神经网络处理器): 专门优化的AI加速器,提供更高的能效比。例如,地平线征程5的BPU(Brain Processing Unit)可以达到128 TOPS的int8算力,功耗仅30W。NPU通常采用脉动阵列架构,优化卷积和矩阵乘法运算。
DSP(数字信号处理器): 处理传感器原始信号,如雷达信号处理、音频处理等。高通Hexagon DSP在Snapdragon Ride平台中负责4D毫米波雷达的点云生成。
ISP(图像信号处理器): 处理相机原始数据,包括去马赛克、降噪、HDR合成等。现代ISP支持多路相机同步处理,例如Mobileye EyeQ6的ISP可同时处理16路相机输入。
8.1.2 主流计算平台对比
NVIDIA Drive系列
NVIDIA Drive Orin是目前最强大的车载计算平台之一:
- 254 TOPS的AI算力(INT8)
- 12核ARM Cortex-A78AE CPU
- 2048个CUDA核心 + 64个Tensor核心
- 支持多芯片级联,最高可达2000+ TOPS
优势:生态系统完善,CUDA编程模型成熟,TensorRT优化工具链强大。适合L4/L5级别自动驾驶。
劣势:功耗较高(60W单芯片),成本昂贵,需要主动散热。
Mobileye EyeQ系列
EyeQ6作为最新一代产品:
- 128 TOPS算力
- 8核ARM CPU + 2个加速器集群
- 集成ISP,支持16路相机
- 功耗仅40W
优势:垂直整合度高,从芯片到算法到地图全栈自研。功耗控制优秀。
劣势:封闭生态,难以定制化开发。主要面向Tier 1供应商。
高通Snapdragon Ride
基于移动芯片技术扩展到汽车领域:
- Flex SoC提供可扩展算力(30-700 TOPS)
- 集成5G/V2X通信模块
- Hexagon DSP处理雷达信号
优势:通信能力强,支持C-V2X。移动芯片经验丰富,功耗控制好。
劣势:汽车市场相对较新,生态系统仍在建设。
国产平台(华为MDC、地平线征程)
华为MDC810:
- 400+ TOPS算力
- 鲲鹏920 CPU + 昇腾310 AI处理器
- 支持鸿蒙车载OS
地平线征程5:
- 128 TOPS算力(单芯片)
- 贝叶斯架构BPU
- 支持多芯片级联
优势:本土化服务好,定制化能力强,成本有优势。
挑战:国际市场接受度,生态系统相对年轻。
8.1.3 算力需求与功耗平衡
算力需求评估
不同自动驾驶级别的算力需求呈指数级增长:
| SAE级别 | 典型算力需求 | 主要计算任务 | 功耗预算 |
| SAE级别 | 典型算力需求 | 主要计算任务 | 功耗预算 |
|---|---|---|---|
| L2 | 10-30 TOPS | 单目检测、车道保持 | <15W |
| L3 | 50-150 TOPS | 多传感器融合、行为预测 | <50W |
| L4 | 200-1000 TOPS | 高精地图匹配、复杂场景理解 | <150W |
| L5 | 1000+ TOPS | 端到端学习、实时场景重建 | <300W |
TOPS的误区
TOPS(Tera Operations Per Second)只是理论峰值算力,实际性能受多个因素影响:
-
算子利用率: 深度学习模型中不同层的计算密度差异大。卷积层可能达到80%利用率,而激活层可能只有20%。
-
内存带宽瓶颈:
实际吞吐量 = min(计算能力, 内存带宽 × 数据重用率)
例如,处理BEVFormer的attention层时,内存访问模式不规则,即使有高TOPS也难以充分利用。
- 精度要求: INT8相比FP32可以提供4倍算力,但量化可能导致精度损失。关键安全相关的计算可能需要FP16甚至FP32。
功耗优化策略
车载系统的功耗直接影响续航里程和散热设计,优化策略包括:
- 动态电压频率调节(DVFS)
功耗 ∝ C × V² × f
其中C是电容,V是电压,f是频率。通过动态调节可节省30-50%功耗。
-
异构调度: 将任务分配到最合适的计算单元。例如,稀疏网络放在CPU,密集卷积放在GPU/NPU。
-
模型优化: - 量化:INT8推理相比FP32可节省75%功耗 - 剪枝:去除冗余连接,减少计算量 - 知识蒸馏:用小模型替代大模型
-
片上缓存优化: 减少DRAM访问。每次DRAM访问的能耗是片上SRAM的100倍。通过优化数据布局和重用,可显著降低功耗。
热设计考虑
车载环境温度范围广(-40°C到+85°C),散热设计极具挑战:
┌─────────────────────────────────────┐
│ 热管理系统架构 │
├─────────────────────────────────────┤
│ 芯片 → 导热界面材料 → 散热器 │
│ ↓ ↓ │
│ 结温 外壳温度 环境温度 │
│ Tj Tc Ta │
│ │
│ 热阻: Rjc + Rca = (Tj - Ta) / P │
│ 其中P是功耗 │
└─────────────────────────────────────┘
设计原则:
- 保持结温Tj < 105°C(典型车规要求)
- 采用被动散热优先,主动散热(风扇)作为补充
- 考虑长期可靠性,避免热循环导致的焊点疲劳
8.2 实时操作系统与调度
8.2.1 实时性要求分析
自动驾驶系统的实时性要求远超传统计算系统。一个100km/h行驶的车辆,每10ms延迟意味着近30cm的位移,这在紧急制动场景下可能决定生死。
实时性分类
自动驾驶系统包含不同实时性要求的任务:
| 任务类型 | 实时性要求 | 典型周期 | 延迟容忍度 | 失败后果 |
| 任务类型 | 实时性要求 | 典型周期 | 延迟容忍度 | 失败后果 |
|---|---|---|---|---|
| 车辆控制 | 硬实时 | 1-10ms | <1ms抖动 | 车辆失控 |
| 传感器融合 | 硬实时 | 10-30ms | <5ms | 感知失效 |
| 路径规划 | 软实时 | 50-100ms | <20ms | 舒适性降低 |
| 地图更新 | 非实时 | 1-10s | 秒级 | 功能降级 |
延迟预算分配
端到端延迟需要在各模块间合理分配:
感知到控制的延迟分解(典型L3系统)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
传感器采集 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├─────┤ 5ms(相机曝光+传输)
数据预处理 ├────┤ 3ms(ISP处理)
感知推理 ├──────────┤ 15ms(DNN推理)
融合跟踪 ├─────┤ 5ms
预测规划 ├──────┤ 8ms
控制输出 ├──┤ 2ms
CAN总线 ├─┤ 2ms
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
总延迟: 40ms
最坏情况执行时间(WCET)分析
WCET是硬实时系统设计的关键参数。对于安全关键任务,必须保证在WCET内完成:
WCET分析方法:
1. 静态分析:通过程序流图分析所有可能路径
2. 测量法:大量测试用例的统计上界
3. 混合方法:结合静态分析和实际测量
WCET = 基本块执行时间 + 缓存未命中惩罚 + 中断延迟
实践中的挑战:
- 现代处理器的缓存、分支预测使WCET难以精确预测
- 深度学习模型的动态计算图导致执行时间不确定
- 多核系统的资源竞争增加了分析复杂度
8.2.2 实时操作系统选择
QNX Neutrino RTOS
QNX是自动驾驶领域应用最广的商用RTOS:
架构特点:
- 微内核架构,核心仅提供消息传递、调度、中断处理
- 所有驱动和服务运行在用户空间,提高了安全性
- 支持自适应分区调度(APS),保证关键任务的CPU时间
QNX系统架构
┌─────────────────────────────────────┐
│ 应用层 │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │感知 │ │规划 │ │控制 │ │诊断 │ │
│ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │
├─────┴───────┴───────┴───────┴───────┤
│ 资源管理器 │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │文件 │ │网络 │ │设备 │ │ IPC │ │
│ │系统 │ │协议 │ │驱动 │ │管理 │ │
│ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │
├─────┴───────┴───────┴───────┴───────┤
│ QNX微内核 │
│ • 消息传递 • 线程调度 │
│ • 中断处理 • 时钟管理 │
└─────────────────────────────────────┘
优势:
- ASIL D认证,满足ISO 26262最高安全等级
- 确定性调度,中断延迟<5μs
- 丰富的汽车生态系统支持
劣势:
- 许可费用高昂
- 开发者社区相对较小
- 与Linux生态兼容性有限
Linux with RT-PREEMPT
实时Linux通过PREEMPT_RT补丁提供软实时能力:
关键改进:
- 将自旋锁转换为可睡眠的互斥锁
- 中断处理线程化,可被高优先级任务抢占
- 高精度定时器(hrtimer)支持
标准Linux vs RT-Linux延迟对比
┌────────────────────────────────┐
│ 延迟分布图 │
│ │
│ 标准Linux: │
│ ▁▂▄█████▄▂▁________▁▂▁_____ │
│ └─────────────────────────┘ │
│ 0 100μs 1ms 10ms 100ms │
│ │
│ RT-Linux: │
│ ▁████▄▂▁___________________ │
│ └─────────────────────────┘ │
│ 0 100μs 1ms 10ms 100ms │
└────────────────────────────────┘
配置要点:
- CPU隔离(isolcpus):将特定CPU核心专用于实时任务
- 中断亲和性(irq affinity):将中断绑定到非实时核心
- 内存锁定(mlockall):防止页面交换
适用场景:需要Linux生态系统,但对硬实时要求不严格的L2/L3系统。
嵌入式RTOS选择
对于ECU级别的控制单元,轻量级RTOS更合适:
| RTOS | 内存占用 | 上下文切换 | 认证等级 | 典型应用 |
| RTOS | 内存占用 | 上下文切换 | 认证等级 | 典型应用 |
|---|---|---|---|---|
| FreeRTOS | <10KB | <1μs | SIL 2 | 传感器ECU |
| VxWorks | ~100KB | <2μs | ASIL D | 域控制器 |
| μC/OS-III | <20KB | <1μs | ASIL B | 执行器控制 |
| Zephyr | <8KB | <1μs | 开发中 | IoT网关 |
8.2.3 多核调度策略
现代车载SoC通常包含8-12个CPU核心,有效的多核调度对性能至关重要。
任务亲和性与分配
将相关任务分配到合适的核心可以优化缓存利用率:
典型的8核系统任务分配
┌──────────────────────────────────────┐
│ 核心分配策略 │
├──────────────────────────────────────┤
│ Core 0-1: 系统服务、中断处理 │
│ - OS内核 │
│ - 设备驱动 │
│ - 网络协议栈 │
│ │
│ Core 2-3: 感知处理 │
│ - 图像预处理 │
│ - 点云处理 │
│ - 传感器融合 │
│ │
│ Core 4-5: 决策规划 │
│ - 行为预测 │
│ - 路径规划 │
│ - 决策树评估 │
│ │
│ Core 6-7: 安全监控 │
│ - 功能安全监控 │
│ - 冗余计算 │
│ - 故障检测 │
└──────────────────────────────────────┘
核间通信优化
核间通信的延迟和带宽直接影响系统性能:
- 共享内存通信
生产者核心 消费者核心
┌─────────┐ ┌─────────┐
│ Writer │ │ Reader │
└────┬────┘ └────┬────┘
│ │
▼ ▼
┌──────────────────────────────┐
│ 环形缓冲区(L3 Cache) │
│ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
│ │ │██│██│██│ │ │ │ │ │
│ └──┴──┴──┴──┴──┴──┴──┴──┘ │
│ ↑wr_idx ↑rd_idx │
└──────────────────────────────┘
- 消息传递优化 - 使用cache line对齐的数据结构(通常64字节) - 批量处理减少同步开销 - 无锁数据结构(lock-free queue)
缓存一致性管理
多核系统的缓存一致性协议(如MESI)会带来额外开销:
False Sharing示例及解决方案
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题:两个核心访问同一cache line的不同数据
struct {
int core0_data; // Core 0写
int core1_data; // Core 1写
} shared; // 导致cache line乒乓
解决:使用padding分离到不同cache line
struct {
int core0_data;
char pad[60]; // 填充到64字节
int core1_data;
char pad[60];
} shared;
实时调度算法
车载系统常用的调度算法:
-
Rate Monotonic (RM):周期越短优先级越高 - 适用于周期性任务 - CPU利用率上界:n(2^(1/n) - 1) ≈ 69%(n→∞)
-
Earliest Deadline First (EDF):截止时间越早优先级越高 - 理论上可达100% CPU利用率 - 动态优先级,实现复杂
-
混合关键性调度:不同安全等级任务的协同调度
高关键性模式触发条件:
- 低关键性任务超时
- 系统资源不足
- 安全事件检测
模式切换:暂停低关键性任务,保证高关键性任务
8.3 中间件架构与通信
8.3.1 AUTOSAR架构
AUTOSAR(AUTomotive Open System ARchitecture)是汽车行业的标准化软件架构,旨在提高软件的可移植性和可重用性。
Classic AUTOSAR vs Adaptive AUTOSAR
两种AUTOSAR平台服务于不同的计算需求:
| 特性 | Classic AUTOSAR | Adaptive AUTOSAR |
| 特性 | Classic AUTOSAR | Adaptive AUTOSAR |
|---|---|---|
| 目标ECU | 传统MCU(如TC397) | 高性能SoC(如Orin) |
| 操作系统 | 静态RTOS | POSIX OS(如QNX) |
| 通信机制 | 信号/PDU | 服务导向(SOME/IP) |
| 内存管理 | 静态分配 | 动态分配 |
| 应用场景 | 传感器/执行器控制 | 自动驾驶域控制器 |
| 安全等级 | ASIL D | ASIL B/D |
Adaptive AUTOSAR架构
┌─────────────────────────────────────────────┐
│ 应用层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 感知 │ │ 规划 │ │ 控制 │ │
│ │ 服务 │ │ 服务 │ │ 服务 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
├───────┴──────────────┴──────────────┴───────┤
│ ARA(AUTOSAR Runtime for │
│ Adaptive Applications) │
│ ┌──────────────────────────────────────┐ │
│ │ • ara::com (通信管理) │ │
│ │ • ara::exec (执行管理) │ │
│ │ • ara::sm (状态管理) │ │
│ │ • ara::diag (诊断服务) │ │
│ └──────────────────────────────────────┘ │
├──────────────────────────────────────────────┤
│ 自适应平台基础 │
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ 操作系统│ │ 执行 │ │ 通信中间件 │ │
│ │ (POSIX) │ │ 管理器 │ │ (SOME/IP) │ │
│ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────────┘
服务导向架构(SOA)
Adaptive AUTOSAR采用服务导向架构,支持动态服务发现:
服务发现流程:
1. 服务提供者注册
Provider → Service Registry: RegisterService(interface, endpoint)
2. 服务消费者查询
Consumer → Service Registry: FindService(interface)
Registry → Consumer: ServiceHandle[]
3. 建立连接
Consumer → Provider: Subscribe/Request via ServiceHandle
实现示例(伪代码):
// 服务接口定义
service PerceptionService {
method GetObjects() -> ObjectList;
event ObjectsUpdated -> ObjectList;
field<ObjectList> CurrentObjects;
}
// 服务提供者
class PerceptionProvider {
ara::com::ServiceSkeleton skeleton;
void Offer() {
skeleton.OfferService();
// 处理请求
skeleton.GetObjects.SetHandler([this](){
return ComputeObjects();
});
}
}
// 服务消费者
class PlanningConsumer {
ara::com::ServiceProxy proxy;
void Start() {
auto handles = proxy.FindService();
if (!handles.empty()) {
proxy = ServiceProxy(handles[0]);
proxy.ObjectsUpdated.Subscribe([](ObjectList objs){
ProcessObjects(objs);
});
}
}
}
8.3.2 ROS2在车载系统中的应用
ROS2相比ROS1做了大量改进,使其更适合车载部署:
DDS通信层
ROS2基于DDS(Data Distribution Service)标准,提供可靠的发布-订阅通信:
ROS2/DDS架构层次
┌─────────────────────────────────┐
│ ROS2应用节点 │
├─────────────────────────────────┤
│ RCL (ROS Client Library) │
├─────────────────────────────────┤
│ RMW (ROS Middleware) │
│ 接口抽象层 │
├─────────────────────────────────┤
│ DDS实现 (FastDDS/CycloneDDS) │
│ • RTPS协议 │
│ • QoS策略 │
│ • 自动发现 │
├─────────────────────────────────┤
│ 传输层 (UDP/共享内存) │
└─────────────────────────────────┘
QoS策略配置
根据不同数据类型配置合适的QoS(Quality of Service):
| 数据类型 | Reliability | Durability | History | Deadline |
| 数据类型 | Reliability | Durability | History | Deadline |
|---|---|---|---|---|
| 控制命令 | RELIABLE | VOLATILE | KEEP_LAST(1) | 10ms |
| 传感器数据 | BEST_EFFORT | VOLATILE | KEEP_LAST(5) | 30ms |
| 地图更新 | RELIABLE | TRANSIENT_LOCAL | KEEP_ALL | - |
| 诊断日志 | RELIABLE | PERSISTENT | KEEP_ALL | - |
配置示例:
// 创建实时性要求高的发布者
auto qos = rclcpp::QoS(10) // 队列深度
.reliability(RMW_QOS_POLICY_RELIABILITY_RELIABLE)
.deadline(std::chrono::milliseconds(10))
.liveliness(RMW_QOS_POLICY_LIVELINESS_AUTOMATIC);
auto publisher = node->create_publisher<ControlMsg>(
"vehicle_control", qos);
实时性改进
ROS2的实时性优化措施:
- 内存预分配
// 使用内存池避免动态分配
rclcpp::PublisherOptions pub_options;
pub_options.use_intra_process_comm = true;
pub_options.allocator =
std::make_shared<CustomAllocator<>>();
- 执行器调度
// 单线程执行器用于确定性
rclcpp::executors::SingleThreadedExecutor executor;
// 静态执行器用于实时性
rclcpp::executors::StaticSingleThreadedExecutor
static_executor;
- 零拷贝通信 - 进程内通信使用指针传递 - 进程间通信使用共享内存
8.3.3 数据通信与序列化
共享内存通信
高带宽传感器数据(如相机、激光雷达)适合使用共享内存:
共享内存架构
┌──────────────────────────────────────┐
│ 物理内存 │
├──────────────────────────────────────┤
│ ┌────────────────────────────────┐ │
│ │ 共享内存段 (SHM) │ │
│ │ ┌──────────────────────────┐ │ │
│ │ │ 元数据区 │ │ │
│ │ │ • 写入索引 │ │ │
│ │ │ • 读取索引 │ │ │
│ │ │ • 时间戳 │ │ │
│ │ └──────────────────────────┘ │ │
│ │ ┌──────────────────────────┐ │ │
│ │ │ 数据缓冲区 │ │ │
│ │ │ [Frame0][Frame1]... │ │ │
│ │ └──────────────────────────┘ │ │
│ └────────────────────────────────┘ │
├──────────────────────────────────────┤
│ 进程A内存空间 │ 进程B内存空间 │
│ 映射SHM │ 映射SHM │
└──────────────────────────────────────┘
实现要点:
- 使用内存屏障保证多核一致性
- 环形缓冲区避免锁竞争
- mmap()映射到进程地址空间
零拷贝技术
传统拷贝 vs 零拷贝对比:
传统方式(4次拷贝):
设备 → 内核缓冲 → 用户缓冲 → 内核缓冲 → 网络
零拷贝(DMA + sendfile):
设备 → 内核缓冲 → 网络
↑________↑
DMA传输
序列化方案对比
| 方案 | 特点 | 延迟 | 适用场景 |
| 方案 | 特点 | 延迟 | 适用场景 |
|---|---|---|---|
| Protocol Buffers | 跨语言,模式演进 | ~1ms/MB | 配置、日志 |
| Cap'n Proto | 零拷贝,无解析 | ~0.1ms/MB | 传感器数据 |
| FlatBuffers | 零拷贝,随机访问 | ~0.1ms/MB | 游戏引擎数据 |
| MessagePack | 紧凑,动态类型 | ~0.5ms/MB | RPC通信 |
| 原始二进制 | 最快,无开销 | ~0.01ms/MB | 固定格式数据 |
Cap'n Proto在车载系统中的优势:
// 定义schema
struct PointCloud {
timestamp @0 :UInt64;
points @1 :List(Point);
struct Point {
x @0 :Float32;
y @1 :Float32;
z @2 :Float32;
intensity @3 :UInt8;
}
}
// 零拷贝读取
auto reader = capnp::FlatArrayMessageReader(data);
auto cloud = reader.getRoot<PointCloud>();
// 直接访问,无需解析
for (auto point : cloud.getPoints()) {
process(point.getX(), point.getY(), point.getZ());
}
8.5 功能安全与ISO 26262
- 8.5.1 功能安全概念
- ASIL等级定义
- 危害分析与风险评估
- 安全目标制定
- 8.5.2 安全架构设计
- 冗余设计模式
- 监控与故障检测
- 安全岛概念
- 8.5.3 软件开发流程
- V模型开发
- 代码标准(MISRA C/C++)
- 验证与确认(V&V)
8.6 系统集成与优化
- 8.6.1 内存管理
- 静态内存分配
- 内存池设计
- DMA优化
- 8.6.2 传感器数据处理
- 时间同步机制
- 数据缓冲与流控
- 硬件加速接口
- 8.6.3 算法部署优化
- 模型量化与剪枝
- TensorRT/ONNX Runtime
- 动态批处理
8.7 系统监控与诊断
- 8.7.1 性能监控
- CPU/GPU利用率
- 内存使用情况
- 通信延迟分析
- 8.7.2 日志与追踪
- 分级日志系统
- 事件追踪框架
- 黑盒记录器
- 8.7.3 远程诊断
- OBD接口
- UDS协议
- 云端监控集成