TensorRT cheat sheet

况喜
2023-12-01

TensorRT 备忘清单

问题方案
如何检验TensorRT上计算结果的精度,找出精度不足的layer, 进行计算图优化使用polygraphy
如何分析不同layer的推理时间, 找出耗时较大的layer通过nsight systems得到运行阶段的timeline,并可视化
engine构建时间太长,怎么节约多次构建时的时间使用Timing Cache
Dynamic Shape模式在min-opt-max跨度较大时性能下降1. 构建期间创建多个OptimizationProfile, 每个profile范围要尽量小,方便TensorRT优化
2. 推理时根据数据形状选择相应的Profile, 缺点是会增加显存占用
怎样重叠计算和数据拷贝时间,增加GPU利用率MultiStream,使用CUDA stream和CUDA event进行异步调用,同时使用Pinned memory
怎样使一个engine供多个线程使用使用多个Context, 多个Context可以基于同一个engine独立的进行推理计算
怎样优化Kernel的调用,减少Launch Bound的发生
也就是CPU发起函数调用,到GPU真正执行所花费的时间过大, 大部分时间浪费在准备工作和数据拷贝等步骤上
1. 使用Cuda Graph
2. 将大部分Launch准备工作提前完成
3. CUDA工作流优化
某些Layer的算法导致较大的误差,如何屏蔽掉该选择通过算法选择器完成
1. 先通过ploygraph等工具发现某些层的Tactic结果不理想
2. 通过算法选择器屏蔽掉这些层
3. 重新构建engine
想更新模型的权重,但又不想重新构建engine使用Refit
构建期/运行期显存占用过大,怎么减少BuilderConfig中,默认开启了cuBLAS、cuBLASLt、cuDNN三个库的算子备选方案。TensorRT优选kernel的时候,会从中选择性能最好的实现来放入engine。
可以人工屏蔽其中一种或多种库,从而禁止从这些库中选择算法来实现,可以节约内存和显存占用,减少engine构建时间
缺点是可能会导致engine性能下降或构建失败。后续版本TensorRT会彻底断开对外部库的依赖
 类似资料:

相关阅读

相关文章

相关问答