系列文章目录
第一章 TensorRT优化部署(一)–TensorRT和ONNX基础
第二章 TensorRT优化部署(二)–剖析ONNX架构
第三章 TensorRT优化部署(三)–ONNX注册算子
第四章 TensorRT模型优化部署(四)–Roofline model
第五章 TensorRT模型优化部署(五)–模型优化部署重点注意
第六章 TensorRT模型优化部署(六)–Quantization量化基础(一)
第七章 TensorRT模型优化部署(七)–Quantization量化(PTQ and QAT)(二)
第八章 TensorRT模型优化部署 (八)–模型剪枝Pruning
文章目录
前言
模型优化部署专题内容,后续有补充。
注意点一:FLOPs不能完全衡量模型性能
因为FLOPs只是模型计算大小的单位
还需要考虑
- 访存量
- 与计算无关的DNN部分 (如reshape,shorcut,nchw -->nhwc等)
- DNN以外的部分(前处理后处理这些)
注意点二:不能完全依靠TensorRT
TensorRT可以对模型做适当的优化,但是有上限
比如
- 计算密度低的1x1conv,depthwise conv不会重构
- GPU无法优化的地方会到CPU执行(可以手动修改代码是实现部分,让部分cpu只想转到gpu执行)
- 有些冗长的计算,TensorRT可能未来优化添加一些多余的操作(比如类似与添加reformatter,直接修改代码实现部分)
- 存在TensorRT尚未支持的算子(可以自己写plugin)
- TensorRT不一定会分配Tensor Core(因为TensorRT kernel auto tuning 会选择最合适的kernel)
注意点三:CUDA Core和Tensor Core的使用
1. 有时候TensorRT并不会分配Tensor Core
kernel auto tuning 自动选择最优解,有可能出现INT8速度反而比FP16慢了
2. 使用Tensor Core需要让tensor size 为8或者16的整数
- 8的倍数:fp16精度
- 16的倍数: int8精度
注意点四:不能忽视 前处理/后处理 的overhead
对于一些轻量的模型,相比于DNN推理部分,前处理/后处理可能会更耗时间。因为有些前处理/后处理的复杂逻辑不适合GPU并行。
• 可以把前处理/后处理中可并行的地方拿出来让GPU并行, 比如RGB2BGR, Normalization, resize, crop, NCHW2NHWC。
• 可以在cpu上使用一些针对图像处理的优化库比如Halide,使用Halide进行blur, resize, crop, DBSCAN, sobel这些会比CPU快。
注意:并不是能GPU加速的地方就GPU加速,需要考虑GPU占用率
注意点五:对使用TensorRT得到的推理引擎做benchmark和profiling
使用TensorRT得到推理引擎并实现infer只是优化的第一步, 需要使用NVIDIA提供的benchmark tools进行profiling
• 分析模型瓶颈在哪里
• 分析模型可进一步优化的地方在哪里
• 分析模型中多余的memory access在哪里
(可以使用: nsys, nvprof, dlprof, Nsight这些工具)
总结
本章为专题内容,主要介绍TensorRT优化部署,可移步专题查看其他内容。