Sample Support Guide#

以下示例展示了如何在众多用例中使用 NVIDIA TensorRT,同时突出了接口的不同功能。

注意

TensorRT 示例仅供说明之用,不应被用作或视为生产质量的代码示例。

TensorRT 示例#

示例标题

TensorRT 示例名称

描述

trtexec

trtexec

一个无需开发应用程序即可快速利用 TensorRT 的工具。

ONNX 的 TensorRT “Hello World”

sampleOnnxMNIST

将 ONNX 格式的 MNIST 数据集上训练的模型转换为 TensorRT 网络。

逐层构建 RNN 网络

sampleCharRNN

它使用 TensorRT API 逐层构建 RNN 网络,设置权重和输入/输出,然后执行推理。

以 INT8 精度执行推理

sampleINT8API

设置每张量动态范围和层的计算精度。

指定 I/O 格式

sampleIOFormats

它使用在 MNIST 数据集上训练的 Onnx 模型,并使用 TensorRT 执行引擎构建和推理。然后将输出的正确性与黄金参考进行比较。

TensorRT 中具有动态形状的数字识别

sampleDynamicReshape

演示如何在 TensorRT 中使用动态输入维度,方法是为动态形状输入创建引擎,以将大小调整为 ONNX MNIST 模型的正确大小。

使用可编辑的计时缓存创建确定性构建

sampleEditableTimingCache

演示如何通过修改计时缓存来构建具有所需策略的引擎。

使用 Python 将 ONNX 模型导入 TensorRT 简介

introductory_parser_samples

它使用 TensorRT(包括 ONNX 解析器)对使用各种框架训练的 ResNet-50 模型执行推理。

使用 PyTorch 和 Python 的 TensorRT “Hello World”

network_api_pytorch_mnist

一个端到端示例,在 PyTorch 中训练模型,在 TensorRT 中重建网络,从训练模型导入权重,最后使用 TensorRT 引擎运行推理。

编写 TensorRT 插件以在 ONNX 模型中使用自定义层

onnx_custom_plugin

将 Hardmax 层实现为 TensorRT 插件,并使用它在 TensorRT 中运行 ONNX BiDAF 问答模型。

Python 中使用 ONNX TensorRT 后端的对象检测

yolov3_onnx

实现了一个完整的基于 ONNX 的管道,用于使用 YOLOv3-608 网络执行推理,包括预处理和后处理。

Python 中具有自定义层的 ONNX 模型的 TensorRT 推理

onnx_packnet

使用 TensorRT 对 PackNet 网络执行推理。此示例演示了如何在 ONNX 图中使用自定义层以及如何使用 ONNX-graphsurgeon API 处理它们。

在 Python 中重新拟合从 ONNX 模型构建的引擎

engine_refit_onnx_bidaf

从 ONNX BiDAF 模型构建引擎,并使用模型中的权重重新拟合 TensorRT 引擎。

Python 中使用 EfficientDet 网络进行可扩展且高效的对象检测

efficientdet

示例应用程序,用于演示使用 TensorRT 转换和执行 Google EfficientDet 模型。

Python 中使用 EfficientNet 网络进行可扩展且高效的图像分类

efficientnet

示例应用程序,用于演示使用 TensorRT 转换和执行 Google EfficientNet 模型。

在 TensorRT 中使用自定义插件和 sampleOnnxMnistCoordConvAC 在 TensorRT 中实现 CoordConv

sampleOnnxMnistCoordConvAC

包含自定义 CoordConv 层。它将 ONNX 格式的 MNIST 数据集上训练的模型转换为 TensorRT 网络,并在该网络上运行推理。

Python 中使用 TensorFlow Object Detection API Model Zoo 网络的物体检测

tensorflow_object_detection_api

演示使用 TensorRT 转换和执行 Tensorflow Object Detection API Model Zoo 模型。

Python 中使用 Detectron 2 Mask R-CNN R50-FPN 3x 网络的物体检测

detectron2

演示使用 TensorRT 转换和执行 Detectron 2 Model Zoo Mask R-CNN R50-FPN 3x 模型。

使用具有命名输入维度的 ONNX 模型

sampleNamedDimensions

解析具有命名输入维度的 ONNX 模型并为其构建引擎的示例。

引擎构建期间进度监视器的使用

  • sampleProgressMonitor (C++)

  • simple_progress_reporter (Python)

