undefined symbol: __cudaRegisterFatBinaryEnd CUDA编译运行版本不匹配解决
Posted wind-chaser
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了undefined symbol: __cudaRegisterFatBinaryEnd CUDA编译运行版本不匹配解决相关的知识,希望对你有一定的参考价值。
如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应
在跑FPN模型时,发现本机是CUDA10.1,而pytoch==0.4.0,最高支持9.0,故安装CUDA9.0,用cuda-9.0的软连接代替cuda10.1来完成cuda版本的切换(不需要搞cudnn)
替换称cuda9.0后,重新make.sh,便解决了undefined symbol: __cudaRegisterFatBinaryEnd。一下是详细分析
如果pytorch的编译时CUDA版本和运行时CUDA版本不一致时,由于不同的 nvcc 编译器会生成不同的动态函数代码,由此会导致自己编写的 CUDA 函数无法正确运行。
常见的错误有:
undefined symbol: __cudaRegisterFatBinaryEnd (运行时为CUDA10.1,编译时CUDA版本<10.1)
undefined symbol: __cudaPopCallConfiguration (运行时为CUDA10.0,编译时CUDA<10.0)
等
由此思路有2个:
1. 重新编译 pytorch 使得编译时CUDA能够与运行时CUDA保持一致
2. 重新安装CUDA使得其与pytorch编译的版本一致。
服务器涉及多用户,因此采用了方案一避免引入其他问题:
具体的细节可以见我再github的讨论:issue
重新编译安装pytorch的脚本整理如下:
pip uninstall pytorch # conda uninstall pytorch, if you use conda nvcc -V # 查看 nvcc 版本 sudo rm -f /usr/local/cuda # optional, only if you already have this symlink sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda # 将如下路径加入环境变量,如~/.bashrc export CUDA_HOME=/usr/local/cuda export PATH="/usr/local/cuda/bin:$PATH" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64" export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda/lib64" source ~/.bashrc # 确保路径被加载 # 编译并安装 pytorch conda install numpy pyyaml mkl=2019.3 mkl-include setuptools cmake cffi typing conda install -c pytorch magma-cuda100 # optional step # clone the pytorch source code git clone --recursive https://github.com/pytorch/pytorch cd pytorch make clean # make clean is needed in my case export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"} sudo python setup.py install # sudo is needed in my case.
对于方案二、新装CUDA9.0 后,编译执行即可
参考:
https://www.cnblogs.com/luruiyuan/p/10720581.html
以上是关于undefined symbol: __cudaRegisterFatBinaryEnd CUDA编译运行版本不匹配解决的主要内容,如果未能解决你的问题,请参考以下文章
Undefined symbols for architecture i386: "_deflate", referenced from:
ngrep undefined symbol: pcap_restart 错误处理
mac编译openresty报Undefined symbols for architecture x86_64
ios Undefined symbols for architecture arm64
Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
全网首发:Undefined symbols for architecture x86_64: “std::__1::locale::use_facet(std::__1::locale::id&am