NVIDIA/TensorRT

GitHub: NVIDIA/TensorRT

NVIDIA 官方的高性能深度学习推理 SDK,用于在 GPU 上对训练好的模型进行极致优化和加速部署。

Stars: 12952 | Forks: 2353

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![文档](https://img.shields.io/badge/TensorRT-documentation-brightgreen.svg)](https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html) [![路线图](https://img.shields.io/badge/Roadmap-Q1_2026-brightgreen.svg)](documents/tensorrt_roadmap_2026q1.pdf) # :mega::mega: 公告 :mega::mega: TensorRT 11.0 将于 2026 年第二季度推出,具备旨在加速您的 AI 推理工作流的强大新功能。随着此主要版本的升级,TensorRT 的 API 将得到精简,并且一些旧版功能将被移除。 我们建议尽早迁移以下功能: - 弱类型网络及相关 API 将被移除,由[强类型网络](https://docs.nvidia.com/deeplearning/tensorrt/latest/inference-library/advanced.html#strongly-typed-networks)取代。 - 隐式量化及相关 API 将被移除,由[显式量化](https://docs.nvidia.com/deeplearning/tensorrt/latest/inference-library/work-quantized-types.html#explicit-quantization)取代。 - IPluginV2 及相关 API 将被移除,由 [IPluginV3](https://docs.nvidia.com/deeplearning/tensorrt/latest/inference-library/extending-custom-layers.html#migrating-v2-plugins-to-ipluginv3) 取代。 - TREX 工具将被移除,由 [Nsight Deep Learning Designer](https://docs.nvidia.com/nsight-dl-designer/UserGuide/index.html#visualizing-a-tensorrt-engine) 取代。 - 从 TensorRT 10.16 开始,将不再提供针对 Python 3.9 及更早版本的 Python 绑定。适用于 RHEL/Rocky Linux 8 和 RHEL/Rocky Linux 9 的 RPM 包现在依赖于 Python 3.12。 # TensorRT 开源软件 此仓库包含 NVIDIA TensorRT 的开源软件 (OSS) 组件。它包括 TensorRT 插件和 ONNX 解析器的源代码,以及展示 TensorRT 平台用法和功能的示例应用程序。这些开源软件组件是 TensorRT 正式发布 (GA) 版本的一个子集,并包含了一些扩展和错误修复。 - 如需了解对 TensorRT-OSS 的代码贡献,请参阅我们的[贡献指南](CONTRIBUTING.md)和[编码规范](CODING-GUIDELINES.md)。 - 有关 TensorRT-OSS 版本发布的新增功能和更新的摘要,请参阅[更新日志](CHANGELOG.md)。 - 有关业务咨询,请联系 [researchinquiries@nvidia.com](mailto:researchinquiries@nvidia.com) - 有关媒体和其他咨询,请联系 Hector Marinez:[hmarinez@nvidia.com](mailto:hmarinez@nvidia.com) 需要企业级支持?通过 [NVIDIA AI Enterprise 软件套件](https://www.nvidia.com/en-us/data-center/products/ai-enterprise/),可获得 NVIDIA 针对 TensorRT 提供的全球支持。查看 [NVIDIA LaunchPad](https://www.nvidia.com/en-us/launchpad/ai/ai-enterprise/),免费访问一系列在 NVIDIA 基础设施上托管的 TensorRT 动手实验室。 加入 [TensorRT 和 Triton 社区](https://www.nvidia.com/en-us/deep-learning-ai/triton-tensorrt-newsletter/),随时了解最新的产品更新、错误修复、内容、最佳实践等信息。 # 预编译的 TensorRT Python 包 我们提供 TensorRT Python 包以便于安装。 \ 安装命令: ``` pip install tensorrt ``` 您可以跳过 **构建** 部分,直接使用 Python 体验 TensorRT。 # 构建 ## 前置条件 要构建 TensorRT-OSS 组件,您首先需要以下软件包。 **TensorRT GA 构建** - TensorRT v10.16.1.11 - 可从下面列出的直接下载链接获取 **系统软件包** - [CUDA](https://developer.nvidia.com/cuda-toolkit) - 推荐版本: - cuda-13.2.0 - cuda-12.9.0 - [CUDNN (可选)](https://developer.nvidia.com/cudnn) - cuDNN 8.9 - [GNU make](https://ftp.gnu.org/gnu/make/) >= v4.1 - [cmake](https://github.com/Kitware/CMake/releases) >= v3.31 - [python](https://www.python.org/downloads/) >= v3.10, <= v3.13.x - [pip](https://pypi.org/project/pip/#history) >= v19.0 - 基本实用工具 - [git](https://git-scm.com/downloads), [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/), [wget](https://www.gnu.org/software/wget/faq.html#download) **可选软件包** - [NCCL](https://developer.nvidia.com/nccl/nccl-download) >= v2.19, < v3.0 — 仅当使用多设备支持 (`-DTRT_BUILD_ENABLE_MULTIDEVICE=ON`) 为 `sampleDistCollective` 示例构建时需要。 - 容器化构建 - [Docker](https://docs.docker.com/install/) >= 19.03 - [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-docker) - PyPI 软件包(用于演示应用程序/测试) - [onnx](https://pypi.org/project/onnx/) - [onnxruntime](https://pypi.org/project/onnxruntime/) - [tensorflow-gpu](https://pypi.org/project/tensorflow/) >= 2.5.1 - [Pillow](https://pypi.org/project/Pillow/) >= 9.0.1 - [pycuda](https://pypi.org/project/pycuda/) < 2021.1 - [numpy](https://pypi.org/project/numpy/) - [pytest](https://pypi.org/project/pytest/) - 代码格式化工具(面向贡献者) - [Clang-format](https://clang.llvm.org/docs/ClangFormat.html) - [Git-clang-format](https://github.com/llvm-mirror/clang/blob/master/tools/clang-format/git-clang-format) ## 下载 TensorRT 构建 1. 下载 TensorRT OSS git clone -b main https://github.com/nvidia/TensorRT TensorRT cd TensorRT git submodule update --init --recursive 2. (可选 - 如果不使用 TensorRT 容器)指定 TensorRT GA 发布构建路径 如果使用 TensorRT OSS 构建容器,TensorRT 库已预安装在 `/usr/lib/x86_64-linux-gnu` 下,您可以跳过此步骤。 否则,请通过以下直接链接从 [NVIDIA Developer Zone](https://developer.nvidia.com) 下载并解压 TensorRT GA 构建: - [适用于 CUDA 13.2, Linux x86_64 的 TensorRT 10.16.1.11](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.16.1/tars/TensorRT-10.16.1.11.Linux.x86_64-gnu.cuda-13.2.tar.gz) - [适用于 CUDA 12.9, Linux x86_64 的 TensorRT 10.16.1.11](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.16.1/tars/TensorRT-10.16.1.11.Linux.x86_64-gnu.cuda-12.9.tar.gz) - [适用于 CUDA 13.2, Windows x86_64 的 TensorRT 10.16.1.11](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.16.1/zip/TensorRT-10.16.1.11.Windows.amd64.cuda-13.2.zip) - [适用于 CUDA 12.9, Windows x86_64 的 TensorRT 10.16.1.11](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.16.1/zip/TensorRT-10.16.1.11.Windows.amd64.cuda-12.9.zip) **示例:搭载 cuda-13.2 的 x86-64 架构 Ubuntu 22.04** cd ~/Downloads tar -xvzf TensorRT-10.16.1.11.Linux.x86_64-gnu.cuda-13.2.tar.gz export TRT_LIBPATH=`pwd`/TensorRT-10.16.1.11/lib **示例:搭载 cuda-12.9 的 x86-64 架构 Windows** Expand-Archive -Path TensorRT-10.16.1.11.Windows.amd64.cuda-12.9.zip $env:TRT_LIBPATH="$pwd\TensorRT-10.16.1.11\lib" ## 设置构建环境 对于 Linux 平台,我们建议您按照下文描述生成一个 Docker 容器来构建 TensorRT-OSS。对于原生构建,请安装[前置条件](#prerequisites)中的 *系统软件包*。 1. 生成 TensorRT-OSS 构建容器。 **示例:搭载 cuda-13.2 的 x86-64 架构 Ubuntu 24.04(默认)** ./docker/build.sh --file docker/ubuntu-24.04.Dockerfile --tag tensorrt-ubuntu24.04-cuda13.2 **示例:搭载 cuda-13.2 的 x86-64 架构 Rockylinux8** ./docker/build.sh --file docker/rockylinux8.Dockerfile --tag tensorrt-rockylinux8-cuda13.2 **示例:搭载 cuda-13.2 的 Ubuntu 24.04 交叉编译 Jetson (aarch64) (JetPack SDK)** ./docker/build.sh --file docker/ubuntu-cross-aarch64.Dockerfile --tag tensorrt-jetpack-cuda13.2 **示例:搭载 cuda-13.2 的 aarch64 架构 Ubuntu 24.04** ./docker/build.sh --file docker/ubuntu-24.04-aarch64.Dockerfile --tag tensorrt-aarch64-ubuntu24.04-cuda13.2 2. 启动 TensorRT-OSS 构建容器。 **示例:Ubuntu 24.04 构建容器** ./docker/launch.sh --tag tensorrt-ubuntu24.04-cuda13.2 --gpus all ## 构建 TensorRT-OSS - 生成 Makefile 并构建 **示例:使用默认 cuda-13.2 的 Linux (x86-64) 构建** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out make -j$(nproc) **示例:使用默认 cuda-13.2 的 Linux (aarch64) 构建** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64-native.toolchain make -j$(nproc) **示例:使用 cuda-13.2 在 Jetson Thor (aarch64) 上的原生构建** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DTRT_PLATFORM_ID=aarch64 CC=/usr/bin/gcc make -j$(nproc) **示例:使用 cuda-13.2 (JetPack) 的 Ubuntu 24.04 交叉编译 Jetson Thor (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64_cross.toolchain make -j$(nproc) **示例:使用 cuda-13.2 的 Ubuntu 24.04 交叉编译 DriveOS (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64_dos_cross.toolchain make -j$(nproc) **示例:使用 cuda-13.2 在 Windows (x86) 上的原生构建** cd $TRT_OSSPATH New-Item -ItemType Directory -Path build cd build cmake .. -DTRT_LIB_DIR="$env:TRT_LIBPATH" -DTRT_OUT_DIR="$pwd\\out" msbuild TensorRT.sln /property:Configuration=Release -m:$env:NUMBER_OF_PROCESSORS - 必需的 CMake 构建参数有: - `TRT_LIB_DIR`:包含库的 TensorRT 安装目录的路径。 - `TRT_OUT_DIR`:生成的构建产物将被复制到的输出目录。 - 可选的 CMake 构建参数: - `CMAKE_BUILD_TYPE`:指定生成的二进制文件是用于发布还是调试(包含调试符号)。值包括 [`Release`] | `Debug`。 - `CUDA_VERSION`:要目标定位的 CUDA 版本,例如 [`12.9.9`]。 - `CUDNN_VERSION`:要目标定位的 cuDNN 版本,例如 [`8.9`]。 - `PROTOBUF_VERSION`:要使用的 Protobuf 版本,例如 [`3.20.1`]。注意:更改此设置不会将 CMake 配置为使用系统版本的 Protobuf,而是会配置 CMake 下载并尝试构建该版本。 - `CMAKE_TOOLCHAIN_FILE`:用于交叉编译的工具链文件的路径。 - `BUILD_PARSERS`:指定是否应构建解析器,例如 [`ON`] | `OFF`。如果设置为 OFF,CMake 将尝试查找解析器库的预编译版本,以用于编译示例。首先在 `${TRT_LIB_DIR}` 中查找,然后在系统中查找。如果构建类型是 Debug,则在可用的情况下,它将优先使用库的调试版本而不是发布版本。 - `BUILD_PLUGINS`:指定是否应构建插件,例如 [`ON`] | `OFF`。如果设置为 OFF,CMake 将尝试查找插件库的预编译版本,以用于编译示例。首先在 `${TRT_LIB_DIR}` 中查找,然后在系统中查找。如果构建类型是 Debug,则在可用的情况下,它将优先使用库的调试版本而不是发布版本。 - `BUILD_SAMPLES`:指定是否应构建示例,例如 [`ON`] | `OFF`。 - `BUILD_SAFE_SAMPLES`:指定是否应构建安全示例,例如 [`ON`] | `OFF`。 - `TRT_SAFETY_INFERENCE_ONLY`:指定是否仅构建安全推理组件,例如 [`ON`] | `OFF`。如果设置为 ON,除了 `BUILD_SAFE_SAMPLES` 之外,所有其他组件都将被关闭。 - `GPU_ARCHS`:要定位的 GPU (SM) 架构。默认情况下,我们会为所有主要 SM 生成 CUDA 代码。可以在此处以带引号的空格分隔列表形式指定特定的 SM 版本,以减少编译时间和二进制文件大小。NVIDIA GPU 的计算能力表可以在[这里](https://developer.nvidia.com/cuda-gpus)找到。示例: - NVidia A100:`-DGPU_ARCHS="80"` - RTX 50 系列:`-DGPU_ARCHS="120"` - 多个 SM:`-DGPU_ARCHS="80 120"` - `TRT_PLATFORM_ID`:裸机构建(不同于容器化的交叉编译)。目前支持的选项:`x86_64`(默认)。 - `TRT_BUILD_ENABLE_MULTIDEVICE`:启用多设备示例 (`sampleDistCollective`)。使用 `-DTRT_BUILD_ENABLE_MULTIDEVICE=ON` 来构建它;要求 [NCCL](https://developer.nvidia.com/nccl/nccl-download) >= v2.19, < v3.0。 ## 构建 TensorRT DriveOS 示例 - 生成 Makefile 并构建 **示例:交叉编译 DOS7 Linux (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DBUILD_SAMPLES=ON -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF -DTRT_OUT_DIR=`pwd`/bin_dynamic_cross -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64_dos_cross.toolchain make -j$(nproc) **示例:交叉编译 DOS6.5 Linux (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DBUILD_SAMPLES=ON -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF -DTRT_OUT_DIR=`pwd`/bin_dynamic_cross -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64_dos_cross.toolchain -DCUDA_VERSION=11.4 -DGPU_ARCHS=87 make -j$(nproc) **示例:针对 DOS6.5 和 DOS7 Linux (aarch64) 的原生构建** cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64-native.toolchain -DBUILD_SAMPLES=ON -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF make -j$(nproc) **示例:交叉编译 DOS6.5 QNX (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build export CUDA_VERSION=11.4 export CUDA=cuda-$CUDA_VERSION export CUDA_ROOT=/usr/local/cuda-safe-$CUDA_VERSION export QNX_BASE=/drive/toolchains/qnx_toolchain # 设置为您的 QNX 工具链安装路径 export QNX_HOST=$QNX_BASE/host/linux/x86_64/ export QNX_TARGET=$QNX_BASE/target/qnx7/ export PATH=$PATH:$QNX_HOST/usr/bin cmake .. -DBUILD_SAMPLES=ON -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF -DBUILD_SAFE_SAMPLES=OFF -DCMAKE_CUDA_COMPILER=$CUDA_ROOT/bin/nvcc -DTRT_OUT_DIR=`pwd`/bin_dynamic_cross -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_qnx.toolchain -DCUDA_VERSION=$CUDA_VERSION -DGPU_ARCHS=87 make -j$(nproc) **示例:交叉编译 DOS6.5 QNX Safety (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build export CUDA_VERSION=11.4 export QNX_BASE=/drive/toolchains/qnx_toolchain # 设置为您的 QNX 工具链安装路径 export QNX_HOST=$QNX_BASE/host/linux/x86_64/ export QNX_TARGET=$QNX_BASE/target/qnx7/ export PATH=$PATH:$QNX_HOST/usr/bin export CUDA=cuda-$CUDA_VERSION export CUDA_ROOT=/usr/local/cuda-safe-$CUDA_VERSION cmake .. -DBUILD_SAMPLES=OFF -DBUILD_SAFE_SAMPLES=ON -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF -DTRT_SAFETY_INFERENCE_ONLY=ON -DTRT_OUT_DIR=`pwd`/bin_dynamic_cross -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_qnx_safe.toolchain -DCUDA_VERSION=$CUDA_VERSION -DCMAKE_CUDA_COMPILER=$CUDA_ROOT/bin/nvcc -DGPU_ARCHS=87 make -j$(nproc) **示例:交叉编译 DOS7 QNX (aarch64)** cd $TRT_OSSPATH mkdir -p build && cd build export CUDA_VERSION=13.2 export CUDA=cuda-$CUDA_VERSION export CUDA_ROOT=/usr/local/cuda-safe-$CUDA_VERSION export QNX_BASE=/drive/toolchains/qnx_toolchain # 设置为您的 QNX 工具链安装路径 export QNX_HOST=$QNX_BASE/host/linux/x86_64/ export QNX_TARGET=$QNX_BASE/target/qnx/ export PATH=$PATH:$QNX_HOST/usr/bin cmake .. -DBUILD_SAMPLES=ON -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF -DBUILD_SAFE_SAMPLES=OFF -DCMAKE_CUDA_COMPILER=$CUDA_ROOT/bin/nvcc -DTRT_OUT_DIR=`pwd`/bin_dynamic_cross -DTRT_LIB_DIR=$TRT_LIBPATH -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_qnx.toolchain -DCUDA_VERSION=$CUDA_VERSION -DGPU_ARCHS=110 make -j$(nproc) # 参考 ## TensorRT 资源 - [TensorRT 开发者主页](https://developer.nvidia.com/tensorrt) - [TensorRT 快速入门指南](https://docs.nvidia.com/deeplearning/tensorrt/quick-start-guide/index.html) - [TensorRT 开发者指南](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html) - [TensorRT 示例支持指南](https://docs.nvidia.com/deeplearning/tensorrt/sample-support-guide/index.html) - [TensorRT ONNX 工具](https://docs.nvidia.com/deeplearning/tensorrt/index.html#tools) - [TensorRT 讨论论坛](https://devtalk.nvidia.com/default/board/304/tensorrt/) - [TensorRT 发行说明](https://docs.nvidia.com/deeplearning/tensorrt/release-notes/index.html) ## 已知问题 - 请参阅 [TensorRT 发行说明](https://docs.nvidia.com/deeplearning/tensorrt/release-notes)
标签:AI推理, Apache 2.0, Apex, Bash脚本, C++, CNCF毕业项目, ONNX解析器, Python, TensorRT, Vectored Exception Handling, 人工智能, 图像识别, 强类型网络, 推理引擎, 数据擦除, 无后门, 机器学习, 模型优化, 模型转换, 模型量化, 深度学习推理, 深度学习部署, 用户模式Hook绕过, 神经网络, 自动驾驶, 计算机视觉, 请求拦截, 逆向工具, 高性能计算