C++ 和 Python 示例,用于在引擎构建期间使用进度监视器。

基于 Python 的 TensorRT 插件

python_plugin

展示 TensorRT 中基于 Python 的插件定义。

构建和重新拟合权重剥离引擎

sample_weight_stripping

展示从 ONNX 模型构建和重新拟合权重剥离引擎。

具有数据相关输出形状的插件 NonZero

sampleNonZeroPlugin

演示具有数据相关输出形状的插件。

具有数据相关输出形状的 Python 插件 NonZero

non_zero_plugin

演示基于 Python 的具有数据相关输出形状的插件。

使用具有别名 I/O 的插件来实现就地更新

aliased_io_plugin

演示具有别名 I/O 的插件。

快速部署的 TensorRT Python 插件

quickly_deployable_plugins

基于装饰器的方法,用于定义具有更简单语义且需要更少代码的 TensorRT Python 插件。

C++ 示例入门#

您可以在 /usr/src/tensorrt/samples 包目录和 GitHub 上找到 C++ 示例。以下 C++ 示例随 TensorRT 一起提供

C++ 示例入门

每个 C++ 示例在 GitHub 中都包含一个 README.md 文件,其中提供了有关示例如何工作、示例代码以及有关如何运行和验证其输出的分步说明的详细信息。

在 Linux 上运行 C++ 示例

如果您使用 Debian 文件安装了 TensorRT,请在构建 C++ 示例之前将 /usr/src/tensorrt 复制到新目录。如果您使用 tar 文件安装了 TensorRT,则示例位于 {TAR_EXTRACT_PATH}/samples 中。要构建所有示例,然后运行其中一个示例,请使用以下命令

$ cd <samples_dir>
$ make -j4
$ cd ../bin
$ ./<sample_bin>

在 Windows 上运行 C++ 示例

Windows 上的所有 C++ 示例均以 Visual Studio 解决方案文件的形式提供。要构建示例,请打开其对应的 Visual Studio 解决方案文件并构建解决方案。输出可执行文件将在 (ZIP_EXTRACT_PATH)\bin 中生成。然后,您可以直接或通过 Visual Studio 运行可执行文件。

Python 示例入门#

您可以在 /usr/src/tensorrt/samples/python 包目录中找到 Python 示例。以下 Python 示例随 TensorRT 一起提供

Python 示例入门

每个 C++ 示例在 GitHub 中都包含一个 README.md 文件,其中提供了有关示例如何工作、示例代码以及有关如何运行和验证其输出的分步说明的详细信息。

运行 Python 示例

要运行其中一个 Python 示例,该过程通常涉及两个步骤

  1. 安装示例要求。

    python<x> -m pip install -r requirements.txt
    

    其中 python<x>python2python3

  2. 如果 TensorRT 示例数据不在默认位置,请使用提供的数据目录运行示例代码。例如

    python<x> sample.py [-d DATA_DIR]
    

有关运行示例的更多信息,请参阅示例随附的 README.md 文件。

交叉编译示例#

以下部分介绍如何在 x86_64 Linux 下为 AArch64 QNX 和 Linux 平台交叉编译 TensorRT 示例。

先决条件#

本节提供分步说明,以确保您满足交叉编译的最低要求。

  1. 为相应的目标安装 CUDA 跨平台工具包,并设置环境变量 CUDA_INSTALL_DIR

    $ export CUDA_INSTALL_DIR="your cuda install dir"
    

    其中 CUDA_INSTALL_DIR 默认设置为 /usr/local/cuda

    注意

    如果您使用网络存储库安装 TensorRT,那么最好先安装 cuda-toolkit-X-Ycuda-cross-<arch>-X-Y 软件包,以确保您拥有构建 TensorRT 示例所需的所有 CUDA 依赖项。

  2. 为相应的目标安装 TensorRT 交叉编译 Debian 软件包。

    注意

    使用目标平台的 tar 文件发行版可以安全地跳过此步骤。tar 文件发行版已经包含交叉编译库,因此不需要其他软件包。

    • QNX AArch64:tensorrt-dev-cross-qnx

    • Linux AArch64:tensorrt-dev-cross-aarch64

    • Linux SBSA:tensorrt-dev-cross-sbsa

为 QNX AArch64 构建示例#

