AI学习者 · 2022年10月18日

TensorRT系列 | 开篇

1.手册简介

NVIDIA® TensorRT™ 是一个促进高性能机器学习推理的 SDK。它旨在与 TensorFlow、PyTorch 和 MXNet 等训练框架以互补的方式工作。它特别专注于在 NVIDIA 硬件上快速高效地运行已经训练好的网络。有关如何安装 TensorRT 的说明,请参阅 NVIDIA TensorRT 安装指南[1]。

NVIDIA TensorRT 快速入门指南[2]适用于想要试用 TensorRT SDK 的用户;具体来说,您将学习如何快速构建应用程序以在 TensorRT 引擎上运行推理。

1.1. Structure of this Guide

第 1 章提供了有关如何打包和支持 TensorRT 以及它如何融入开发者生态系统的信息。

第 2 章提供了对 TensorRT 功能的广泛概述。

第 3 章和第 4 章分别介绍了 C++ 和 Python API。

后续章节提供有关高级功能的更多详细信息。

附录包含网络层参考和常见问题解答。

1.2. Samples

NVIDIA TensorRT 示例支持指南[3]说明了本手册中讨论的许多主题。可在此处找到其他侧重于嵌入式应用程序的示例。

1.3. Complementary GPU Features

多实例 GPU[4]或 MIG 是具有 NVIDIA Ampere 架构或更高架构的 NVIDIA GPU 的一项功能,可实现用户控制的将单个 GPU 划分为多个较小 GPU 的功能。物理分区提供具有 QoS 的专用计算和内存切片,并在 GPU 的一部分上独立执行并行工作负载。对于 GPU 利用率低的 TensorRT 应用程序,MIG 可以在对延迟影响很小或没有影响的情况下产生更高的吞吐量。最佳分区方案是特定于应用程序的。

1.4. Complementary Software

NVIDIA Triton™[5]推理服务器是一个更高级别的库,可提供跨 CPU 和 GPU 的优化推理。它提供了启动和管理多个模型的功能,以及用于服务推理的 REST 和 gRPC 端点。

NVIDIA DALI ®[6]为预处理图像、音频和视频数据提供高性能原语。TensorRT 推理可以作为自定义算子集成到 DALI 管道中。可以在此处[7]找到作为 DALI 的一部分集成的 TensorRT 推理的工作示例。

TensorFlow-TensorRT (TF-TRT)[8]是将 TensorRT 直接集成到 TensorFlow 中。它选择 TensorFlow 图的子图由 TensorRT 加速,同时让图的其余部分由 TensorFlow 本地执行。结果仍然是您可以照常执行的 TensorFlow 图。有关 TF-TRT 示例,请参阅TensorFlow 中的 TensorRT 示例[9]。

PyTorch 量化工具包[10]提供了以降低精度训练模型的工具,然后可以将其导出以在 TensorRT 中进行优化。

此外, PyTorch Automatic SParsity (ASP)[11]工具提供了用于训练具有结构化稀疏性的模型的工具,然后可以将其导出并允许 TensorRT 在 NVIDIA Ampere GPU 上利用更快的稀疏策略。

TensorRT 与 NVIDIA 的分析工具、 NVIDIA Nsight™ Systems[12]和NVIDIA® Deep Learning Profiler (DLProf)[13]集成。

TensorRT 的一个受限子集经过认证可用于NVIDIA DRIVE ®[14]产品。某些 API 被标记为仅在 NVIDIA DRIVE 中使用,不支持一般用途。

1.5. ONNX

TensorRT 从框架中导入训练模型的主要方式是通过ONNX[15]交换格式。TensorRT 附带一个 ONNX 解析器库来帮助导入模型。在可能的情况下,解析器向后兼容 opset 7;ONNX模型 Opset 版本转换器[16]可以帮助解决不兼容问题。

GitHub 版本[17]可能支持比 TensorRT 附带的版本更高的 opset,请参阅 ONNX-TensorRT运算符支持矩阵[18]以获取有关受支持的 opset 和运算符的最新信息。

TensorRT 的 ONNX 算子支持列表可在此处[19]找到。

PyTorch 原生支持ONNX 导出[20]。对于 TensorFlow,推荐的方法是tf2onnx[21] 。

将模型导出到 ONNX 后的第一步是使用Polygraphy[22]运行常量折叠。这通常可以解决 ONNX 解析器中的 TensorRT 转换问题,并且通常可以简化工作流程。有关详细信息,请参阅此示例[23]。在某些情况下,可能需要进一步修改 ONNX 模型,例如,用插件替换子图或根据其他操作重新实现不受支持的操作。为了简化此过程,您可以使用ONNX-GraphSurgeon[24] 。

1.6. Code Analysis Tools

有关在 TensorRT 中使用 valgrind 和 clang sanitizer 工具的指导,请参阅故障排除[25]章节。

1.7. API Versioning

TensorRT 版本号 (MAJOR.MINOR.PATCH) 遵循Semantic Versioning 2.0.0的公共 API 和库 ABI。版本号变化如下:

  1. 进行不兼容的 API 或 ABI 更改时的主要版本
  2. 以向后兼容的方式添加功能时的次要版本
  3. 进行向后兼容的错误修复时的 PATCH 版本

请注意,语义版本控制不会扩展到序列化对象。要重用计划文件和时序缓存,版本号必须在主要、次要、补丁和构建版本之间匹配。校准缓存通常可以在主要版本中重复使用,但不保证兼容性。

1.8. Deprecation Policy

弃用用于通知开发人员不再推荐使用某些 API 和工具。从 8.0 版本开始,TensorRT 具有以下弃用政策:

  • 弃用通知在发行说明中传达。已弃用的 API 元素在可能的情况下使用TRT_DEPRECATED宏进行标记。
  • TensorRT 在弃用后提供 12 个月的迁移期。
  • API 和工具在迁移期间继续工作。
  • 迁移期结束后,API 和工具会以符合语义版本控制的方式移除。

对于在 TensorRT 7.x 中明确弃用的任何 API 和工具,12 个月的迁移期从 TensorRT 8.0 GA 发布日期开始。

作者: ChaucerG
文章来源:集智书童

推荐阅读

更多嵌入式AI干货请关注 嵌入式AI 专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
18810
内容数
1352
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息