0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA TensorRT和NVIDIA Triton优化和提供模型

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-10-10 14:25 次阅读

假设您已经使用 PyTorch 、 TensorFlow 或您选择的框架训练了您的模型,并对其准确性感到满意,并且正在考虑将其部署为服务。有两个重要的目标需要考虑:最大化模型性能和构建将其部署为服务所需的基础设施。这篇文章讨论了这两个目标。

通过在三个堆栈级别上加速模型,可以从模型中挤出更好的性能:

硬件加速

软件加速

算法网络加速。

NVIDIA GPU深度学习从业者在硬件加速方面的首选,其优点在业界得到广泛讨论。

关于 GPU 软件加速的讨论通常围绕库,如 cuDNN 、 NCCL 、 TensorRT 和其他 CUDA-X 库。

算法或网络加速 围绕量化和知识提取等技术的使用,这些技术本质上是对网络本身进行修改,其应用高度依赖于您的模型。

这种加速需求主要是由业务问题驱动的,如降低成本或通过减少延迟来改善最终用户体验,以及战术考虑因素,如在计算资源较少的边缘设备上部署模型。

服务深度学习模型

在模型加速后,下一步是构建一个服务服务来部署您的模型,这会带来一系列独特的挑战。这是一个非详尽列表:

该服务能否在不同的硬件平台上工作?

它会处理我必须同时部署的其他模型吗?

服务是否可靠?

如何减少延迟?

使用不同的框架和技术堆栈训练模型;我该如何应对?

如何缩放?

这些都是有效的问题,解决每一个问题都是一个挑战。

pYYBAGNDuuqAVceWAADqD1qzO14050.png

图 1 。使用 TensorRT 和 NVIDIA Triton ®声波风廓线仪优化和部署 DL 模型

解决方案概述

本文讨论了使用 NVIDIA TensorRT 及其 PyTorch 和 TensorFlow 的框架集成、 NVIDIA Triton 推理服务器和 NVIDIA GPU 来加速和部署模型。

NVIDIA TensorRT 公司

NVIDIA TensorRT 是一个用于高性能深度学习推理的 SDK 。它包括深度学习推理优化器和运行时,为深度学习推理应用程序提供低延迟和高吞吐量。

通过其与 PyTorch 和 TensorFlow 的框架集成,只需一行代码就可以将推理速度提高 6 倍。

NVIDIA Triton 推理服务器

NVIDIA Triton 推理服务器是一种开源的推理服务软件,提供单一的标准化推理平台。它可以支持在数据中心、云、嵌入式设备或虚拟化环境中的任何 GPU 或基于 CPU 的基础设施上对来自多个框架的模型进行推理。

有关更多信息,请参阅以下视频:

介绍用于高性能深度学习推理的 NVIDIA TensorRT

NVIDIA Torch TensorRT 入门

TensorFlow TensorRT 入门

Triton 简化推理的五大原因

工作流概述

在深入细节之前,下面是总体工作流程。接下来,请参阅以下参考资料

TensorRT

Torch-TensorRT

Tensorflow-TensorRT

图 1 显示了您必须完成的步骤。

poYBAGNDuuuAUevcAAGU6D844Uo794.png

图 2 :使用 TensorRT 优化模型并使用 NVIDIA Triton ®声波风廓线仪的总体工作流程

在你开始跟随之前,准备好你训练过的模型。

第 1 步: 优化模型。您可以使用 TensorRT 或其框架集成来实现这一点。如果选择 TensorRT ,则可以使用 trtexec 命令行界面。对于与 TensorFlow 或 Pytorch 的框架集成,可以使用单行 API

第 2 步: 构建模型存储库。启动 NVIDIA Triton 推理服务器需要一个模型存储库。该存储库包含要提供服务的模型、指定详细信息的配置文件以及任何必需的元数据。

第 3 步: 启动服务器。

第 4 步: 最后,我们提供了简单而健壮的 HTTP 和 gRPC API ,您可以使用它们来查询服务器!

在本文中,使用 NGC 中的 Docker 容器。您可能需要创建一个帐户并获得 API key 来访问这些容器。现在,这里是细节!

使用 TensorRT 加速模型

TensorRT 通过图优化和量化加速模型。您可以通过以下任何方式获得这些好处:

trtexec CLI 工具

Python / C ++ API

Torch- TensorRT (与 PyTorch 集成)

TensorFlow- TensorRT (与 TensorFlow 集成)

poYBAGNDuuuATayeAAFcLIJiBhw280.png

图 3 。使用 TensorRT 或其框架集成优化模型