本节提供有关如何为 QNX 用户构建示例的分步说明。

  1. 下载 QNX 工具链并导出以下环境变量。

    $ export QNX_HOST=/path/to/your/qnx/toolchain/host/linux/x86_64
    $ export QNX_TARGET=/path/to/your/qnx/toolchain/target/qnx7
    
  2. 构建示例。

    $ cd /path/to/TensorRT/samples
    $ make TARGET=qnx
    

为 Linux AArch64 构建示例#

本节提供有关如何为 JetPack 用户构建示例的分步说明。

  1. 安装相应的 GCC 编译器 aarch64-linux-gnu-g++

    $ sudo apt-get install g++-aarch64-linux-gnu
    
  2. 构建示例。

    $ cd /path/to/TensorRT/samples
    $ make TARGET=aarch64
    

为 Linux SBSA 构建示例#

本节提供有关如何为 Linux SBSA 用户构建示例的分步说明。

  1. 安装相应的 GCC 编译器 aarch64-linux-gnu-g++

    $ sudo apt-get install g++-aarch64-linux-gnu
    
  2. 构建示例。

    $ cd /path/to/TensorRT/samples
    $ make TARGET=aarch64 ARMSERVER=1 DLSW_TRIPLE=aarch64-linux-gnu CUDA_TRIPLE=sbsa-linux CUDA_INSTALL_DIR=<cuda-cross-dir>
    

使用静态库构建示例#

本节演示了如何使用 TensorRT 静态库(包括静态链接的其他 CUDA 库)构建 TensorRT 示例。如果您选择使用 TensorRT 静态库构建应用程序,则 TensorRT 示例可以用作指南。

注意

如果您希望静态构建 TensorRT 示例,则必须使用 tar 包,因为某些库(包括一些必需的依赖静态库和链接器脚本)未包含在 Debian 或 RPM 包中。此外,仅 Linux x86 平台支持静态构建 TensorRT 示例,而不支持 AArch64 或 PowerPC。

要使用 TensorRT 静态库构建 TensorRT 示例,可以使用以下命令。

$ make TRT_STATIC=1

您应该附加您通常包含的任何其他 Make 参数,例如 TARGET 以指示 CPU 架构,或 CUDA_INSTALL_DIR 以指示 CUDA 在您的系统上的安装位置。TRT_STATIC make 选项创建的静态示例二进制文件将在输出目录中的文件名后附加后缀 _static,以将其与动态示例二进制文件区分开来。

局限性#

需要使用用于构建 TensorRT 的 CUDA 工具包的相同 major.minor.patch 版本来构建应用程序。由于符号不能像动态库那样在静态二进制文件中隐藏或重复,因此使用相同的 CUDA 工具包版本可以减少符号冲突、不兼容或不良行为的可能性。

如果在链接器命令行中包含 libnvinfer_static.alibnvinfer_plugin_static.a,请考虑使用以下链接器标志,以确保所有 CUDA 内核和 TensorRT 插件都包含在最终应用程序中。

-Wl,-whole-archive -lnvinfer_static -Wl,-no-whole-archive
-Wl,-whole-archive -lnvinfer_plugin_static -Wl,-no-whole-archive

如果使用低于 11.x 的 GCC 版本构建 TensorRT 示例,则可能需要 RedHat GCC Toolset 11 非共享 libstdc++ 库,以避免在链接期间丢失 C++ 标准库符号。您可以按照以下单行命令获取此额外的静态库,前提是您的系统上已安装此命令所需的程序。

$ curl -s https://dl.rockylinux.org/pub/rocky/8/AppStream/x86_64/os/Packages/g/gcc-toolset-11-libstdc%2B%2B-devel-11.2.1-9.2.el8_9.x86_64.rpm | rpm2cpio - | bsdtar --strip-components=10 -xf - '*/libstdc++_nonshared.a'

假设您正在使用低于 11.x 的 GCC 版本构建 TensorRT 应用程序。在这种情况下,您可能需要以下链接器选项,以确保在应用程序中使用正确的 C++ 标准库符号。链接时,您的应用程序对象文件必须位于 TensorRT 静态库之后,并完全存档所有 TensorRT 静态库,以确保使用 RedHat GCC Toolset 中较新的 C++ 标准库符号。需要进行此更改以避免 TensorRT 中可能导致崩溃的未定义行为。

