TensorRT FAQ
Posted WhateverYoung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorRT FAQ相关的知识,希望对你有一定的参考价值。
- What is TensorRT ?
- What is performance Gap between Pytorch/tensorflow/caffe and TensorRT ?
- Why TensorRT fast ?
- How fast about TensorRT ?
- How to make use of TRT ?
What is TensorRT ?
英伟达为了让用户更好的使用GPU,加快售卖。
主要为了加速推理实现,包括半精度/低精度/量化,为了发挥出GPU更好的性能(更多针对延时敏感场景)
开发的底层推理库以及相应插件。
What is performance Gap between Pytorch/tensorflow/caffe and TensorRT ?
灵活性和效率的权衡取舍,一切都固定后可以做的编译优化很多。可以看到tensorRT中关于性能介绍章节,
主要有op fuse,显存/内存操作op的优化,并行stream优化,cuda kernel lanch优化等等,而这些
都不是训练框架主要考虑的事情,当然tf-trt已经进行了很好的集成,不过也需要转换过程,只不过对用户
屏蔽的细节更多。
Why TensorRT fast ?
低精度/量化op fuse/asm kernels in nvinfer/kernel select by batch size/memory opt/stream opt...
同时还有一个较为trick的是,cudnn/cublas隐藏了重要的实现细节,api中无法得到底层接口
cudnn中选择一个conv如果计算,虽然有性能优先的选项,但是实际测试得到的未必是性能最好的,是一种静态的选择,
TRT作为NV内部产品,可以得到底层所有实现接口,因此可以做aot将所有kernel跑一遍之后筛选出最优的kernel,
这也是外部用户较难做到的,即使cudnn中有较为高效的推理实现,三方用户无法拿到对应的使用方法,这也是一种策略,
NV向来准备软硬通吃,虽然这些提供的库足够优秀,依然有核武器内部掌握了大量汇编级别的优化结合原生汇编器,
这是三方用户很难做到的,虽然也有不少逆向的汇编器工程,如果要产出大量极致优化的实现投入是很重的,除非内部
业务需求量极大,收益比才会明显,而且不少公司倾向于直接和NV合作,做自己擅长的事。
How fast about TensorRT ?
直接使用cudnn/cublas/cuda相较于tf/pytorch等框架搭建网络,对比性能,可能性能提升并不明显,甚至
还会蜕化,主要是一些工程细节和技巧,完成fine tuning和基本的op fuse后,性能在小batch下可以对比
框架有20%-60%的提升,因模型而异,大batch下计算已经成为主要瓶颈,此时提升并不会很大。而trt加持优化,
只要网络结构在trt支持较好的系列中resnet/inception(后续会不断补充),性能相较于自己搭建仍会有30%-50%
左右的提升,小batch的提升会非常明显,原因是nvinfer库中针对小batch有特殊优化的kernel,cudnn/cublas
中并没有实现。这部分提升因公司而已,财大气粗堆机器的粗犷发展的,可能不太在意,一旦有了量的积累同时开始
开源节流扣的时候比较成本优势的时候,就会是很大的优势,这和过早优化是一个道理,慢慢的集群变大了,利用率
迟早会变成技术优化团队的指标,甚至开始接触异构硬件,TPU/MLU/ASIC等进一步缩减成本。
How to make use of TRT ?
- 如果社区直接支持,或者可以得到NV官方的支持,直接使用或者是编写少量插件自定义层,进行接入,成本较小;
- 如果模型支持程度不好,没法直接使用时,权重转换/自定义层等问题,此时工作量会比较大,应该评估收益比;
- 上述问题是丰富社区,回馈社区,由于无法掌控trt发展方向,相对来说较为被动,而且大多数公司会有自己的
工程团队,做推理优化的工作,很可能有自己的推理框架,此时可以选择集成trt到内部推理框架,包括graph集成,
sub-graph集成,op-level集成,kernel-level集成,每个层级实现难度依次抬高,掌控力也越来越强,可以根据
实际情况来选择。
NV doc
trt-intro
nlp-intro-trt
以上是关于TensorRT FAQ的主要内容,如果未能解决你的问题,请参考以下文章
极智AI | TensorRT Parser 构建模型推理方法
极智AI | 讲解 TensorRT 显式batch 和 隐式batch