使用TensorRT集成加速TensorFlow推理

简介: 本文讲述了TensorRT集成如何加速TensorFlow推理,以及实例演示帮助入门

NVIDIA宣布完成了推理优化工具TensorRT与TensorFlow将集成在一起工作。TensorRT集成将可用于TensorFlow1.7版本。TensorFlow仍然是当今最受欢迎的深度学习框架,而NVIDIA TensorRT通过对GPU平台的优化和提高性能,加速了深度学习推理。我们希望使用TensorRT能为TensorFlow用户提供尽可能高的推理性能以及接近透明的工作流。新的集成提供了一个简单的API,它能够使用TensorFlow中的TensorRT实现FP16和INT8的优化。对于ResNet-50基准测试的低延迟运行,TensorRT将TensorFlow推理速度提高了8倍。

下面让我们看一下工作流的概述,以及一些例子以便帮助入门。

TensorFlow内的子图优化

使用与TensorRT集成的TensorFlow优化并执行兼容的子图,让TensorFlow执行剩余的图。你仍然可以使用TensorFlow广泛且灵活的功能集,但是TensorRT能尽可能的解析模型,并对图的部分应用进行优化。而且TensorFlow程序只需要几行新代码就可以促进集成。将TensorRT优化应用于TensorFlow模型时需要导出图表,在某些情况下还需要手动导入某些不受支持的TensorFlow层,这可能会非常耗时。

现在让我们逐步了解工作流。在冻结TensorFlow图进行推理后,使用TensorRT对TensorFlow子图进行优化。然后TensorRT用TensorRT优化节点替换每个支持的子图,生成一个在TensorFlow中运行的冻结图来进行推断。图1说明了工作流。

 

图一所示:在推理过程中使用TensorRT时的工作流图

TensorFlow在所有可支持领域内执行图形,并调用TensorRT执行TensorRT优化节点。例如,假设图形有三个段,A、B和C,片段B经过了TensorRT优化并被一个节点替换。那么在推理过程中,TensorFlow执行A,然后调用TensorRT执行B,之后继续TensorFlow执行C。从用户角度来看,该过程和之前使用TensorFlow执行图形一样。现在让我们看看应用这个工作流的一个示例。

新的TensorFlow API

让我们看看如何使用新的TensorFlow api将TensorRT优化应用到TensorFlow图中。首先在现有的TensorFlow GPU代码中添加几行代码:

1、 在GPU内存中指定TensorFlow可用的部分,TensorRT可以使用剩余的内存。

2、 让TensorRT分析TensorFlow图,应用优化,并用TensorRT节点替换子图。

使用GPUOptions函数中的新参数per_process_gpu_memory_fraction指定TensorRT可以使用的GPU部分。该参数需要在第一次启动TensorFlow-TensorRT时进行设置。例如,0.67意味着将为TensorFlow分配67%的GPU内存,而剩下的33%用于TensorRT引擎。

 

使用新函数create_inference_graph将TensorRT优化应用于冻结图。然后,TensorRT将一个冻结的TensorFlow图作为输入,并返回一个带有TensorRT节点的优化图。参见下面的示例代码片段:

 

让我们看一下函数的参数:

frozen_graph_def: 冻结的TensorFlow图表

put_node_name: 带有输出节点名称的字符串列表,例如

max_batch_size: 整数,输入批次的大小,如16。

max_workspace_size_bytes:整数,可用于TensorRT的最大GPU内存。

precision_mode: 字符串,允许的值为“FP32”,“FP16”或“INT8”。

可以通过设置per_process_gpu_memory_fractionmax_workspace_size_bytes参数来获得最佳性能。例如,将per_process_gpu_memory_fraction参数设置为(12 - 4)/ 12 = 0.67,将max_workspace_size_bytes参数设置为4000000000,用于12GB的GPU,以便为TensorRT引擎分配4GB。

TensorBoard中将优化后的图形可视化

首先在TensorBoard中应用TensorRT优化,然后将对ResNet-50节点图的更改进行可视化。如图2所示,TensorRT几乎优化了整个图形,并用“my_trt_po0”节点进行替换(用红色突出显示)。根据模型中的图层和操作,TensorRT节点会因优化而替换部分模型。

 

图2.左:TensorBoard中的ResNet-50图。右:经过TensorRT优化并且子图被TensorRT节点替换之后。

要注意TensorRT节点下的名为“conv1”的节点。它实际上不是一个卷积层,而是一种显示为conv1的从NHWC到NCHW的转置操作。这是因为TensorBoard仅显示层次结构中顶部节点的名称,而不是默认情况下的单个操作。

自动使用TensorBoard Cores

与FP32和FP64相比,使用半精度(即FP16)算法能够减少神经网络的内存使用,而且还能够花费更少的时间部署更大的网络。每个Tensor Core包含一个4x4x4的矩阵处理阵列来完成D=AxB+C的运算,其中A、B、C、D是4x4的矩阵,如图3所示。矩阵相乘的输入A和B是FP16矩阵,相加矩阵C和D可能是FP16矩阵或FP32矩阵。

 