-Wl,--start-group -Wl,-whole-archive -lnvinfer_static -lnvinfer_plugin_static -lnvonnxparser_static -Wl,-no-whole-archive <object_files> -Wl,--end-group

如果生成的二进制文件超过 2 GB,您可能会在链接期间观察到重定位问题。如果您静态链接 TensorRT 及其所有依赖项到您的应用程序中,则可能会发生这种情况。要解决此问题,您应将 GPU 代码移至二进制文件的末尾。这可能需要以下链接器脚本和以下选项 -mcmodel=large-Wl,<path/to/fatbin.ld>fatbin.ld 的内容在下面列出。

SECTIONS
{
.nvFatBinSegment : { *(.nvFatBinSegment) }
.nv_fatbin : { *(.nv_fatbin) }
}

注意

由于 gcc-toolset-11 链接器中的错误,您可能需要使用 gcc-toolset-13 来链接应用程序。当使用 ld.gold 链接 libcudart_static.a 时,此错误最常发生,这会破坏异常处理,而是导致引发中止。

机器理解#

机器理解系统将文本从一种语言翻译成另一种语言,根据特定上下文进行预测或回答问题。循环神经网络 (RNN) 是最流行的机器理解深度学习解决方案之一。

逐层构建 RNN 网络#

此示例有何作用?

此示例 sampleCharRNN 使用 TensorRT API 逐层构建 RNN 网络,设置权重和输入/输出,然后执行推理。具体来说,此示例创建了一个在 Tiny Shakespeare 数据集上训练的 CharRNN 网络。有关字符级建模的更多信息,请参阅 char-rnn

TensorFlow 有一个有用的 RNN 教程,可用于训练词级模型。词级模型学习所有可能的单词序列的概率分布。由于我们的目标是训练字符级模型,该模型学习一组所有可能的字符的概率分布,因此需要对 TensorFlow 示例进行一些修改才能使其工作。这些修改可以在 此处 查看。

此示例位于何处?

此示例维护在 GitHub:sampleCharRNN 存储库的 samples/sampleCharRNN 目录下。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleCharRNN。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleCharRNN

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:sampleCharRNN/README.md 文件。它提供了有关其工作原理、示例代码以及有关运行和验证其输出的分步说明的详细信息。

在 Python 中重新拟合从 ONNX 模型构建的引擎#

此示例有何作用?

此示例 engine_refit_onnx_bidaf 从 ONNX BiDAF 模型构建引擎,并使用模型中的权重重新拟合 TensorRT 引擎。新的重新拟合 API 允许用户通过 ONNX 模型中的名称而不是层名称和权重角色来定位权重。

在第一次传递中,权重 “Parameter576_B_0” 使用空值重新拟合,导致不正确的推理结果。我们在第二次传递中使用实际权重重新拟合引擎并再次运行推理。现在权重设置正确,推理应提供正确的结果。

默认情况下,引擎将使用 GPU 权重重新拟合。可以使用选项 --weights-location CPU 更改此行为。

此示例位于何处?

此示例维护在 GitHub:engine_refit_onnx_bidaf 存储库的 samples/python/engine_refit_onnx_bidaf 目录下。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/engine_refit_onnx_bidaf。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/engine_refit_onnx_bidaf

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:engine_refit_onnx_bidaf/README.md 文件。它提供了有关其工作原理、示例代码以及有关运行和验证其输出的分步说明的详细信息。

编写 TensorRT 插件以在 ONNX 模型中使用自定义层#

此示例有何作用?

此示例 onnx_custom_plugin 演示了如何使用 C++ 编写的插件在具有自定义层或不受支持的层的 ONNX 模型上运行 TensorRT。此示例实现了一个 Hardmax 层,并使用它通过 TensorRT ONNX 解析器和 Python API 运行 BiDAF 问答模型。

此示例位于何处?

此示例维护在 GitHub:onnx_custom_plugin 存储库的 samples/python/onnx_custom_plugin 目录下。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/onnx_custom_plugin。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/onnx_custom_plugin

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:/onnx_custom_plugin/README.md 文件。它提供了有关其工作原理、示例代码以及有关运行和验证其输出的分步说明的详细信息。

字符识别#

字符识别,尤其是在 MNIST 数据集上,是一个经典的机器学习问题。MNIST 问题涉及识别手写数字图像中的数字。

