解决Python中xxx.so: undefined symbol: __cudaRegisterFatBinaryEnd的问题

xxx.so: undefined symbol: __cudaRegisterFatB inaryEnd


最近打算跑一下Neural-Motifs文章代码 MotifNet,但是遇到了标题这个错误,记录一下解决过程。这份代码需要CUDA 9.0、Python 3、torchvision=0.2.0的环境。

原因

根据这篇的指导github,原因很可能是pytorch中的cuda版本与系统安装的CUDA版本号不一致导致的。先用以下命令查询该版本号:

python -c "import torch;print(torch.version.cuda)"

可以查看到pytorch的cuda版本号。这里我安装了pytorch 0.4.1,该语句输出对应的CUDA版本是9.0.176

nvcc --version

可以查看到当前环境的CUDA版本号,我用的是服务器自身安装的CUDA 10.2。

解决方法

如果这两个不一致,那就考虑把这两者的版本调整到一致,使得两者兼容。本文选择更改CUDA版本来解决这个问题。

pytorch 0.4.1、1.0.0、1.0.1、1.1.0这几个版本对应的CUDA版本都是9.0.176,因此安装这几个中的哪个版本的pytorch都ok。
如果想直接用已安装的CUDA 10.2,可以安装pytorch 1.5.0。pytorch 1.4.0对应的CUDA版本为10.1

  1. 安装CUDA 9.0
    解决了pytorch的版本问题再安装CUDA 9.0到自己的环境中,也就是不用系统自身安装的CUDA (一般系统的会安装在/usr/local/cuda-x.x的目录中)
    安装CUDA可以按照多版本CUDA安装与切换这个教程操作。
    在NVIDIA官网上,下载对应系统的CUDA可执行文件的时候只有Ubuntu 16.04和17.04的系统,
    下载地址:https://developer.nvidia.com/cuda-toolkit-archive
    虽然我的是Ubuntu 18.04,但是没关系,目前亲自尝试了ubuntu18.04安装cuda9.0、cuDNN这个教程,以及非root用户更改gcc版本的教程,在自己的目录(/home/my_name/)下安装了gcc 5.5.0、cuda9.0和cuDNN7.6.4的环境。

  2. 使用虚拟环境时需要将相应的路径添加到环境变量
    先启动虚拟环境,motif-net是我的环境名称。

source motif-net/bin/activate

添加cuda 9.0 和gcc 5.5.0 路径到PATH环境变量,“~/cuda/cuda9.0”是我上一步安装CUDA 9.0的路径,“~/gcc-5.5.0/bin”是我安装的gcc 5.5的bin目录,你需要根据你自己的设置修改以下命令。

export PATH=~/cuda/cuda9.0/bin:~/gcc-5.5.0/bin:$PATH

cuda的bin目录中包含了nvcc,使用nvcc -V可以查看该cuda的版本;类似地,gcc的bin目录包含了gcc、g++、cpp、c++等命令,使用gcc -v可以查看该gcc的版本。

  1. 在Neural-Motifs工程中的相关目录下执行以下操作
    进入到工程中的“lib/fpn/nms”目录,新建一个bash文件,假设命名为build.sh
cd lib/fpn/nms
vi build.sh

在build.sh中输入以下内容,注意cuda_path要写之前安装的cuda9.0所在目录

#!/usr/bin/env bash
cuda_path=/home/your_name/cuda/cuda9.0

cd src/cuda
echo "Compiling stnn kernels by nvcc..."
nvcc -c -o nms.cu.o nms_kernel.cu -x cu -Xcompiler -fPIC -arch=sm_52

cd ../../
python build.py

然后按Esc,:wq 保存文件并退出
接着修改build.sh文件的权限为777,才能运行build.sh,否则该文件无法执行

chmod 777 build.sh
./build.sh

然后再次运行工程的pretrain_detector.sh就没有nms.so: undefined symbol: __cudaRegisterFatBinaryEnd的问题了,类似的处理lib/fpn/roi_align文件夹的内容也是类似的,先新建个bash文件,写入上述内容(注意修改nvcc那条语句的两个文件名),再修改文件权限,最后执行就ok。

转载请注明出处,谢谢。

参考:
https://github.com/rowanz/neural-motifs/issues/65

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值