TensorRT 学习(1)

在DL模型的实际部署中,考虑到应用场景和对latency的高要求,出现了inference engine的概念,需要将训练好的各框架的模型部署到inference engine中提升模型的推理效率,可以充分利用硬件计算能力提升设备潜力,TensorRT就是NVIDIA针对GPU开发出的一款inference engine;

TensorRT基础概念

  • 关于DL model training和inference过程的区别:
    • 在模型的training过程中,主要包括forward和backward两个阶段,由于需要反向传播误差来更新权重,期间需要存储大量的中间结果,常用的加速训练的方式主要是多GPU分布式训练,这是很消耗计算资源的成本很高;
    • inference过程比较单一,不需要存储中间结果,模型只需要顺序做一次计算就行,在实际部署中对计算资源需求不大,但是当前很多场景对实时性要求很高,因此希望在计算设备上inference尽可能地快,TensorRT的出现就是为了优化提升inference的性能;
  • TensorRT的作用域和部署结构:
    • TensorRT是一个只做inference的deep learning框架,其输入为各深度学习框架的训练模型;
    • TensorRT会对模型结构进行解析,并对模型进行优化和结构重组;
    • TensorRT的输出为deployment-ready runtime engine,配合着TensorRT的Runtime可以将优化后的推理模型部署到GPU各硬件平台;
  • TensorRT优化策略:
    • Layer & Tensor Fusion:在inference过程中输入输出数据的读写占用大量的时间,此时数据搬运的带宽就成了计算性能的瓶颈,同时GPU的计算资源也没有得到充分的利用,因此采用layer fusion的方式来减少layer数目,不仅可以提升CUDA core的利用率同时精简了整个模型结构使得inference更高效;
    • Kernel Auto-Tuning:这部分的优化策略涉及到CUDA core的具体调用,是指TensorRT在针对不同模型不同硬件环境自动调整CUDA core的计算调用从而达到最优的计算性能;
    • Multi-Stream Execution:TensorRT针对GPU的底层优化,可以并行处理输入数据流;
    • Dynamic Tensor Memory:TensorRT会在inference阶段为每一个Tensor指定显存,可以优化显存的占用提高显存复用率;
    • Precision Calibration:在训练过程中tensor通常都是FP32,这样可以保证训练时候的反向传播的精度,在inference阶段可以在保证计算精度很小损失的情况下降低数据精度,从而减少模型数据量内存占用量提升latency时间,将FP32转换成FP16和INT8肯定是有精度损失的,但是TensorRT可以自动化进行模型的校准,保证在FP32转INT8的过程中最小化性能损失;

TensorRT的 interface

  • Network Definition:主要功能是为定义优化网络提供接口;
  • Builder:主要功能是从定义的网络创建一个优化engine;
  • Engine:主要功能是允许应用程序执行inference过程;
  • TensorRT的Parser:CaffeParser、UFFParser、ONNXParser

TensorRT workflow

  • TensorRT主要有build engine和engine deployment两个阶段:
    • build:输入训练好的模型文件,经过优化和进度校准输出针对当前GPU平台和网络结构的TensorRT模型;
    • deploy:加载TensorRT模型构造一个runtime engine并创建执行context,输入数据完成inference;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值