ONNX 的 TensorRT “Hello World”#

此示例有何作用?

此示例 sampleOnnxMNIST 将 ONNX 格式的 MNIST 数据集上训练的模型转换为 TensorRT 网络,并在该网络上运行推理。

ONNX 是表示深度学习模型的标准,使模型能够在框架之间传输。

此示例位于何处?

此示例维护在 GitHub:sampleOnnxMNIST 存储库的 samples/sampleOnnxMNIST 目录下。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleOnnxMNIST。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleOnnxMNIST

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:sampleOnnxMNIST/README.md 文件。它提供了有关其工作原理、示例代码以及有关运行和验证其输出的分步说明的详细信息。

TensorRT 中具有动态形状的数字识别#

此示例有何作用?

此示例 sampleDynamicReshape 演示了如何在 TensorRT 中使用动态输入维度,方法是为动态形状输入创建引擎,以将大小调整为 ONNX MNIST 模型的正确大小。有关更多信息,请参阅 使用动态形状 部分。

此示例创建一个引擎,用于将具有动态维度的输入大小调整为 ONNX MNIST 模型可以消耗的大小。

具体来说,此示例演示了如何

  • 创建具有动态输入维度的网络,以充当模型的预处理器

  • 解析 ONNX MNIST 模型以创建第二个网络

  • 为两个网络构建引擎,并在以 INT8 运行时启动校准

  • 使用两个引擎运行推理

此示例位于何处?

此示例维护在 GitHub:sampleDynamicReshape 存储库的 samples/sampleDynamicReshape 目录下。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleDynamicReshape。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleDynamicReshape

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:sampleDynamicReshape/README.md 文件。它提供了有关其工作原理、示例代码以及有关运行和验证其输出的分步说明的详细信息。

指定 I/O 格式#

此示例有何作用?

此示例 sampleIOFormats 使用在 MNIST 数据集上训练的 ONNX 模型,并使用 TensorRT 执行引擎构建和推理。然后将输出的正确性与黄金参考进行比较。具体来说,它展示了如何为 Float16 和 INT8 精度显式指定 TensorFormat::kLINEARTensorFormat::kCHW2TensorFormat::kHWC8 的 I/O 格式。

调用 ITensor::setAllowedFormats 以指定使用的格式。

此示例位于何处?

此示例维护在 GitHub:sampleIOFormats 存储库的 samples/sampleIOFormats 目录下。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleIOFormats。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleIOFormats

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:sampleIOFormats/README.md 文件。它提供了有关其工作原理、示例代码以及有关运行和验证其输出的分步说明的详细信息。

使用 PyTorch 和 Python 的 TensorRT “Hello World”#

此示例有何作用?

此示例 network_api_pytorch_mnist 在 MNIST 数据集上训练卷积模型,并使用 TensorRT 引擎运行推理。

此示例位于何处?

此示例维护在 samples/python/network_api_pytorch_mnist 目录下的 GitHub: network_api_pytorch_mnist 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/network_api_pytorch。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/network_api_pytorch

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: /network_api_pytorch_mnist/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

在 TensorRT 中使用自定义插件实现 CoordConv,使用 TensorRT 中的 sampleOnnxMnistCoordConvAC#

此示例有何作用?

此示例 sampleOnnxMnistCoordConvAC 将以开放神经网络交换 (ONNX) 格式在 MNIST 数据集上训练的模型转换为 TensorRT 网络,并在该网络上运行推理。此模型在 PyTorch 中训练,包含自定义 CoordConv 层而不是 Conv 层。

带有 CoordConvAC 层的模型训练脚本和 PyTorch 中 CoordConv 层的代码 在此。带有 Conv 层的原始模型 在此

此示例在经过 CoordConv 层训练的 MNIST 的 ONNX 模型上创建并运行 TensorRT 引擎。它演示了 TensorRT 如何解析和导入 ONNX 模型,以及如何使用插件在神经网络中运行自定义层。

此示例位于何处?

此示例维护在 samples/sampleOnnxMnistCoordConvAC 目录下的 GitHub:sampleOnnxMnistCoordConvAC 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleOnnxMnistCoordConvAC。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleOnnxMnistCoordConvAC

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:/sampleOnnxMnistCoordConvAC/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用可编辑的 Timing Cache 创建确定性构建#

