从 0 到 1:TensorRT-OSS 编译与上手(含 Windows 与 Linux)
从 0 到 1:TensorRT-OSS 编译与上手(含 Windows 与 Linux)
这篇文章记录了我在本地从源码编译 TensorRT-OSS 的完整流程,目标读者是准备二次开发插件、研究解析器(ONNX Parser)或想阅读示例代码的人。
背景简介
TensorRT-OSS 仓库包含 TensorRT 的开源组件:插件源代码、ONNX 解析器以及大量示例(samples)。这些组件是 TensorRT GA(商用发行包)的子集与扩展,便于我们调试与学习。
一、准备工作(Prerequisites)
1) 必备软件(核心)
- TensorRT GA 发行包(与 OSS 匹配的版本,例如:v10.13.3.9)
- CUDA(推荐:12.9 / 13.0)
- cuDNN(可选) 8.9
- CMake ≥ 3.31
- Python 3.10–3.13、pip ≥ 19.0
- 基本工具:
git
、pkg-config
、wget
(Linux);Windows 需 VS 2022 + 组件(含 C++、CUDA)
备注:
onnx-tensorrt
、cub
、protobuf
会由 TensorRT-OSS 的构建脚本自行下载/编译,无需预装。
2) 预编译 Python 包(可选,非源码构建)
如果你仅想用 Python 快速体验:
1 | pip install tensorrt |
可直接跳过“Build”章节进入模型推理体验。
二、获取源码与 GA 包
1) 克隆源码并拉取子模块
1 | git clone -b main https://github.com/NVIDIA/TensorRT TensorRT |
2) 下载并解压 TensorRT GA(用于链接头文件与库)
-
Linux 示例
1
2
3cd ~/Downloads
tar -xvzf TensorRT-10.13.3.9.Linux.x86_64-gnu.cuda-13.0.tar.gz
export TRT_LIBPATH="$(pwd)/TensorRT-10.13.3.9" -
Windows 示例(PowerShell)
1
2Expand-Archive -Path .\TensorRT-10.13.3.9.Windows.win10.cuda-12.9.zip
$env:TRT_LIBPATH = "$pwd\TensorRT-10.13.3.9\lib"
三、构建环境的两种姿势
方案 A:官方 Docker 容器(更稳、推荐 Linux)
- 构建容器镜像(示例:Ubuntu 22.04 + CUDA 13.0)
1 | ./docker/build.sh --file docker/ubuntu-22.04.Dockerfile --tag tensorrt-ubuntu22.04-cuda13.0 |
- 启动容器(需安装 NVIDIA Container Toolkit)
1 | ./docker/launch.sh --tag tensorrt-ubuntu22.04-cuda13.0 --gpus all |
Tips
- 容器里已预装匹配版本的 TensorRT 库(一般在
/usr/lib/x86_64-linux-gnu
)。--jupyter <port>
可顺便开 notebook。- Ubuntu 容器默认
sudo
密码为nvidia
。
方案 B:原生本机构建
-
Linux(x86-64)
1
2
3
4export TRT_OSSPATH=/path/to/TensorRT
mkdir -p $TRT_OSSPATH/build && cd $TRT_OSSPATH/build
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR="$(pwd)/out"
make -j"$(nproc)" -
Linux(aarch64 交叉编译 / Jetson 原生编译)
1
2
3
4
5
6
7
8
9# 交叉编译(例:Ubuntu 24.04 -> Jetson Thor + CUDA 13)
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH \
-DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64_cross.toolchain \
-DGPU_ARCHS=110
make -j"$(nproc)"
# Jetson 原生(需显式指定 C 编译器给 protobuf)
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_PLATFORM_ID=aarch64 -DGPU_ARCHS=110
CC=/usr/bin/gcc make -j"$(nproc)" -
Windows(VS 2022 + CUDA 12.9/13.0)
1
2
3
4
5
6
7
8
9
10$env:TRT_OSSPATH = "I:\code\TensorRT" # 示例路径
cd $env:TRT_OSSPATH
mkdir build
cd build
cmake .. `
-G "Visual Studio 17 2022" `
-DTRT_LIB_DIR="$env:TRT_LIBPATH" `
-DCUDNN_ROOT_DIR="$env:CUDNN_PATH" `
-DTRT_OUT_DIR="$pwd\out"
msbuild TensorRT.sln /property:Configuration=Release -m:$env:NUMBER_OF_PROCESSORS如需改 CUDA 版本(默认 13.0),在
cmake
命令追加-DCUDA_VERSION=12.9
。
关键 CMake 参数速记
TRT_LIB_DIR
(必填):GA 安装目录(包含lib/
)。TRT_OUT_DIR
(必填):构建产物输出目录。BUILD_PARSERS/BUILD_PLUGINS/BUILD_SAMPLES
:按需开关。GPU_ARCHS="80 90 120"
:仅为指定的 SM 生成代码,能显著缩短编译时间与二进制体积。CMAKE_TOOLCHAIN_FILE
:交叉编译的 toolchain 文件。CUDNN_VERSION/PROTOBUF_VERSION
:版本钉死时可指定。
四、运行示例与快速压测
数据集可以从TensorRT GA中的data文件夹获取
1) 运行 ONNX MNIST 样例(以 Windows 为例)
准备数据(mnist.onnx
+ 0.pgm...9.pgm
),假设放在 I:\code\TensorRT\data\mnist\
:
1 | I:\code\TensorRT\out\Release\sample_onnx_mnist.exe --datadir=I:\code\TensorRT\data\mnist |
看到 &&&& PASSED
、输出概率分布,就代表完整链路成功:ONNX -> Parser -> Builder -> Engine -> Inference。
2) 用 trtexec
生成 engine 并压测
1 | # FP32 |
关注 latency
、throughput
指标,感受 FP16 的收益。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 James的成长之路!
评论