解决 TensorRT 不支持 mmdeploy::grid_sampler 问题
一、背景说明
硬件:NVIDIA Orin AGX(arm64/aarch64)
系统:Ubuntu 20.04(Apollo 11.0 开发容器)
TensorRT:8.5.2(JetPack 自带,无单独安装包)
问题:BEVNet 模型包含 mmdeploy::grid_sampler 算子,原生 TensorRT 不支持,直接转换报错
目标:编译 MMDeploy TensorRT 插件,支持模型推理

二、环境准备(Apollo 11.0 容器内)

  1. 进入 Apollo 容器
aem enter

三、MMDeploy 源码下载

  1. 克隆仓库
cd ~/  # 或 /apollo 目录
git clone https://github.com/open-mmlab/mmdeploy.git
cd mmdeploy
  1. 初始化子模块(必须!否则编译报错)
git submodule update --init --recursive

四、核心:正确编译命令(Orin AGX 专用)
在mmdeploy中

mkdir build && cd build
cmake .. \
-DMMDEPLOY_BUILD_SDK=ON \
-DMMDEPLOY_BUILD_SDK_CXX_API=ON \
-DMMDEPLOY_TARGET_BACKENDS=trt \
-DMMDEPLOY_BUILD_TESTS=OFF \
-DCMAKE_CUDA_ARCHITECTURES=87 \
-DTENSORRT_DIR=/usr/src/tensorrt \
-DCUDNN_INCLUDE_DIR=/usr/include/aarch64-linux-gnu \
-DCUDNN_LIBRARY=/usr/lib/aarch64-linux-gnu/libcudnn.so \
-DCMAKE_BUILD_TYPE=Release

make -j$(nproc)

五、验证编译结果
编译成功后,在 build/lib 目录下出现libmmdeploy_tensorrt_ops.so
该库包含 mmdeploy::grid_sampler 算子实现

六、测试模型转换(验证插件有效性)

/usr/src/tensorrt/bin/trtexec \
--onnx=/apollo/modules/perception/data/models/apollo_bevnet_onnx/apollo_bevnet.onnx \
--plugins=./libmmdeploy_tensorrt_ops.so \
--fp16

在这里插入图片描述

七、遇到的问题 + 解决方案
问题 1:CMake 报错 third_party/spdlog 不存在
plaintext
The source directory /xx/spdlog does not contain a CMakeLists.txt
原因:未下载 MMDeploy 子模块
解决:
bash
运行
git submodule update --init --recursive
问题 2:编译后无 libmmdeploy_tensorrt_ops.so
原因:
CMake 参数错误:-DMMDEPLOY_TARGET_BACKENDS=tensorrt
正确应为 trt
解决:
bash
运行
-DMMDEPLOY_TARGET_BACKENDS=trt
问题 3:TensorRT 路径找不到(Orin AGX 特殊)
Orin AGX 的 TensorRT 路径:
头文件:/usr/include/aarch64-linux-gnu
库文件:/usr/lib/aarch64-linux-gnu
工具:/usr/src/tensorrt
不能使用:-DTensorRT_ROOT=/usr
正确配置:
bash
运行
-DTENSORRT_DIR=/usr/src/tensorrt
-DCUDNN_INCLUDE_DIR=/usr/include/aarch64-linux-gnu
-DCUDNN_LIBRARY=/usr/lib/aarch64-linux-gnu/libcudnn.so
问题 4:trtexec 仍报 grid_sampler 不支持
原因 1:加载错误插件(如 libmmdeploy.so)
解决:必须加载 libmmdeploy_tensorrt_ops.so
原因 2:未加 --plugins 参数
解决:命令必须携带插件路径
问题 5:CUDA 架构设置错误
Orin AGX 架构:8.7
设置:
bash
运行
-DCMAKE_CUDA_ARCHITECTURES=87
八、Apollo 11.0 中永久使用插件
方法 1:临时加载(每次进入容器)
bash
运行
export LD_PRELOAD=/home/nvidia/mmdeploy/build/lib/libmmdeploy_tensorrt_ops.so
方法 2:永久生效(写入启动脚本)
bash
运行
echo ‘export LD_PRELOAD=/home/nvidia/mmdeploy/build/lib/libmmdeploy_tensorrt_ops.so’ >> /apollo/scripts/apollo_base.sh
九、总结
Apollo 11.0 + Orin AGX + TensorRT 8.5.2 不支持 mmdeploy::grid_sampler
必须编译 MMDeploy TensorRT 算子插件 解决
核心成功参数:-DMMDEPLOY_TARGET_BACKENDS=trt
关键插件:libmmdeploy_tensorrt_ops.so
模型转换必须加载该插件

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