此示例有何作用?

此示例 sampleEditableTimingCache 说明了如何修改 timing cache 以构建具有所需策略的引擎。

在 TensorRT 中,某些层可能有多个实现,称为策略。构建引擎时,将分析所有策略,并选择最快的策略并写入 TimingCache。在某些情况下,预期的策略不是最快的,用户必须用另一个策略替换最佳策略。可以通过编辑 timing cache 来满足此要求。此示例演示了如何使用 Timing Cache 编辑 API 和分析日志来实现此目的。

此示例位于何处?

此示例维护在 samples/sampleEditableTimingCache 目录下的 GitHub:sampleEditableTimingCache 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleEditableTimingCache。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleEditableTimingCache

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub:/sampleEditableTimingCache/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

图像分类#

图像分类是识别图像中存在的一个或多个对象的问题。卷积神经网络 (CNN) 在解决此问题方面很受欢迎。它们通常由卷积层和池化层组成。

以 INT8 精度执行推理#

此示例有何作用?

此示例 sampleINT8API 在不使用 INT8 校准器的情况下执行 INT8 推理,而是使用用户提供的每个激活张量动态范围。INT8 推理仅在计算能力为 6.1 或 7.x 的 GPU 上可用,并支持图像分类 ONNX 模型,例如 ResNet-50、VGG19 和 MobileNet。

具体来说,此示例演示了如何

  • 使用 nvinfer1::ITensor::setDynamicRange 设置每个张量的动态范围

  • 使用 nvinfer1::ILayer::setPrecison 设置层的计算精度

  • 使用 nvinfer1::ILayer::setOutputType 设置层的输出张量数据类型

  • 在不使用 INT8 校准的情况下执行 INT8 推理

此示例位于何处?

此示例维护在 samples/sampleINT8API 目录下的 GitHub: sampleINT8API 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleINT8API。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleINT8API

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: sampleINT8API/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用 Python 将 ONNX 模型导入 TensorRT 简介#

此示例有何作用?

此示例 introductory_parser_samples 是一个 Python 示例,它使用 TensorRT,并且包含一个 ONNX 解析器,用于对使用各种框架训练的 ResNet-50 模型执行推理。

此示例位于何处?

此示例维护在 samples/python/introductory_parser_samples 目录下的 GitHub: introductory_parser_samples 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/introductory_parser_samples。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/introductory_parser_samples

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: introductory_parser_samples/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用 Python 对带有自定义层的 ONNX 模型进行 TensorRT 推理#

此示例有何作用?

此示例 onnx_packnet 使用 TensorRT 对 PackNet 网络执行推理。PackNet 是一种用于自动驾驶的自监督单目深度估计网络。

此示例将 PyTorch 图转换为 ONNX,并使用 TensorRT 中包含的 ONNX 解析器来解析 ONNX 图。该示例还演示了如何

  • 在 ONNX 图中使用自定义层(插件)。REGISTER_TENSORRT_PLUGIN API 自动在 TensorRT 中注册插件。

  • 使用 ONNX GraphSurgeon (ONNX-GS) API 修改 ONNX 图中的层或子图。对于此网络,我们转换组归一化、上采样和填充层,以删除使用 TensorRT 进行推理的不必要节点。

此示例位于何处?

此示例维护在 samples/python/onnx_packnet 目录下的 GitHub: onnx_packnet 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/onnx_packnet。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/onnx_packnet

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: onnx_packnet/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用 Python 中的 EfficientNet 网络进行可扩展且高效的图像分类#

此示例有何作用?

此 efficientnet 示例展示了如何使用 TensorRT 转换和执行 Google EfficientNet 模型。该示例支持来自原始 EfficientNet 实现和较新的 EfficientNet V2 模型的模型。示例代码将 TensorFlow 保存的模型转换为 ONNX,然后构建 TensorRT 引擎。还可以使用示例中提供的辅助脚本执行推理和准确性验证。

此示例位于何处?

此示例维护在 samples/python/efficientnet 目录下的 GitHub: efficientnet 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/efficientnet。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/efficientnet

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: efficientnet/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

对象检测#

对象检测是经典的计算机视觉问题之一。给定图像的任务是检测、分类和定位所有感兴趣的对象。例如,假设您正在开发自动驾驶汽车,并且需要进行行人检测。然后,对象检测算法将返回图像中每个行人的边界框坐标。

