从 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
  • 基本工具:gitpkg-configwget(Linux);Windows 需 VS 2022 + 组件(含 C++、CUDA)

备注:onnx-tensorrtcubprotobuf 会由 TensorRT-OSS 的构建脚本自行下载/编译,无需预装。

2) 预编译 Python 包(可选,非源码构建)

如果你仅想用 Python 快速体验:

1
pip install tensorrt

可直接跳过“Build”章节进入模型推理体验。


二、获取源码与 GA 包

1) 克隆源码并拉取子模块

1
2
3
git clone -b main https://github.com/NVIDIA/TensorRT TensorRT
cd TensorRT
git submodule update --init --recursive

2) 下载并解压 TensorRT GA(用于链接头文件与库)

  • Linux 示例

    1
    2
    3
    cd ~/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
    2
    Expand-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)

  1. 构建容器镜像(示例:Ubuntu 22.04 + CUDA 13.0)
1
./docker/build.sh --file docker/ubuntu-22.04.Dockerfile --tag tensorrt-ubuntu22.04-cuda13.0
  1. 启动容器(需安装 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
    4
    export 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
2
3
4
5
6
7
8
9
10
11
12
13
# FP32
I:\code\TensorRT\out\Release\trtexec.exe `
--onnx=I:\code\TensorRT\data\mnist\mnist.onnx `
--saveEngine=I:\code\TensorRT\data\mnist\mnist_fp32.plan

# FP16
I:\code\TensorRT\out\Release\trtexec.exe `
--onnx=I:\code\TensorRT\data\mnist\mnist.onnx `
--fp16 `
--saveEngine=I:\code\TensorRT\data\mnist\mnist_fp16.plan

# 直接加载已保存的 engine 压测
I:\code\TensorRT\out\Release\trtexec.exe --loadEngine=I:\code\TensorRT\data\mnist\mnist_fp16.plan

关注 latencythroughput 指标,感受 FP16 的收益。

该封面图片由David MawPixabay上发布