作者 | 汽车人 编辑 | 自动驾驶与AI
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【模型部署】技术交流群
本文只做学术分享,如有侵权,联系删文
cuda与tensorrt是CV领域模型部署的必备,自动驾驶之心为大家整理了cuda与tensorrt常见入门资料,希望能够帮助到大家!
所有内容出自:基于TensorRT的CNN/Transformer/检测/BEV模型四大部署实战教程,欢迎扫码学习!
PS. 点击上方链接领取开课优惠券,仅限三天!即将恢复原价!
1)计算机组成原理与硬件相关
有关Tensor Core和CUDA Core
● 一个比较早期的Tensor Core的官方Blog:https://developer.nvidia.com/blog/programming-tensor-cores-cuda-9/
○ 注意,这里介绍的Tensor Core还是一代,现在的Tensor Core已经是三代了,通过这个文章看一下Tensor Core做矩阵计算跟CUDA Core的区别
● 比较新的Tensor Core的文章:○https://www.nvidia.com/en-us/data-center/tensor-cores/
○ 从这里面的动画去理解Tensor Core和CUDA Core的区别
● 有余力的去调查一下dataflow architecture是什么东西
Roofline Model相关
● 有关Roofline model最好直接看论文:Roofline: An Insightful Visual Performance Model for Floating-Point Programs and Multicore Architectures
● 读论文的时候有关键词不懂就直接查一下,这篇论文内容很浓。读懂了就很厉害了
● 有余力,参考一个Ampere架构的GPU,计算它的Roofline Model中的各个指标
● 再有余力,手动计算1x1 conv, 3x3 conv, 5x5 conv的计算密度是多少,以及在Roofline model中的哪个位置
2)TensorRT模型部署优化相关
TensorRT相关
介绍TensorRT最全面的还是看它的官网会比较好:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html
能够把这里的知识点全部都搞懂的话就很厉害了,差不多TensorRT的理论基础就打好了
量化相关
● 先对整体有个粗略的概念。依然看官方的Blog会好一点:https://developer.nvidia.com/blog/achieving-fp32-accuracy-for-int8-inference-using-quantization-aware-training-with-tensorrt/
○ 理解FP32和INT8是什么,为什么会掉精度,如何才能不掉精度。calibration是什么,为什么需要calibration
○ 粗略的理解QAT是什么,PTQ是什么
● TensorRT中对量化的优化技巧,依然推荐官方文档:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#working-with-int8
○ 这里第一次看容易看不懂,所以课程里会详细分析
○ 有余力去理解一下QDQ相关的节点在TensorRT中是如何融合的
● 这里参考几篇阅读文章
INTEGER QUANTIZATION FOR DEEP LEARNING INFERENCE: PRINCIPLES AND EMPIRICAL EVALUATION
■ 这个是NVIDIA出的。可以对量化有个大体的概念
■ 理解Max, Entropy, Percentile这三种Calibration的区别是什么Quantizing deep convolutional networks for efficient inference: A whitepapr
■ 这是Google在2018年发的有关量化的文章,可以看看Google是如何量化的
■ 作为参考阅读就okay了A White Paper on Neural Network Quantization
■ Qualcomm在2021年发表的量化的文章,作为参考学习一下
剪枝相关
● 对Sparse pruning有个大体的概念就okay了,推荐读官方Blog:https://developer.nvidia.com/blog/accelerating-inference-with-sparsity-using-ampere-and-tensorrt/
● 理解一下剪枝大体分类可以分为几种。每一种适合什么情况
● 余力的去理解一下结构化剪枝和非结构化剪枝的区别,并考虑哪种对硬件更友好
● 有余力的去理解一下vector-wise sparse prunning是什么,为什么是4:2
● 再有余力的去思考一下,为什么sparse prunning需要有特定硬件去支持
Receiptive field相关
● 这个也是直接先读论文:Understanding the Effective Receptive Field in Deep Convolutional Neural Networks,这里面讲的Receptive Field很重要。但更重要的是Effective Receptive Field。理解这两者的区别
● 可以考虑一下,从模型部署的性能友好出发去考虑,什么样子的模型架构可以又最大化的利用计算资源,同时又能够最大化Effective Receptive Field。同时考虑一下CNN和Transformer在Effective Receptive Field上的区别,从根本上思考为什么Transformer相比于CNN的优势在哪里
● 有余力,自己做一个小程序,来计算ResNet或者VGG的Receiptive field和Effective receiptive field是如何变化的
3)编程相关
并行处理相关
● 这里没有推荐的学习资料,但是介绍一些C/C++的关键字大家学习一下
○ pthread, std::thread, openmp的写法
○ 其他的一些有关并行的基本概念(比如lock, barrier这些)理解一些
○ 还有一些C++multi-thread编程要用到的future, promise, conditional variable理解一下
○ 有余力理解一下多线程回调实现异步执行的方法
C++相关
● 由于课程中使用的部署代码以及TensorRT API都是用C++,所以需要有一定的C++基础
● 所以一些比较基本的C++的概念理解一下
○ 比如说, unique/shared pointer这些智能指针,模版函数与函数模版,C++中的一些关键字(static什么时候用,为什么用static等等),如何使用变参,STL中各类容器的用法,引用和指针的区别,函数重载,虚函数,线程池等等。有不会的知识点可以提前自己调查一下,但最好自己写几个小案例试试手。课程里的案例会直接用。
● Makefile的写法
○ Makefile的基本语法可以先学习一下,比如说如何构建依赖关系,Makefile中批量重命名的方法,Makefile中寻找文件的方法等等
○ gcc/g++/nvcc编译器的比较常用的参数理解一下。比如-O0, -O3是什么,-E, -S, -c 分别是什么,-M, -T是什么等等。
● 编程规范
○ 参考Google的C++编程规范
① 全网独家视频课程
BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码学习)

② 国内首个自动驾驶学习社区
近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)