概述#

本节演示如何使用 C++ 和 Python API 来实现最常见的深度学习层。它展示了如何使用提供的解析器,将使用深度学习框架构建的现有模型构建为 TensorRT 引擎。

示例#

示例支持指南 说明了本节中讨论的许多主题。

互补的 GPU 功能#

多实例 GPU,或 MIG,是 NVIDIA GPU 的一项功能,这些 GPU 采用 NVIDIA Ampere 架构或更高版本的架构,支持用户定向将单个 GPU 分区为多个较小的 GPU。物理分区提供专用的计算和内存切片,具有服务质量,并在 GPU 的一部分上独立执行并行工作负载。对于 GPU 利用率较低的 TensorRT 应用程序,MIG 可以产生更高的吞吐量,而几乎没有或没有延迟影响。最佳分区方案是特定于应用程序的。

互补软件#

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

NVIDIA DALI 为预处理图像、音频和视频数据提供了高性能的原语。TensorRT 推理可以作为 DALI 管道中的自定义运算符集成。关于 TensorRT 推理集成到 DALI 中的工作示例可以在 GitHub: DALI 上找到。

Torch-TensorRT (Torch-TRT) 是一个 PyTorch-TensorRT 编译器,可将 PyTorch 模块转换为 TensorRT 引擎。在内部,PyTorch 模块基于选定的中间表示 (IR) 转换为 TorchScript/FX 模块。编译器选择 PyTorch 图的子图,以便由 TensorRT 加速,同时让 Torch 本机执行图的其余部分。结果仍然是一个 PyTorch 模块,您可以像往常一样执行它。有关示例,请参阅 GitHub: Torch-TRT 示例

TensorFlow-Quantization Toolkit 提供了用于以降低的精度训练和部署基于 Tensorflow 2 的 Keras 模型的实用程序。此工具包专门基于运算符名称、类和模式匹配来量化图中的不同层。然后,可以将量化的图转换为 ONNX 和 TensorRT 引擎。例如,请参阅 模型动物园

PyTorch Quantization Toolkit 提供了以降低的精度训练模型的功能,然后可以导出这些模型以在 TensorRT 中进行优化。此外,PyTorch Automatic Sparsity (ASP) 工具提供了使用结构化稀疏性训练模型的功能,然后可以导出这些模型,并允许 TensorRT 在 NVIDIA Ampere 架构 GPU 上使用更快的稀疏策略。

TensorRT 与 NVIDIA 的分析工具 NVIDIA Nsight Systems 集成。

现在可以通过 NVIDIA 的 Nsight Deep Learning Designer 访问 TensorRT 的核心功能,Nsight Deep Learning Designer 是一个用于 ONNX 模型编辑、性能分析和 TensorRT 引擎构建的 IDE。

TensorRT 的一个受限子集已通过认证,可用于 NVIDIA DRIVE 产品。某些 API 标记为仅在 NVIDIA DRIVE 中使用,并且不支持通用用途。

ONNX#

TensorRT 从框架导入训练模型的首要方式是 ONNX 交换格式。TensorRT 附带一个 ONNX 解析器库,以帮助导入模型。在可能的情况下,解析器向后兼容到 opset 9;ONNX 模型 Opset 版本转换器 可以帮助解决不兼容性问题。

GitHub 版本 可能支持比 TensorRT 附带的版本更新的 opset。有关受支持的 opset 和运算符的最新信息,请参阅 ONNX-TensorRT 运算符支持矩阵。对于 TensorRT 部署,我们建议导出到最新的可用 ONNX opset。

TensorRT 的 ONNX 运算符支持列表可以在 GitHub: 受支持的 ONNX 运算符 上找到。

PyTorch 本机支持 ONNX 导出。对于 TensorFlow,推荐的方法是 tf2onnx

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

代码分析工具#

有关将 Valgrind 和 Clang sanitizer 工具与 TensorRT 一起使用的指南,请参阅 故障排除 部分。

API 版本控制#

TensorRT 版本号 (MAJOR.MINOR.PATCH) 遵循 语义版本控制 2.0.0,用于其公共 API 和库 ABI。版本号更改如下

  1. 进行不兼容的 API 或 ABI 更改时,MAJOR 版本会更改

  2. 以向后兼容的方式添加功能时,MINOR 版本会更改

  3. 进行向后兼容的错误修复时,PATCH 版本会更改

请注意,语义版本控制不扩展到序列化对象。要重用 plan 文件和计时缓存,版本号必须在主要版本、次要版本、补丁版本和构建版本之间匹配(对于安全运行时,NVIDIA DRIVE OS 6.5 开发人员指南中详细说明了一些例外情况)。校准缓存通常可以在主要版本内重用,但不保证超出特定补丁版本的兼容性。

弃用策略#

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

  • 弃用通知在 发行说明 中传达。

  • 使用 C++ API 时

    • API 函数标有 TRT_DEPRECATED_API 宏。

    • 枚举标有 TRT_DEPRECATED_ENUM 宏。

    • 所有其他位置都标有 TRT_DEPRECATED 宏。

    • 类、函数和对象将有一个语句记录它们何时被弃用。

  • 使用 Python API 时,如果使用了已弃用的方法和类,则会在运行时发出弃用警告。

  • TensorRT 在弃用后提供 12 个月的迁移期。

  • API 和工具在迁移期间继续工作。

  • 迁移期结束后,API 和工具将以与语义版本控制一致的方式删除。

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

硬件支持生命周期#

TensorRT 8.5.3 是最后一个支持 NVIDIA Kepler (SM 3.x) 和 NVIDIA Maxwell (SM 5.x) 设备的版本。这些设备在 TensorRT 8.6 中不再受支持。NVIDIA Pascal (SM 6.x) 设备在 TensorRT 8.6 中已弃用。TensorRT 10.4 是最后一个支持 NVIDIA Volta (SM 7.0) 设备的版本。有关更多信息,请参阅 支持矩阵 部分。

支持#

有关 TensorRT 的支持、资源和信息,请访问在线 https://developer.nvidia.com/tensorrt。这包括博客、示例等。

此外,您可以访问 NVIDIA DevTalk TensorRT 论坛 https://devtalk.nvidia.com/default/board/304/tensorrt/,以了解所有与 TensorRT 相关的内容。此论坛提供了查找答案、建立联系以及参与与客户、开发人员和 TensorRT 工程师讨论的可能性。

报告错误#

NVIDIA 感谢所有类型的反馈。如果您遇到任何问题,请按照 报告 TensorRT 问题 部分中的说明报告问题。