近年来,在设计对象检测模型方面取得了许多进展。

使用 Python 中的 ONNX TensorRT 后端进行对象检测#

此示例有何作用?

此示例 yolov3_onnx 实现了完整的基于 ONNX 的管道,用于使用 YOLOv3 网络执行推理。其输入大小为 608x608 像素,包括预处理和后处理。此示例基于 YOLOv3-608 论文。

注意

Ubuntu 14.04 及更旧版本不支持此示例。此外,yolov3_to_onnx.py 脚本不支持 Python 3。

此示例位于何处?

此示例维护在 samples/python/yolov3_onnx 目录下的 GitHub: yolov3_onnx 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/yolov3_onnx。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/yolov2_onnx

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: yolov3_onnx/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用 Python 中的 EfficientDet 网络进行可扩展且高效的对象检测#

此示例有何作用?

此示例 efficientdet 演示了使用 NVIDIA TensorRT 转换和执行 Google EfficientDet 模型。代码将 TensorFlow 检查点或保存的模型转换为 ONNX,调整 ONNX 图以实现 TensorRT 兼容性,然后构建 TensorRT 引擎。然后,可以使用示例中提供的相应脚本进行推理和准确性验证。

此示例位于何处?

此示例维护在 samples/python/efficientdet 目录下的 GitHub: efficientdet 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/efficientdet。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/efficientdet

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: efficientdet/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用 Python 中的 TensorFlow Object Detection API Model Zoo 网络进行对象检测#

此示例有何作用?

此示例 tensorflow_object_detection_api 演示了使用 NVIDIA TensorRT 转换和执行 Tensorflow Object Detection API Model Zoo 模型。代码将 TensorFlow 检查点或保存的模型转换为 ONNX,调整 ONNX 图以实现 TensorRT 兼容性,然后构建 TensorRT 引擎。然后可以使用示例中提供的相应脚本执行推理和准确性验证。

此示例位于何处?

此示例维护在 samples/python/tensorflow_object_detection_api 目录下的 GitHub: tensorflow_object_detection_api 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/tensorflow_object_detection_api。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/tensorflow_object_detection_api

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: tensorflow_object_detection_api/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用 Python 中的 Detectron 2 Mask R-CNN R50-FPN 3x 网络进行对象检测#

此示例有何作用?

此示例 detectron2 演示了使用 NVIDIA TensorRT 转换和执行 Detectron 2 Model Zoo Mask R-CNN R50-FPN 3x 模型。该项目提供了将 Detectron 2 模型导出到 ONNX 的步骤,代码调整 ONNX 图以实现 TensorRT 兼容性,然后构建 TensorRT 引擎。然后可以使用示例中提供的相应脚本执行推理和准确性验证。

此示例位于何处?

此示例维护在 samples/python/detectron2 目录下的 GitHub: detectron2 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/detectron2。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/detectron2

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: detectron2/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

注意

此示例无法在 Jetson 平台上运行,因为 torch.distributed 不可用。要检查您的平台是否支持 torch.distributed,请打开 Python shell,并确认 torch.distributed.is_available() 返回 True

其他功能#

使用具有命名输入维度的 ONNX 模型#

此示例有何作用?

此示例 sampleNamedDimensions 说明了命名输入维度的功能。具体来说,生成一个简单的单层 ONNX 模型,该模型的模型输入中具有命名维度参数,然后将其传递给 TensorRT 以进行解析和引擎构建。

此示例位于何处?

此示例维护在 samples/sampleNamedDimensions 目录下的 GitHub: sampleNamedDimensions 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleNamedDimensions。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleNamedDimensions

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: sampleNamedDimensions/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

引擎构建期间进度监视器的使用#

sampleProgressMonitor 和 simple_progress_reporter 在引擎构建期间使用进度监视器。

这些示例有何作用?

sampleProgressMonitor 是一个 C++ 示例,展示了如何使用进度监视器 API 的示例。此示例演示了如何使用 IProgressMonitor 报告 TensorRT 引擎构建操作的状态。

simple_progress_reporter 是一个 Python 示例,它使用 TensorRT,并且包含一个 ONNX 解析器,用于对以 ONNX 格式保存的 ResNet-50 模型执行推理。它在 TensorRT 构建引擎时显示动画进度条。

