深度学习模型部署C++-TensorRT模型加速
1. TensorRT模型加速
TensorRT是NVIDIA开发的一个深度学习模型推理优化器,用来高效率的部署深度学习应用。TensorRT能够为使用NVIDIA GPU的嵌入式平台和自动驾驶平台等提供深度学习模型的推理加速。 神经网络模型的应用可以分为模型训练和推理两个阶段。神经网络的训练阶段又分为前向传播和反向传播两个过程,都是在训练集上进行。训练时通过误差的反向传播来进行网络权重的更新;推理过程只包含前向传播一个阶段,针对的是测试集或者其他新数据,实质上是对新数据进行预测。在预测时速度是一个关键指标。在深度学习中,为了加快模型的训练速度通常会使用多个GPU进行分布式训练。为了降低模型的部署成本通常使用单个GPU设备或者嵌入式平台进行部署。由于训练的神经网络模型可能会大,其参数量也会非常庞大,而且部署端设备的硬件性能存在差异,往往会导致推理速度较慢。这对于实时性要求高的应用场景是十分不利的。TensorRT深度学习框架只有前向传播过程,只能用于模型的部署推理。TensorRT可以对TensorFlow、Pytorch等神经网络模型进行解析,然后将解析后的模型与TensorRT中对应的结构进行映射,最后在TensorRT中针对这些结构实施优化进行部署加速。
2. TensorRT的优化策略
TensorRT主要采用层间融合(张量融合)和数据精度校准进行神经网络模型的优化加速。在模型推理时,GPU通过启动不同的CUDA核心来完成数据的计算。CUDA核心拥有很高的计算能力,可以很快的完成数据的计算工作,但是数据的读写和CUDA核心的启动极为消耗时间。这造成了GPU资源和内存宽带的浪费。TensorRT通过对层间的纵向和横向合并来减少神经网络的层数并降低CUDA核心的启动次数,合并后的结构称为CBR。纵向合并能够将卷积、偏置和激活层合并成只占用一个CUDA核心的CBR结构。横向合并可以将结构相同权值不同的层合并成一个CBR结构,并且也只占用一个CUDA核心,因此合并之后的神经网络计算图层数更少,计算推理所占用的CUDA核心也更少,整个模型结构也会更小、更高效。深度学习框架在训练网络模型时,网络中的张量多采用32位浮点数的精度。在神经网络训练结束的部署推理的过程中,由于不再需要使用误差的反向传播来更新权值,因此可以适当降低数据精度以获得更小的模型体积、更低的内存占用和延迟。
微信公众号: 人工智能感知信息处理算法研究院