虽然 TensorRT 在本机上支持图形优化的更大定制,但框架集成为生态系统的新开发人员提供了易用性。由于选择用户可能采用的路由取决于其网络的特定需求,我们希望列出所有选项。有关更多信息,请参阅 使用 NVIDIA TensorRT 加速深度学习推理(更新) 。

对于 TensorRT ,有几种方法可以构建 TensorRT 引擎。对于本文,请使用 trtexec CLI 工具。如果您想要一个脚本来导出一个预训练的模型,请使用 export_resnet_to_onnx.py 示例。

docker run -it --gpus all -v /path/to/this/folder:/trt_optimize nvcr.io/nvidia/tensorrt:-py3 trtexec --onnx=resnet50.onnx \ --saveEngine=resnet50.engine \ --explicitBatch \ --useCudaGraph

要使用 FP16 ,请在命令中添加--fp16。在继续下一步之前,您必须知道网络输入层和输出层的名称,这是定义 NVIDIA Triton 模型存储库配置时所必需的。一种简单的方法是使用polygraphy,它与 TensorRT 容器一起打包。

polygraphy inspect model resnet50.engine --mode=basic

ForTorch TensorRT ,拉动NVIDIA PyTorch 容器,安装了 TensorRT 和火炬 TensorRT 。要继续,请使用sample。有关更多示例,请访问Torch-TensorRTGitHub repo 。

#  is the yy:mm for the publishing tag for NVIDIA's Pytorch # container; eg. 21.12 docker run -it --gpus all -v /path/to/this/folder:/resnet50_eg nvcr.io/nvidia/pytorch:-py3 python torch_trt_resnet50.py

为了扩展细节,您基本上使用 Torch- TensorRT 用 TensorRT 编译 PyTorch 模型。在幕后,您的模型被转换为 TorchScript 模块,然后对 TensorRT 支持的操作进行优化。有关更多信息,请参阅PyTorch – TensorRT 文件.

model = torch.hub.load('pytorch/vision:v0.10.0', 'resnet50', pretrained=True).eval().to("cuda") # Compile with Torch TensorRT;
trt_model = torch_tensorrt.compile(model, inputs= [torch_tensorrt.Input((1, 3, 224, 224))], enabled_precisions= { torch_tensorrt.dtype.float32} # Runs with FP32; can use FP16
) # Save the model
torch.jit.save(trt_model, "model.pt")

对于 TensorFlow TensorRT ,过程基本相同。首先,拉动NVIDIA TensorFlow Container,它与 TensorRT 和 TensorFlow TensorRT 一起提供。我们以short scripttf_trt_resnet50.py为例。有关更多示例,请参阅TensorFlow TensorRTgithub 回购。

#  is the yy:mm for the publishing tag for the NVIDIA Tensorflow
# container; eg. 21.12 docker run -it --gpus all -v /path/to/this/folder:/resnet50_eg nvcr.io/nvidia/tensorflow:-tf2-py3 python tf_trt_resnet50.py

同样,您基本上是使用 TensorFlow- TensorRT 用 TensorRT 编译 TensorFlow 模型。在幕后,您的模型被分割成包含 TensorRT 支持的操作的子图,然后进行优化。有关更多信息,请参阅张量流 – TensorRT 文档.

# Load model
model = ResNet50(weights='imagenet')
model.save('resnet50_saved_model') # Optimize with tftrt converter = trt.TrtGraphConverterV2(input_saved_model_dir='resnet50_saved_model')
converter.convert() # Save the model
converter.save(output_saved_model_dir='resnet50_saved_model_TFTRT_FP32')

现在,您已经使用 TensorRT 优化了模型,可以继续下一步,设置 NVIDIA Triton ®声波风廓线仪。

设置 NVIDIA Triton 推理服务器

NVIDIA Triton 推理服务器用于简化生产环境中大规模部署模型或模型集合。为了实现易用性和灵活性,使用 NVIDIA Triton 围绕着构建一个模型存储库,其中包含模型、用于部署这些模型的配置文件以及其他必要的元数据。

看看最简单的例子。图 4 有四个关键点。config.pbtxt文件( a )是前面提到的配置文件,其中包含模型的配置信息。

图 4 。设置 NVIDIA Triton 工作流

此配置文件中有几个要点需要注意:

Name: 此字段定义模型的名称,并且在模型存储库中必须是唯一的。

Platform: ( c )此字段用于定义模型的类型:是 TensorRT 引擎、 PyTorch 模型还是其他模型。

输入和输出: ( d )这些字段是必需的,因为 NVIDIA Triton 需要关于模型的元数据。本质上,它需要网络输入和输出层的名称以及所述输入和输出的形状。对于 TorchScript ,由于没有输入和输出层的名称,请使用input__0。数据类型设置为 FP32 ,输入格式指定为 3 、 224 、 224 的(通道、高度、宽度)。

