深度学习中的 PreciseRoIPooling 在linux系统中的编译说明及踩坑

深度学习中的 PreciseRoIPooling 在linux系统中的编译说明及踩坑,第1张

1. Introduction

PreciseRoIPooling 用于从深度学习的特征图中提取指定Rigion Of Interesting (ROI) 区域的特征的,因其使用c++源代码编译并使用cuda加速,计算速度非常快。常用于目标检测、目标跟踪等任务,具体使用和原理参考其原文和代码:PreciseRoIPooling。

但是在实际使用过程中,经常会面临各种各样的安装问题。常见的有pytorch版本和cuda版本不匹配的问题,此处原则是,只要安装cuda对应的pytorch版本,都可以编译成功。本人在以下环境中都曾成功编译过:

cuda 10.2+ pytorch1.6.0/pytorch 1.7.0
cuda 11.1+ pytorch1.8.0

安装了和cuda对应的pytorch后,一定要记得检查 ~/.bashrc文件中cuda的环境变量是否添加正确

export PATH=/mnt/lustre/share/cuda-11.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/mnt/lustre/share/cuda-11.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/mnt/lustre/share/cuda-11.1
2. Success case

先来看看正确安装的例子,编译没问题的将会在用户目录下的缓冲文件夹中生成如下文件,其中的prroi_pooling_gpu_impl.cuda.o 和 prroi_pooling_gpu.o是我们正常运行该模块需要的,缺一不可。

3. Problems

前面的torch和cuda没问题后,在编译模块时还是会遇到如下几个问题,其实最终归结起来是一个GCC版本的问题。报错示例:
问题1: FAILED: prroi_pooling_gpu.o, 该错误表面无法构建 prroi_pooling_gpu.o文件
问题2: ninja: build stopped: subcommand failed. 该错误由于上面所需的两个文件有一个构建出错,所以build stopped
问题2: Command ‘[‘ninja’, ‘-v’]’ returned non-zero exit status 1. 出现这个问题时很多博客说修改cpp_extension中的[‘ninja’, ‘-v’]‘为[‘ninja’, ‘–version’]’,有人成功了,我个人实践不行。会直接跳过prroi_pooling_gpu.o文件的编译。导致错误提示No module named _prroi_pooling。而且这不是解决问题的根本,不建议这样做。

根本的问题是linux中的GCC版本不满足当前pytorch构建第三方模块的需求!!!

4. Solution

首先通过以下命令查看当前用户下gcc的版本是多少

gcc -v

比如这里的是比较旧版的: gcc-4.8.5

到这里发现版本过旧,不支持比较新的pytorch里的cpp_extension去编译c++文件,所以我们要去下载比较新的gcc版本来安转,gcc的下载、安装、和环境变量的配置参考该博客:非root用户安装Linux gcc版本。

我这里安装的是gcc-7.5.0, gcc的环境变量配置好后,再次使用gcc -v查看,发现gcc的版本已经升高了

至此,再去测试PreciseRoIPooling 就可以成功使用了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/928689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存