|
运行MMdetection框架报错:CUDA error: invalid device function 段错误 (核心已转储)
运行脚本:出现的
python3 train.py ../configs/retinanet/retinanet_r50_fpn_voc.py
CUDA Runtime 10.2
CuDNN 7.6.5
安装pytorch的方法:
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
conda list看看:
cudatoolkit 10.2.89 hfd86
pytorch 1.6.0 py3.6_cuda10.2.89_cudnn7.6.5_0 pytorch
而系统中安装的是:cuda=10.0 cudnn=7.6.0
jiang@jiang-Ubuntu:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
jiang@jiang-Ubuntu:~$ cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0
原本这样是没有问题的,因为conda已经隔离了环境 但是 由于MMdetection框架需要编译cuda源码 用到的cuda版本不一致了
所以:只能先用conda卸载 pytorch torchvision cudatoolkit
再安装(cuda降低为10.1了):
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
pytorch 1.6.0 py3.6_cuda10.1.243_cudnn7.6.3_0 pytorch
cudatoolkit 10.1.243 h6bb024c_0 defaults
pytorch的版本还是1.6没变
或者在其他conda环境中来编译一下 再使用也行?
发现编译cuda用脚本:python3 setup.py develop
实际上还是用了系统的cuda(环境变量设置了)的版本:10.0 如下:
Using envvar MAX_JOBS (4) as the number of workers...
[1/34] /usr/local/cuda-10.0/bin/nvcc -DMMCV_WITH_CUDA
而运行时的CUDA Runtime 10.1 或 10.2 是conda环境里的 这样不一致了
关键:编译时和运行时的cuda版本必须要一致!
可以直接用别人编译好的那个so文件即可 试试? 也不行
_ext.cpython-36m-x86_64-linux-gnu.so
原因在这:
如果有一些特殊要求,比如需要用到CUDA编译库文件,那conda给安装的不完整CUDA就不够用了
conda环境里安装的cuda是不完整的,而系统里之前安装的才是完整功能的
环境变量的设置:
# dfy add 2020-08-18
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin{PATH}
最终只能:升级系统cuda的版本了 与pytorch中要求的一致
多版本cuda共存:https://bluesmilery.github.io/blogs/a687003b/ 比较麻烦
我干脆换到windows系统里去玩:http://www.ai111.vip/thread-1100-1-1.html
|
|