这些示例位于何处?

sampleProgressMonitor 维护在 samples/sampleProgressMonitor 目录下的 GitHub: sampleProgressMonitor 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleProgressMonitor。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleProgressMonitor

simple_progress_reporter 示例维护在 samples/python/simple_progress_reporter 目录下的 GitHub: simple_progress_reporter 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/simple_progress_reporter。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/simple_progress_reporter

如何开始?

有关更多信息,请参阅 C++ 示例入门Python 示例入门 部分。有关这些示例的具体信息,请参阅文件 GitHub: sampleProgressMonitor/README.mdGitHub: simple_progress_reporter/README.md。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

基于 Python 的 TensorRT 插件#

此示例有何作用?

python_plugin 展示了 TensorRT 中基于 Python 的插件的定义。未对现有的 TensorRT API 进行任何更改来交付此功能,因此使用更新的绑定不应破坏任何现有代码。

circ_pad_plugin_multi_tactic.py 演示了 IPluginV3 提供的自定义策略功能和 timing cache 功能。

此示例位于何处?

此示例维护在 samples/python/python_plugin 目录下的 GitHub: python_plugin 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/python_plugin。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/python_plugin

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: python_plugin/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

构建和重新拟合权重剥离引擎#

此示例有何作用?

此 sample_weight_stripping 示例是一个 Python 示例,展示了在 TensorRT 中从 ONNX 模型构建和重新拟合权重剥离引擎。

此示例位于何处?

此示例维护在 samples/python/sample_weight_stripping 目录下的 GitHub: sample_weight_stripping 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/sample_weight_stripping。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/sample_weight_stripping

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: sample_weight_stripping/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

具有数据相关输出形状的插件:NonZero#

此示例有何作用?

此示例 sampleNonZeroPlugin 是一个 C++ 示例,它以 NonZero 运算符为例,展示了如何使用 IPluginV3 接口实现具有数据相关输出形状的 TensorRT 插件。

此示例位于何处?

此示例维护在 samples/sampleNonZeroPlugin 目录下的 GitHub: sampleNonZeroPlugin 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/sampleNonZeroPlugin。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/sampleNonZeroPlugin

如何开始?

有关更多信息,请参阅 C++ 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: sampleNonZeroPlugin/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

具有数据相关输出形状的 Python 插件:NonZero#

此示例有何作用?

此示例 non_zero_plugin 是一个 Python 示例,它以 NonZero 运算符为例,展示了如何使用 IPluginV3 接口实现具有数据相关输出形状的 TensorRT 插件。它是 C++ 示例 sampleNonZeroPlugin 的基于 Python 的版本。

此示例位于何处?

此示例维护在 samples/python/non_zero_plugin 目录下的 GitHub: non_zero_plugin 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/non_zero_plugin。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/non_zero_plugin

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: non_zero_plugin/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

使用具有别名 I/O 的插件来实现就地更新#

此示例有何作用?

此示例 aliased_io_plugin 是一个 Python 示例,它以用于就地 scatter-add 操作的插件为例,展示了如何将别名 I/O 与 TensorRT 插件一起使用。

此示例位于何处?

此示例维护在 samples/python/aliased_io_plugin 目录下的 GitHub: aliased_io_plugin 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/aliased_io_plugin。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/aliased_io_plugin

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: aliased_io_plugin/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。

快速部署的 TensorRT Python 插件#

此示例有何作用?

此 Python 示例 quickly_deployable_plugins 展示了 TensorRT 中快速部署的基于 Python 的插件定义 (QDP)。QDP 是一种简单直观的基于装饰器的方法,用于定义 TensorRT 插件,从而大大减少了代码量。

此示例位于何处?

此示例维护在 samples/python/quickly_deployable_plugins 目录下的 GitHub: quickly_deployable_plugins 仓库中。如果使用 Debian 或 RPM 包,则示例位于 /usr/src/tensorrt/samples/python/quickly_deployable_plugins。如果使用 tar 或 zip 包,则示例位于 <extracted_path>/samples/python/quickly_deployable_plugins

如何开始?

有关更多信息,请参阅 Python 示例入门 部分。有关此示例的具体信息,请参阅 GitHub: quickly_deployable_plugins/README.md 文件。它提供了有关其工作原理、示例代码以及运行和验证其输出的分步说明的详细信息。