超实用TensorRT CMake构建指南:3步掌握编译选项自定义
你是否在编译TensorRT时遇到过插件缺失、样本编译失败或CUDA版本不匹配的问题?本文将通过3个核心步骤,带你全面掌握TensorRT CMake构建系统的自定义编译选项,解决90%的构建难题。
1. 构建系统核心架构
TensorRT的CMake构建系统采用模块化设计,核心配置文件位于项目根目录的CMakeLists.txt。该文件定义了项目基础设置、依赖管理和编译选项,通过set_ifndef等自定义函数实现灵活配置。
1.1 关键配置模块
-
基础配置模块:cmake/modules/set_ifndef.cmake提供了条件变量设置功能,确保未定义的变量使用默认值:
function(set_ifndef variable value) if(NOT DEFINED ${variable}) set(${variable} ${value} PARENT_SCOPE) endif() endfunction() -
工具链配置:cmake/toolchains/目录包含跨平台编译配置,支持x86_64和aarch64架构。
2. 核心编译选项解析
2.1 功能模块控制
TensorRT提供三大核心组件的编译开关,默认均为开启状态:
option(BUILD_PLUGINS "Build TensorRT plugin" ON) # 插件模块
option(BUILD_PARSERS "Build TensorRT parsers" ON) # 解析器模块
option(BUILD_SAMPLES "Build TensorRT samples" ON) # 示例程序
- 插件模块:plugin/目录包含60+推理优化插件,如BERT注意力优化bertQKVToContextPlugin/
- 解析器模块:parsers/onnx/提供ONNX模型导入功能
- 示例程序:samples/包含20+使用示例,如sampleOnnxMNIST/
2.2 高级编译参数
| 参数名 | 说明 | 默认值 |
|---|---|---|
| TRT_LIB_DIR | 库文件输出目录 | ${CMAKE_BINARY_DIR} |
| GPU_ARCHS | CUDA架构代号 | 75;80;86;87 |
| CMAKE_CXX_STANDARD | C++标准版本 | 17 |
| BUILD_TYPE | 构建类型 | Release |
设置示例:指定GPU架构为Ampere(86)和Hopper(90):
cmake -DGPU_ARCHS="86;90" ..
3. 实战配置指南
3.1 最小化构建配置
构建仅包含核心推理引擎的TensorRT:
git clone https://gitcode.com/GitHub_Trending/tens/TensorRT
cd TensorRT
mkdir build && cd build
cmake -DBUILD_PLUGINS=OFF -DBUILD_PARSERS=OFF -DBUILD_SAMPLES=OFF ..
make -j$(nproc)
3.2 跨平台编译配置
为Jetson设备交叉编译:
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/cross-aarch64.cmake \
-DTRT_PLATFORM_ID=aarch64 \
-DGPU_ARCHS=87 ..
3.3 插件选择性编译
修改plugin/CMakeLists.txt,仅编译必要插件:
# 仅保留以下插件
add_subdirectory(bertQKVToContextPlugin)
add_subdirectory(efficientNMSPlugin)
add_subdirectory(skipLayerNormPlugin)
4. 常见问题解决方案
4.1 CUDA版本不匹配
错误信息:CUDA version 11.4 is required
解决方法:指定CUDA路径和版本:
cmake -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.2 \
-DCUDA_VERSION=12.2 ..
4.2 编译性能优化
使用ccache加速重复编译:
cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ..
make -j$(nproc)
总结与进阶
通过本文介绍的编译选项,你可以灵活定制TensorRT构建流程。进阶学习建议:
- 研究docker/ubuntu-22.04.Dockerfile中的容器化构建流程
- 探索tools/Polygraphy/提供的构建辅助工具
- 参与社区贡献,提交自定义插件的CONTRIBUTING.md
掌握这些技能后,你将能够针对不同硬件平台和应用场景,构建最优性能的TensorRT推理引擎。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



