前言:7月20日,NVIDIA发布了最新一代的 TensorRT 8.0版本,将高速率、低延迟优化做到极致。

TensorRT 8.0使用量化感知训练,实现了与 FP32 相当的精度和 INT8 精度,相比7.0版本运行速度和精准度都提升了1倍。加速支持大量推理模型,其中基于BERT模型的推理速度提高 2 倍。

采用稀疏性技术,提升 Ampere GPU性能,将 Ampere GPU 的吞吐量提高多达 50%,加速2:4细粒度结构。通过消除神经网络中不必要的计算,用户可以获得超过30%的性能增长。

改进推理进度、提升模型速度,减少客户成本,TensorRT快速的迭代升级,展示出NVIDIA在推理领域的重视和创新,加速智能应用进程。

我们都知道,深度学习一般分为训练和推理两大部分。

假设我们有一个任务是识别图像中的一只小狗:神经网络构建网络结构,使用各种框架训练数据,经过计算后得出结论说:图像中是否是一只「小狗」。通过训练算法,我们得到了“正确”或“错误”的反馈。

训练完成后,该网络可被部署在需要“推理”的领域中,而具备并行计算能力的 GPU 可以基于训练过的网络运行数十亿的计算,从而快速识别出已知的模式或对象。没有训练就没有推理,当模型一旦被训练完成,线上推理的效率才决定最终的用户体验。

换句话说,推理(Inference)是学以致用的过程,就是深度学习把从训练中学习到的能力应用到工作中去,例如自然语言处理、推荐系统、图像和视频分析。对准确性和性能的需求导致模型复杂性和大小的强劲增长。

通常来说,训练的操作一般在线下,实时数据来之后在线训练的情况比较少,大多数情况下数据是离线的,但是推理(Inference)在实际部署有多种可能,可能部署在Data Center(云端数据中心),比如说大家常见的手机上的语音输入,还可能部署边缘,或者是嵌入式的摄像头、无人机和自动驾驶,特点是对实时性要求很高。

深度学习模型往往受到端计算力的限制,无法很好的部署在移动端或无法降低端的计算成本。例如自动驾驶的模型就过于巨大,而且往往是很多模型并行,所以一般会用一些加速的方法来降低推算的计算力要求。

加速方法有多种不同角度:网络结构,模型推理加速,模型剪枝,参数量化等。AI模型近年来被广泛应用于图像、视频处理中,但由于图像AI模型的计算量大,即便部署在GPU上,有时仍达不到理想的运行速度。

为此,NVIDIA推出自家GPU上推理库TensorRT,包括一个深度学习推理优化器和运行时加速库,可以最大限度地减少延迟和提高生产中的吞吐量,可成倍提高了AI模型的推理效率。

这些年来一直被大力推广,更新也非常频繁,新升级的8.0版本已经推出。

TensorRT的黑科技

TensorRT项目最早在立项的时候名字叫做GPU Inference Engine(简称GIE),Tensor表示数据流动以张量的形式,RT表示Runtime,专门应用于边缘设备的推断,TensorRT可以将我们训练好的模型分解再进行融合,融合后的模型具有高度的集合度。例如卷积层和激活层进行融合后,计算速度就可以进行提升。

TensorRT是由C++、CUDA、python三种语言编写成的一个库,其中核心代码为C++和CUDA,Python端作为前端与用户交互。当然,TensorRT远远不止这个,如上图所示,TensorRT针对每一个平台和架构进行了优化。比如服务端对应的A100、T4、V100等,还有自主开发工具 JETSON Xavier、深度学习加速器NVIDIA DLA等。

而至于如何让神经网络在生产中的优化部署,TensorRT模型在英伟达GPU上如何加速,其实是利用编译器和运行时优化每个网络(包括CNN、RNN和Transformers)加速每个框架。

  1. 通过模型量化INT8和FP16以及TF32、FP32等不同精度可以显著提升模型执行速度,更大限度的提高吞吐量。

  2. 层和张量融合,通过融合内核中的节点,优化GPU内存带宽的使用。

  3. 内核自动调整,基于目标GPU上选择最佳数据层和算法。

  4. 动态张量内存,部署内存高效的应用程序,减少模型运行的时间。

  5. 多流执行,可并行处理多个输入流的可扩展设计。

  6. 时间融合。随时间优化RNN。

  7. 通过这些黑科技的应用,TensorRT调优模型,自然模型的速度就上来,用户可以开箱即用。

更快更高效的TensorRT 8.0

在部署神经网络时,客户通常的考量是如何使网络运行更快或占用更少的空间,因为更高效的网络可以在有限的时间内做出更好的预测,对意外的输入做出更快的反应,或者更快的适应部署环境。

从NIVIDIA最新发布的TensorRT 8.0来看,可以消除神经网络中不必要的计算,与密集网络相比,可以获得超过30%的性能增长,包括用于准确 INT8 的量化感知训练,利用 Ampere GPU 的支持以及基于 Transformer 的网络推理优化。

从图中可以看出,TensorRT 8.0使用量化感知训练实现与 FP32 相当的精度和 INT8 精度,同时支持 Ampere GPU ,将 Ampere GPU 的吞吐量提高多达 50%,与TensorRT7.2版本相比,基于BERT模型的推理速度提高 2 倍。

具体来说,改进INT8推理精度,与TensorRT7.2相比,精确度更高,这意味着以最小的精度损失量获得最先进的模型。

TensorRT官方支持Caffe、Tensorflow、Pytorch、ONNX等模型的转换,(OSS中基于PyTorch的量化工具包,支持QAT、PTQ和导出到ONNX)。

从图中可以看出,NVIDIA的A100GPU为其Tensor内核添加了对细粒度结构化稀疏性的支持,利用稀疏性在低延迟下最大化吞吐量,加速2:4细粒度结构,可获得更高的性能,意味着可以在一半时间内完成相同的有效计算。

​TensorRT对ONNX的支持最好,TensorRT 8.0最新版ONNX转换器又支持了更多的op操作。TensorRT为Transformer构建块生成高度优化的内核,在生产环境中部署高度优化的TensorRT 8.0时,在运行BERTLarge模型时提高了2倍。

SDK,TensorRT 提供 API 和解析器来从所有主要的深度学习框架导入经过训练的模型,最终加速深度学习在数据中心以及汽车和边缘计算环境中的优化运行。

我们知道,TensorRT上一个版本有了大量新模型的加速支持。实现了 1000 多种不同的计算变换和优化,可以最大程度地利用显存,提高效率,带来实时的交互 AI 的体验。

结束语

作为一个用于深度学习推理的 SDK,TensorRT 提供 API 和解析器来从所有主要的深度学习框架导入经过训练的模型,最终加速深度学习在数据中心以及汽车和边缘计算环境中的优化运行。

我们知道,TensorRT上一个版本有了大量新模型的加速支持。实现了 1000 多种不同的计算变换和优化,可以最大程度地利用显存,提高效率,带来实时的交互 AI 的体验。

而凭借对每个主要框架的支持,TensorRT 8.0升级版继续通过强大的优化、降低精度的使用和高效的内存使用,帮助以低延迟处理大量数据,最终让客户开箱即用,加速计算速度。