该集合中的 TensorRT 、 Torch TensorRT 和 TensorFlow- TensorRT 工作流之间存在微小差异,其归结为指定平台并更改输入和输出层的名称。我们为所有三个( TensorRT 、 Torch-TensorRT 或 TensorFlow-TensorRT )制作了示例配置文件。最后,添加经过训练的模型( b )。

现在已经构建了模型存储库,您可以启动服务器了。为此,您只需拉动容器并指定模型存储库的位置。

docker run --gpus=1 --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v /full/path/to/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:-py3 tritonserver --model-repository=/models

随着服务器的启动和运行,您最终可以构建一个客户端来满足推理请求!

设置 NVIDIA Triton 客户端

管道中的最后一步是查询 NVIDIA Triton 推理服务器。您可以通过 HTTP 或 gRPC 请求向服务器发送推断请求。在深入细节之前,安装所需的依赖项并下载一个示例图像。

pip install torchvision
pip install attrdict
pip install nvidia-pyindex
pip install tritonclient[all] wget -O img1.jpg "https://bit.ly/3phN2jy"

在本文中,使用 Torchvision 将原始图像转换为适合 ResNet-50 模型的格式。客户不一定需要它。我们有更全面的 image client 和为 triton-inference-server/client GitHub repo 中可用的标准用例预先制作的大量不同的客户端。然而,对于这个解释,我们将使用一个简单得多的瘦客户端来演示 API 的核心。

好的,现在您已经准备好查看 HTTP 客户端(图 5 )。下载客户端脚本:

TensorRT

Torch-TensorRT

TensorFlow-TensorRT

图 5 。客户端工作流

构建客户端有以下步骤。首先,在 NVIDIA Triton 推理服务器和客户端之间建立连接。

triton_client = httpclient.InferenceServerClient(url="localhost:8000")

其次,传递图像并指定模型的输入和输出层的名称。这些名称应该与您在创建模型存储库时构建的配置文件中定义的规范一致。

test_input = httpclient.InferInput("input__0", transformed_img.shape, datatype="FP32")
test_input.set_data_from_numpy(transformed_img, binary_data=True) test_output = httpclient.InferRequestedOutput("output__0", binary_data=True, class_count=1000)

最后,向 NVIDIA Triton 推理服务器发送推理请求。

results = triton_client.infer(model_name="resnet50", inputs=[test_input], outputs=[test_output])

这些代码示例讨论了 Torch- TensorRT 模型的细节。不同模型(在构建客户端时)之间的唯一区别是输入和输出层名称。我们用 Python 、 C ++、 Go 、 Java 和 JavaScript 构建了 NVIDIA Triton 客户端。有关更多示例,请参阅 triton-inference-server/client GitHub repo 。

结论

这篇文章介绍了一个端到端的推理管道,您首先使用 TensorRT 、 Torch TensorRT 和 TensorFlow TensorRT 优化训练模型,以最大限度地提高推理性能。然后,通过设置和查询 NVIDIA Triton 推理服务器,对服务进行建模。

关于作者

Tanay Varshney 是 NVIDIA 的一名深入学习的技术营销工程师,负责广泛的 DL 软件产品。他拥有纽约大学计算机科学硕士学位,专注于计算机视觉、数据可视化和城市分析的横断面。

Jay Rodge 是 NVIDIA 的产品营销经理,负责深入学习和推理产品,推动产品发布和产品营销计划。杰伊在芝加哥伊利诺伊理工学院获得计算机科学硕士学位,主攻计算机视觉和自然语言处理。在 NVIDIA 之前,杰伊是宝马集团的人工智能研究实习生,为宝马最大的制造厂使用计算机视觉解决问题。

Nick Comly 是 NVIDIA 深度学习推理的产品经理。他致力于将 TensorRT 推理优化的功能直接应用于 PyTorch 、 TensorFlow 、 MXNet 、 ONNX 和飞浆等框架。 Nick 在斯坦福大学获得硕士学位,专攻深度学习和优化。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4841

    浏览量

    102689
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4662

    浏览量

    128539
  • 服务器
    +关注

    关注

    12

    文章

    8926

    浏览量

    85044
