前言
自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考
本次课程我们来学习课程第三章—TensorRT 基础入门,一起来了解 TensorRT 的应用场景
课程大纲可以看下面的思维导图
0. 简述
本小节目标:理解 TensorRT 在自动驾驶中的意义,自动驾驶在模型部署所关注的内容
这节我们学习第三章节第二小节——TensorRT 的应用场景,这个小节会结合自动驾驶场景下的一些问题去思考在做模型部署优化的时候我们需要考虑哪些方面
1. TensorRT的优化意义
模型训练(Training)时我们的需求主要是以下几点:
- 精度越高越好
- 把模型做得深一点,宽一点
- 使用丰富的 data augmentation
- 使用各种 training trick
但是我们在做模型部署(Deploy)时的需求却和训练时的不同,此时主要关注以下几个方面
- 以精度不变,或者精度掉点很小的情况下尽量压缩模型
- 减少计算量
- 减少 memory access
- 提高计算密度
我们在做训练时的 GPU 资源可以很丰富,多个 GPU 分布式训练也都是完全 OK 的,但是我们不可能在一个自动驾驶车上放那么大的服务器,并且太贵,所以只能选择一个小一点的硬件去做部署
同时在车端部署时我们还得考虑 GPU 的散热问题,因为它经常一不小心就到了 80~90°,所以我们优先考虑水冷进行降温。但是我们车载的硬件设备非常多,如下图所示,因此如果是水冷的话对整个汽车的安全性影响很大,应该尽量避免使用
我们既然性能高,又要不那么热,那么很多地方就会把视线集中在 Jetson 系列上
2. 自动驾驶中需要关注的实时性
自动驾驶中我们很关注的一个东西就是 Realtime(实时性),这是我们在部署模型时是需要关注的一个很重要的指标,一般来说 15fps 是一个底线,但高速公路上需要至少 30fps,此外边缘嵌入式设备上一般要接多路视频流,还包括 IMU、Radar、LiDAR 等传感器的数据分析,因此 FPS 要达到实际要求还是有比较大的挑战的
对于单个小型 DNN,在计算资源限制的情况下想达到这个指标(>15fps)难度系数不高,我们的模型可以做得很 simple,让它不经过分支,一路卷积这种。但自动驾驶是一个多任务复杂的场景所以一个小型 DNN 远远不够,这个也是我们需要考虑的
此外自动驾驶场景中又需要我们看得很远,比如说 150m 远的红绿灯,以及红绿灯下面的箭头和时间,再比如说 100m 远的路标这些。看得越远代表着我们的图片分辨率越高,意味着我们模型的计算量也越大,推理的时间也越长,代表性能的实时性也更具挑战
另外不光是 Perception 感知方面需要时间,后期的 Planning 规划等等也需要时间
上图是自驾系统的一些组成,整个 Perception 感知部分是一小部分,后期还有一个 Planning 规划,根据 Planning 的情况对汽车内部进行一些控制,比如油门、刹车这些偏硬件控制的部分
但是自动驾驶场景下存在以下的一些特性:
- 多任务
- 2D/3D 检测
- 车道线检测
- 深度估计
- 多目标追踪
- BEV 检测
- 光流检测
- 多传感器
- LiDAR
- Camera
- Radar
- 高分辨率输入图像
- Multi-Camera
如果把这些所有的事情能够在短时间内做完并达到 >10fps 甚至 30fps 是一个非常具有挑战性的事情
我们怎么做呢?工业界中有很多种方案,比如说局部提高分辨率、优先处理局部区域、CPU/GPU 异步处理等等
3. 自动驾驶中需要关注的电力消耗
接下来我们来看下电力消耗部分,下面拿自动驾驶 ECU 方案举例,它的主要电力消耗包括以下几种:
Main ECU (CPU + GPU) ~150W
Perception ECU (Object detection * 6) = ~90w
Perception ECU (Traffic light* 2) = ~20w
合计下来把所有的这些东西全部搭上只做最基本的优化的话大概 ~255w
基本上我们需要的算力越大,消耗的电力越大(如下图所示)。自动驾驶所需要控制的电力一般来说需要控制在小于 100w。自动驾驶也属于 Edge computing 的一种,所以对电力消耗需要严格控制
下面是 Jetson AGX Xavier 的电力消耗图,它的 Peak performance 和对应的电力消耗是:
GPU: 22TOPS (DENSE INT8)
DLA0: 5TOPS (DENSE INT8)
DLA1: 5 TOPS (DENSE INT8)
Power consumption ~30W
下面是另外一个 Jetson 系列 Jetson AGX Xavier 的电力消耗图,它的性能就非常非常高了,它的 Peak performance 和对应的电力消耗是:
GPU: 170 TOPS (Sparse INT8), 85TOPS (DENSE INT8)
DLA0: 52.5 TOPS (Sparse INT8), 26.25TOPS (DENSE INT8)
DLA1: 52.5 TOPS (Sparse INT8), 26.25TOPS (DENSE INT8)
Power consumption ~60W
4. 自动驾驶中模型部署所关注的东西
重点!!!最后我们简单总结下自动驾驶中模型部署所关注的东西:
- RealTime(实时性)
- Power Consumption(消耗电力)
- Long range Accuracy(远距离)
总结
本次课程我们主要学习了在自动驾驶场景下做模型部署时需要考虑的几个问题,首先是实时性的问题,自动驾驶是一个多任务的场景,你怎么将这些任务执行的时间压缩到一个可以接受的范围,怎么去优化你的模型去尽量减少推理时间;第二个是电力消耗问题,最后是远距离精度的问题,以上都是我们在做模型部署时考虑到的
OK,以上就是第 2 小节有关 TensorRT 应用场景的全部内容了,下节我们来学习 TensorRT 内部的优化模块,敬请期待😄
参考
- NVIDIA DGX System
- GeForce RTX 4090
- bizon z5000
- Under the Hood of a Self-Driving Taxi, a Look at Computation and Other Core Self-Driving Car Systems
- Jetson AGX Xavier
- Jetson AGX Orin at GTC 2022
- Visual Perception for Self-Driving Cars! Part 5: Multi-Task Learning
- Accelerating metagenomic read classification on CUDA-enabled GPUs
- AI and ML Accelerator Survey and Trends
- NVIDIA Jetson AGX Xavier Delivers 32 TeraOps for New Era of AI in Robotics
- Delivering Server-Class Performance at the Edge with NVIDIA Jetson Orin