构建NVIDIA ODTK Docker容器失败,TensorRT编译错误求助
NVIDIA ODTK 训练镜像构建与编译错误排查
问题背景
按照NVIDIA官方教程使用ODTK训练旋转目标检测,执行镜像构建命令时出现依赖安装错误:
docker build -t odtk:latest retinanet-examples/
错误信息:
22.18 ERROR: Could not find a version that satisfies the requirement apex (unavailable) (from odtk) (from versions: 0.9.8dev.linux-i686, 0.9.8.dev0, 0.9.8a0.dev0, 0.9.9.dev0, 0.9.10.dev0) 22.18 ERROR: No matching distribution found for apex (unavailable)
该问题在NVIDIA相关论坛已有提及,但暂无有效解决方案。
本地环境配置
- Ubuntu 22.04.4 LTS
- Docker版本:26.1.0,构建号9714adc
- CUDA版本:12.4
- TensorRT版本:10.0.1.6-1+cuda12.4
问题排查与临时调整
定位到apex依赖问题源于镜像版本不匹配:构建过程中克隆的apex仓库其Dockerfile使用的基础镜像是nvcr.io/nvidia/pytorch:19.07-py3,而retinanet-examples目录下的两个Dockerfile分别使用nvcr.io/nvidia/pytorch:21.09-py3(主Dockerfile)和nvcr.io/nvidia/pytorch:20.03-py3(Dockerfile.deepstream)。
将这两个Dockerfile的基础镜像统一改为nvcr.io/nvidia/pytorch:19.07-py3后,apex依赖安装问题得以解决。随后修改csrc/extensions.cpp文件第175行,将:
buffers.push_back(buffer.data_ptr<float>());
替换为:
buffers.push_back(buffer.data_ptr());
新出现的编译错误
重新执行镜像构建时,出现大量TensorRT相关类型无法识别的编译错误,部分错误日志如下:
36.12 csrc/plugins/DecodePlugin.h:40:49: error: expected class-name before ‘{’ token 36.12 class DecodePlugin : public IPluginV2DynamicExt { 36.12 ^ 36.12 csrc/plugins/DecodePlugin.h:117:3: error: ‘DimsExprs’ does not name a type 36.12 DimsExprs getOutputDimensions(int outputIndex, const DimsExprs *inputs, 36.12 ^~~~~~~~~ 36.12 csrc/plugins/DecodePlugin.h:128:49: error: ‘PluginTensorDesc’ does not name a type 36.12 bool supportsFormatCombination(int pos, const PluginTensorDesc *inOut, 36.12 ^~~~~~~~~~~~~~~~ ...
目前已在本地Linux机器正确安装TensorRT,其头文件路径为/usr/include/x86_64-linux-gnu,且在执行Docker构建命令前已设置环境变量:
LD_LIBRARY_PATH=/usr/include/x86_64-linux-gnu/:$LD_LIBRARY_PATH
请问如何解决这些TensorRT相关的编译错误?
内容的提问来源于stack exchange,提问作者Raluca Pandaru
相关产品推荐
相关产品推荐

