研究生方向高性能并行计算推荐入行吗?

发布时间:
2023-08-15 23:36
阅读量:
19

CUDA的优化还是需要非常扎实的基础才能做到的~非常推荐GPU/CUDA方向~CUDA与tensorrt是CV领域模型部署的必备,自动驾驶之心为大家整理了cuda与tensorrt常见入门资料,希望能够帮助到大家!

所有内容出自:基于TensorRT的CNN/Transformer/检测/BEV模型四大部署实战教程,欢迎扫码学习!

1)计算机组成原理与硬件相关

有关Tensor Core和CUDA Core

● 一个比较早期的Tensor Core的官方Blog:developer.nvidia.com/bl

○ 注意,这里介绍的Tensor Core还是一代,现在的Tensor Core已经是三代了,通过这个文章看一下Tensor Core做矩阵计算跟CUDA Core的区别

● 比较新的Tensor Core的文章:○nvidia.com/en-us/data-c ○ 从这里面的动画去理解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最全面的还是看它的官网会比较好:docs.nvidia.com/deeplea

○ 能够把这里的知识点全部都搞懂的话就很厉害了,差不多TensorRT的理论基础就打好了

量化相关

● 先对整体有个粗略的概念。依然看官方的Blog会好一点:developer.nvidia.com/bl

○ 理解FP32和INT8是什么,为什么会掉精度,如何才能不掉精度。calibration是什么,为什么需要calibration

○ 粗略的理解QAT是什么,PTQ是什么

● TensorRT中对量化的优化技巧,依然推荐官方文档:docs.nvidia.com/deeplea

○ 这里第一次看容易看不懂,所以课程里会详细分析 ○ 有余力去理解一下QDQ相关的节点在TensorRT中是如何融合的

● 这里参考几篇阅读文章

1. INTEGER QUANTIZATION FOR DEEP LEARNING INFERENCE: PRINCIPLES AND EMPIRICAL EVALUATION

■ 这个是NVIDIA出的。可以对量化有个大体的概念

■ 理解Max, Entropy, Percentile这三种Calibration的区别是什么

2. Quantizing deep convolutional networks for efficient inference: A whitepapr

■ 这是Google在2018年发的有关量化的文章,可以看看Google是如何量化的

■ 作为参考阅读就okay了

3. A White Paper on Neural Network Quantization

■ Qualcomm在2021年发表的量化的文章,作为参考学习一下

剪枝相关

● 对Sparse pruning有个大体的概念就okay了,推荐读官方Blog:developer.nvidia.com/bl

● 理解一下剪枝大体分类可以分为几种。每一种适合什么情况

● 余力的去理解一下结构化剪枝和非结构化剪枝的区别,并考虑哪种对硬件更友好 ● 有余力的去理解一下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++编程规范

END