收藏 人收藏

    评论

    相关推荐

    在Ubuntu上使用Nvidia GPU训练模型

    问题最近在Ubuntu上使用Nvidia GPU训练模型的时候,没有问题,过一会再训练出现非常卡顿,使用nvidia-smi查看发现,显示GPU的风扇和电源报错:解决方案自动风扇控制在nvid
    发表于 01-03 08:24

    NVIDIA宣布其AI推理平台的重大更新

    软件的新功能,该软件为所有AI模型和框架提供跨平台推理;同时也包含对NVIDIA TensorRT的更新,该软件优化AI
    的头像 发表于 11-12 14:42 1893次阅读

    NVIDIA Triton推理服务器帮助Teams使用认知服务优化语音识别模型

    Microsoft Teams借助AI生成的实时字幕和转录功能,帮助全球学生和职场人士顺利进行在线会议。用于训练的NVIDIA AI计算技术和用于推理语音识别模型NVIDIA Triton
    的头像 发表于 01-04 17:45 1686次阅读

    Microsoft使用NVIDIA Triton加速AI Transformer模型应用

    Microsoft 的目标是,通过结合使用 Azure 与 NVIDIA GPU 和 Triton 推理软件,率先将一系列强大的 AI Transformer 模型投入生产用途。
    的头像 发表于 04-02 13:04 1712次阅读

    使用NVIDIA Triton推理服务器简化边缘AI模型部署

      NVIDIA Triton 有助于在每个数据中心、云和嵌入式设备中实现标准化的可扩展生产 AI 。它支持多个框架,在 GPU 和 DLA 等多个计算引擎上运行模型,处理不同类型的推理查询。通过与
    的头像 发表于 04-18 15:40 2684次阅读
    使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b>推理服务器简化边缘AI<b class='flag-5'>模型</b>部署

    NVIDIA Triton助力腾讯PCG加速在线推理

      借助NVIDIA Triton 推理框架,配合 DALI/FIL/Python 等Backend,以及 TensorRT,整体推理服务的吞吐能力最大提升 6 倍,延迟最大降低 40%。
    的头像 发表于 05-20 15:25 2289次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b>助力腾讯PCG加速在线推理

    基于NVIDIA Triton的AI模型高效部署实践

    NVIDIA Triton 推理服务器(以前称为 TensorRT 推理服务器)是一款开源软件,可简化深度学习模型在生产环境中的部署。借助 Trit
    的头像 发表于 06-28 15:49 1592次阅读

    NVIDIA 招聘 | NVIDIA 最新热招岗位!一起迎接未来加速计算!

    / LLM - TensorRT 工作内容: 围绕深度学习端到端 AI 软件全栈,包括但不限于:训练框架、核心计算库、推理优化工具(比如 TensorRT)、AI 编译器、模型压缩等
    的头像 发表于 06-14 18:35 901次阅读

    如何使用NVIDIA Triton 推理服务器来运行推理管道

    使用集成模型NVIDIA Triton 推理服务器上为 ML 模型管道提供服务
    的头像 发表于 07-05 16:30 1356次阅读
    如何使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b> 推理服务器来运行推理管道

    NVIDIA TensorRT与Apache Beam SDK的集成

    使用 NVIDIA TensorRT 在 Apache Beam 中简化和加速机器学习预测
    的头像 发表于 07-05 16:30 410次阅读

    即刻报名第三届 NVIDIA TensorRT Hackathon 生成式 AI 模型优化

    近日,由阿里云及 NVIDIA 联合举办的 “NVIDIA TensorRT Hackathon 2023 生成式 AI 模型优化赛”已正式
    的头像 发表于 07-17 19:45 527次阅读
    即刻报名第三届 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b> Hackathon 生成式 AI <b class='flag-5'>模型</b><b class='flag-5'>优化</b>赛

    学习资源 | NVIDIA TensorRT 全新教程上线

    NVIDIA TensorRT   是一个用于高效实现已训练好的深度学习模型推理过程的软件开发工具包,内含推理优化器和运行环境两部分,其目的在于让深度学习
    的头像 发表于 08-04 17:45 784次阅读
    学习资源 | <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b> 全新教程上线

    现已公开发布!欢迎使用 NVIDIA TensorRT-LLM 优化大语言模型推理

    NVIDIA 于 2023 年 10 月 19 日公开发布 TensorRT-LLM ,可在 NVIDIA GPU 上加速和优化最新的大语言模型
    的头像 发表于 10-27 20:05 908次阅读
    现已公开发布!欢迎使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b>-LLM <b class='flag-5'>优化</b>大语言<b class='flag-5'>模型</b>推理

    NVIDIA加速微软最新的Phi-3 Mini开源语言模型

    NVIDIA 宣布使用 NVIDIA TensorRT-LLM 加速微软最新的 Phi-3 Mini 开源语言模型TensorRT-LLM
    的头像 发表于 04-28 10:36 453次阅读

    NVIDIA助力提供多样、灵活的模型选择

    在本案例中,Dify 以模型中立以及开源生态的优势,为广大 AI 创新者提供丰富的模型选择。其集成的 NVIDIAAPI Catalog、NVIDIA NIM和
    的头像 发表于 09-09 09:19 403次阅读