图3.Tensor Cores上的矩阵处理运算

在使用半精度算法时,TensorRT会自动在Volta GPU中使用Tensor Cores进行推理。NVIDIA Tesla V100上的Tensor Cores峰值性能比双精度(FP64)快大约10倍,比单精度(FP32)快4倍。只需使用“FP16”作为create_inference_graph函数中的precision_mode参数的值即可启用半精度,如下所示。

 

图4显示了使用NVIDIA Volta Tensor Cores与仅运行TensorFlow的TensorFlow-TensorRT集成的差距,ResNet-50在7 ms延迟下执行速度提高了8倍。


图4.ResNet-50推理吞吐量性能

优化INT8推理性能

使用INT8精度进行推理能够进一步提高计算速度并降低宽带要求。动态范围的减少使得神经网络的表示权重和激活变得更加有挑战性。表1说明了动态范围的影响。

 

表1:FP32 vs FP16 vs INT8动态范围

TensorRT提供了在单精度(FP32)和半精度(FP16)中接受训练的模型,并将它们转换为用于INT8量化的部署,同时能够将精度损失降至最低。要想模型能够使用INT8进行部署,需要在应用TensorRT优化之前校准经过训练的FP32模型。剩下的工作流保持不变。图5显示了更新后的工作流。

 

图5.更新后的TensorFlow工作流,包括TensorRT优化之前的INT8校准

首先使用create_inference_graph函数,并将precision_mode参数设置为“INT8”来校准模型。这个函数的输出是一个冻结的TensorFlow图,可以用来校准。

 

接下来用校准数据来执行校准图。TensorRT根据节点数据的分布来量化节点的权重。校准数据非常重要,因为它可以密切反应生产中问题数据集的分布。我们建议在首次使用INT8校准模板是检查推理期间的错误积累。

在校准数据上执行图形后,使用calib_graph_to_infer_graph函数对校准图形应用TensorRT优化。还可以用为INT8优化的TensorRT节点替换TensorFlow子图。函数的输出是一个冻结的TensorFlow图表,可以像往常一样用于推理。

 

这两个命令可以启用TensorFlow模型的INT8精度推断。所有运行的这些示例代码请点击这里

TensorRT集成可用性

我们将继续与TensorFlow团队紧密合作,以加强TensorRT集成的可用性。我们期望新的解决方案在能够保持TensorFlow易用性和灵活性的同时,可以确保NVIDIA GPU性能达到最高。而且由于TensorRT支持多种网络,所以开发人员不需要对现有代码进行任何更改,仅从自动更新中就能获益。

使用标准的pip安装过程来获得新的集成解决方案,一旦TensorFlor1.7可用:

 

详细的安装声明请点击。也可以在TensorFlow的NVIDIA GPU Cloud (NGC) 中获取集成。要想获得更多TensorRT信息请查看TensorRT页面


数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《TensorRT Integration Speeds Up TensorFlow Inference | NVIDIA Developer Blog》

作者:Sami KamaJulie BernauerSiddharth Sharma

译者:奥特曼,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
Java TensorFlow 算法框架/工具
Android 中集成 TensorFlow Lite图片识别
Android 中集成 TensorFlow Lite图片识别
140 0
|
4月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
129 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
6月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
112 0
|
6月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
130 0
|
7月前
|
TensorFlow 算法框架/工具 C++
构建NLP 开发问题之如何将模型导出为 ONNX、TensorRT 或 Tensorflow 格式以便部署
构建NLP 开发问题之如何将模型导出为 ONNX、TensorRT 或 Tensorflow 格式以便部署
|
7月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
|
9月前
|
机器学习/深度学习 PyTorch TensorFlow
NumPy与TensorFlow/PyTorch的集成实践
【4月更文挑战第17天】本文探讨了NumPy与主流深度学习框架TensorFlow和PyTorch的集成实践,阐述了它们如何通过便捷的数据转换提升开发效率和模型性能。在TensorFlow中,NumPy数组可轻松转为Tensor,反之亦然,便于原型设计和大规模训练。PyTorch的张量与NumPy数组在内存中共享,实现无缝转换。尽管集成带来了性能和内存管理的考量,但这种结合为机器学习流程提供了强大支持,促进了AI技术的发展。
|
存储 算法 测试技术
LLMLingua:集成LlamaIndex,对提示进行压缩,提供大语言模型的高效推理
大型语言模型(llm)的出现刺激了多个领域的创新。但是在思维链(CoT)提示和情境学习(ICL)等策略的驱动下,提示的复杂性不断增加,这给计算带来了挑战。这些冗长的提示需要大量的资源来进行推理,因此需要高效的解决方案,本文将介绍LLMLingua与专有的LlamaIndex的进行集成执行高效推理。
371 2
|
人工智能 安全 Cloud Native
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
547 0
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
|
Cloud Native 安全 TensorFlow
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(2)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(2)
362 0

热门文章

最新文章