如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应

转载请注明:

 

仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/

 

如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应

如果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.

经过这些步骤后,问题终于得到解决。

posted @ 2019-04-16 22:33  仰望高端玩家的小清新  阅读(18676)  评论(0编辑  收藏  举报