TensorRT 10.14.1 初体验:介绍、安装与Demo尝试

文章目录

前言

本文章配套视频:TensorRT 10.14.1 初体验:介绍、安装与Demo尝试

本人有偿提供【Window平台上 TensorRT 开发环境搭建】服务,可咨询(练习方式:QQ- 736340716 雪天鱼

小店商品链接:Windows 平台上 TensorRT 开发环境搭建


介绍

GITHUB 链接: https://github.com/NVIDIA/TensorRT

官网:https://developer.nvidia.com/tensorrt

TensorRT 是NVIDIA推出的高性能深度学习推理SDK,旨在NVIDIA GPU上实现低延迟、高吞吐量的模型部署。

个人理解为针对 NVIDIA GPU 的专用 AI 编译器。

TensorRT 的工作流程:

  1. 输入: 它接收你训练好的深度学习模型(如 ONNX 格式)。
  2. 优化: 它对计算图进行分析,执行算子融合 (Layer Fusion)、死代码消除精度校准(FP32 -> INT8)等操作
  3. 代码生成: 它通过内核自动调整(Kernel Auto-Tuning),从算法库中搜索出在当前 GPU 上跑得最快的 CUDA 核函数,最终生成一个序列化文件(Engine)
  4. 输出: 这个 Engine 文件就是针对该特定 GPU 的"二进制可执行程序"。

它与通用 AI 编译器(如 TVM/XLA)的区别

特性 TensorRT 通用 AI 编译器 (如 TVM, MLIR)
硬件支持 仅限 NVIDIA GPU (闭源生态) 跨硬件 (CPU, GPU, NPU, DSP 等)
核心策略 依赖 NVIDIA 手写的高性能 CUDA 算子库 更多依赖自动代码生成 (Codegen) 技术
定位 极致挖掘自家硬件潜力的SDK 解决模型部署碎片化的中间层工具

目标硬件平台

简单来说,它的硬件支持范围只有一条铁律:必须是 NVIDIA 的 GPU(或相关加速器如 DLA)。 它不支持 AMD 显卡、Intel 显卡,也不支持单纯在 CPU 上运行(除了一些极少数的 Fallback 情况)。

具体来说,TensorRT 主要针对以下四大类 NVIDIA 硬件平台进行深度优化。

(1) 嵌入式与边缘计算 (Embedded & Edge AI)

这是 TensorRT 相比其他编译器(如 OpenVINO)最具统治力的领域。

  • 代表硬件: Jetson 系列 (AGX Orin, Orin NX, AGX Xavier, Xavier NX, Nano 等)。
  • 针对性优化:
    • 低功耗与低延迟:
    • 异构加速支持: 只有在 Jetson 平台上,TensorRT 才能原生调用 DLA (Deep Learning Accelerator)。在 PC 显卡上是没有 DLA 的。
    • 共享内存 (Unified Memory): 针对 Tegra SoC 的 CPU/GPU 共享内存架构进行了专门的零拷贝优化。

(2) 消费级与专业工作站 (PC / Workstation)

  • 代表硬件: GeForce RTX 系列 (30/40/50系), RTX Professional (原Quadro) 系列
  • 针对性优化:
    • 主要利用海量的 CUDA Cores 和高频的 Tensor Cores
    • 虽然主要用于打游戏和渲染,但因为架构(Ampere/Ada/Blackwell)与边缘端同源,所以是极佳的"原型验证平台"。

(3) 数据中心与云端 (Data Center / Cloud)

  • 代表硬件: NVIDIA A100, H100, L40S, T4 等。
  • 针对性优化:
    • 极高吞吐量 (Throughput): 优化大 Batch Size 的并发处理。
    • 多实例 GPU (MIG): 支持将一块卡切分成多个实例跑 TensorRT。
    • INT8 / FP8 极限压榨: 在大模型服务中广泛使用。

(4) 自动驾驶 (Automotive)

  • 代表硬件: NVIDIA DRIVE Orin / Thor
  • 针对性优化:
    • 安全性 (Safety): 这一类 TensorRT 版本(TensorRT Safety)经过了 ISO 26262 车规级认证,代码更严谨,不允许动态内存分配等风险操作。

TensorRT 之所以快,是因为它在底层直接生成了 CUDA 汇编代码SASS 指令

它知道 Orin 的 Tensor Core 有几个寄存器。它知道 RTX 5070 的 L2 缓存有多大。它能够控制具体的 Warp 调度。

模型推理:TensorRT VS Pytorch

在 RTX 5070 显卡上运行 TensorRT 和运行 PyTorch,虽然最终输出的"图片结果"是一样的,但底层的工作逻辑、资源消耗和执行效率有着本质的区别。

我们可以把 PyTorch 比作"一边翻译一边执行"的 Python 解释器 ,而把 TensorRT 比作"编译优化后"的 C++ 可执行文件

以下是具体的四个核心维度对比:

(1)计算图层面的区别:碎片 vs. 融合 (Fusion)

  • PyTorch (Eager Mode):
    • 工作方式: 它是"即时"的。当你代码跑到 y = conv(x),它启动一个 CUDA Kernel;跑到 y = relu(y),它读取上一步结果,再启动一个 Kernel。
    • 劣势: 对于 GPU 来说,启动 Kernel 有固定开销。如果模型层数很深,且有大量简单的数学运算,这会导致 GPU 频繁地在"读显存 -> 算一点点 -> 写回显存"之间切换,显存带宽(Bandwidth)浪费严重
  • TensorRT:
    • 工作方式: 它在"编译"阶段(生成 Engine 时)会查看整个网络图。
    • 优势(Layer Fusion): 它会发现 Conv + Bias + ReLU 可以合并成一个 CUDA Kernel。
    • 对你的影响: 对于 GDN 层,如果你不写 Plugin,TensorRT 可能会把几十个碎片算子融合成几个较大的块;如果你写了 Plugin,它就是一个高效的大算子。这能大幅减少显存读写次数。

(2) 显存管理机制:动态 vs. 静态

  • PyTorch:

    • 为了支持反向传播(训练)和动态图,PyTorch 会在显存中保留很多中间激活值(Activations),并且显存分配是动态的(Caching Allocator)。
    • 现象: 显存占用较大且波动。
  • TensorRT:

    • 显存复用 (Memory Aliasing): 它在编译时计算好每一步需要的显存,并且极其激进地复用显存。例如,Layer A 的输出用完后,Layer C 可能会直接覆盖这块内存。
    • 现象: 显存占用通常只有 PyTorch 的 1/2 甚至更低。这在 Jetson AGX Orin 这种显存宝贵的设备上是决定生死的,但在 5070 上你可能感觉不明显。

(3)硬件指令优化:通用 vs. 特化 (Tuning)

  • PyTorch:
    • 主要调用 cuDNN 库。cuDNN 包含了很多通用的卷积算法,PyTorch 会在运行时选择一个"比较好"的算法。
  • TensorRT:
    • Kernel Auto-Tuning: 在运行 trtexec 构建引擎的那几分钟里,TensorRT 实际上是在"试跑"。它会针对模型和RTX 5070,尝试几十种不同的卷积实现策略(Winograd, GEMM, Direct Conv 等),然后把跑得最快的那一个写死在 Engine 文件里。
    • 结果: 它是为这块显卡"私人订制"的最优解。

(4)精度控制:隐式 vs. 显式

  • PyTorch: 即便是 fp16 (AMP),往往也是混合精度,部分层为了安全会自动回退到 FP32。
  • TensorRT:
    • 如果你指定 --fp16,它会极其严格地执行 FP16 计算(除非你手动限制)。
    • 如果你开启 --int8,它会直接调用专门的 INT8 Tensor Core 指令,这是 PyTorch 默认很难做到的(PyTorch 做 INT8 需要繁琐的 QAT 和校准流程,且推理速度往往不如 TRT)。

在 RTX 5070 上做对比时,可能会看到以下现象:
纯推理延迟 (Latency):

  • PyTorch: 假设处理一张 1080p 图片需要 15ms
  • TensorRT (FP16): 可能只需要 3ms - 5ms
  • 感官差异: 在 5070 上都很快,感觉不明显。但在 Orin 上,这个差异就是 150ms vs 30ms 的区别,决定了能不能实时。

Window11 安装 TensorRT(个人经验)

依赖安装

python3.9,

(1)安装CUDA 12.9 (cmd中输入 nvcc -V 查看版本)

(2)安装 cuDNN 9.16.0

在NV官网 https://developer.nvidia.com/cudnn-downloads 下载 cuDNN 9.16.0 安装文件,双击执行安装即可。cuDNN for CUDA cuda13.0 不用勾选,cuda12.9的勾选上就行。安装路径为:C:\Program Files\NVIDIA\CUDNN\v9.16

然后将文件夹内的 bin, include, lib 三个文件夹下的文件,分别复制 到 CUDA 安装目录对应的文件夹中。(默认路径是: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9)

  • CUDNN\v9.16\bin\12.9 下的文件都复制到 CUDA\v12.9\bin 下
  • CUDNN\v9.16\include\12.9 下的文件都复制到 CUDA\v12.9\include 下
  • CUDNN\v9.16\lib\12.9\x64 下的文件都复制到 CUDA\v12.9\lib\x64下

python 库安装

bash 复制代码
pip install onnx
pip install pycuda  # pycuda-2025.1.2
pip install opencv-python # opencv-python-4.12.0.88

pycuda 安装:PyCUDA不是预编译好的 Python 包,需要在安装过程中从源码进行编译。如果环境没有配置好,这条命令通常会直接报错。确保已安装 CUDA Toolkit 并配置好了环境变量。

tensorRT安装

进入官网下载 https://developer.nvidia.com/tensorrt/download/10x, 会弹出登录页面,随便输入一个邮箱,进入到输入密码的页面,可选择微信登录。

选择合适版本,这里我选择 TensorRT 10.14.1, 下载得到ZIP压缩包,解压得到 TensorRT-10.14.1.48 文件夹(2.78GB)。

将该文件夹放到路径简单且不含中文或空格的目录中。示例: D:\TensorRT-10.14.1.48

配置系统环境变量 (Path):

  • "编辑系统环境变量" -> "环境变量" -> 在"系统变量"中找到 Path -> 点击"编辑"。
  • 点击"新建",将 TensorRT 的 lib 目录路径 和 bin 目录路径添加进去。
  • 创建系统变量 TENSORRT_PATH 指向TensorRT根目录

重要: 添加完后,建议重启电脑以生效。


【安装 Python 接口】

深度学习研究会通过 Python 调用 TensorRT。

  1. 打开CMD终端,激活 Python 虚拟环境

  2. cd 进入 TensorRT 解压目录下的 python 文件夹。

  3. 安装 TensorRT Wheel: 你会看到类似 tensorrt-10.14.1.48-cp3x-none-win_amd64.whl 的文件。

    • 选择与 Python 版本(如 cp39 对应 Python 3.9)匹配的文件进行安装
    bash 复制代码
    pip install tensorrt-10.14.1.48-cp39-none-win_amd64.whl

【验证安装】

C++验证:检查 bin 目录是否被正确链接。在cmd上输入 trtexec 有显示则表示正常

Python验证:

在终端中输入 python 进入交互模式,尝试导入:

Python 复制代码
import tensorrt as trt
print(trt.__version__) # 应输出10.14.0
print(trt.Builder(trt.Logger()))
  • 如果报错 FileNotFoundErrorDLL load failed,通常是因为 环境变量 没有设置正确,或者 CUDA/cuDNN 版本不匹配。

简单 Demo 尝试

目标:

(1)验证环境搭建是否正确 ;

(2)熟悉 TensorRT开发流程(ONNX -> Engine -> 推理)

  1. Export: PyTorch -> ONNX
  2. Build: ONNX -> Engine (trtexec)
  3. Runtime: Load Engine -> Memcpy -> Execute -> Memcpy

(1)导出ResNet模型为ONNX : 运行 01_export_resnet.py 脚本

(2)trtexec 把"死"的 ONNX 编译为"活"的 engine : cmd中输入 trtexec --onnx=resnet18.onnx --saveEngine=resnet18.engine --fp16。这里使用fp16半精度,是因为在RTX5070上会很快。 如果最后输出 PASSED 和一大堆性能数据,说明 TensorRT 环境是完美的。

一定要在 目标onnx文件所在目录下打开 cmd, 再输入编译指令,否则找不到文件

(3)写Python 推理脚本:运行 02_infer_resnet.py 脚本

编写了个基准测试脚本(03_benchmark_comparison.py), 脚本功能:

  1. PyTorch (FP16模式): 使用 PyTorch 原生推理,开启半精度(为了公平对比)。
  2. TensorRT (FP16模式):
    它会进行 Warmup(预热) ,然后连续跑 1000次 ,最后算出 平均延迟 (Latency)吞吐量 (FPS)
    测试结果如下:
python 复制代码
=== 推理速度对比基准测试 (ResNet18, RTX 5070) ===
循环次数: 1000, 预热: 50

>>> 正在测试 PyTorch (FP16)...
PyTorch 结果: 耗时 2087.41ms / 1000次

>>> 正在测试 TensorRT (FP16)...
TensorRT 结果: 耗时 245.73ms / 1000次

========================================
Framework       | Latency (ms)    | FPS            
----------------------------------------
PyTorch (FP16)  | 2.0874 ms        | 479.1
TensorRT (FP16) | 0.2457 ms        | 4069.5
========================================

🚀 TensorRT 比 PyTorch 快了 8.49 倍!
相关推荐
plmm烟酒僧2 天前
TensorRT 推理 YOLO Demo 分享 (Python)
开发语言·python·yolo·tensorrt·runtime·推理
<-->7 天前
TensorRT-LLM 核心技术深度分析报告
tensorflow·tensorrt
_Stellar1 个月前
【TensorRT】Could not load library libcudnn_cnn_infer.so.8
tensorrt
zhy295632 个月前
【DNN】基础环境搭建
人工智能·tensorrt·cuda·开发环境·cudnn
李李李li3 个月前
Ubuntu 22.04 安装tensorrt
linux·tensorrt
爱分享的飘哥4 个月前
第六十一章:AI 模型的“视频加速术”:Wan视频扩散模型优化
人工智能·剪枝·tensorrt·量化·模型优化·视频扩散模型·cuda graph
谢白羽4 个月前
tensorRT配合triton部署模型
yolo·tensorrt·onnx·triton
kcarly8 个月前
TensorRT 有什么特殊之处
ai·ai绘画·nvidia·tensorrt
鹅毛在路上了8 个月前
视频结构化框架VideoPipe-OpenCV::DNN-TensorRT安装教程【Nvidia各系列显卡-亲测有效】
opencv·音视频·tensorrt