原来的系统及相关配置:
ubuntu18.04 + CUDA10.1 + cuDNN7.6.4
安装教程如下:
https://blog.csdn.net/ys578676728/article/details/102669085
由于需要测试的source code使用的是tensorflow1.2版本,需要CUDA8.0支持,故尝试在已有的10.1版本的情况下安装CUDA8.0。过程中踩过一些坑,特此记录下来。
https://developer.nvidia.com/cuda-80-ga2-download-archive
按照如下选择,忽略 Version: 16.04
两个都下载,按提示运行sudo sh cuda_8.0.61_375.26_linux.run
按照下图选择,注意不用安装驱动,其余都默认yes
第一个坑:使用不支持的编译器。因为系统中的编译器是gcc-7,而CUDA8.0安装时只支持gcc-5以下的版本,因此我们安装个gcc-4.8和g++-4.8
sudo apt-get install gcc-4.8 g++-4.8
查看此时系统默认gcc版本
gcc -v
发现还是gcc-7。因此我们还需要修改系统默认的gcc版本,这里使用update-alternatives,这个命令是个专门维护系统命令链接符的工具,具体在此不赘述,使用方法如下:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 10 --slave /usr/bin/g++ g++ /usr/bin/g++-7
上面两个命令分别创建了gcc-4.8, gcc-7和系统gcc的关联,20和10表示其优先级,数字越大优先级越高。同时g++作为slave从属前面的关联。可通过如下命令查看创建结果:
sudo update-alternatives --config gcc
此时再查看系统gcc版本时发现已经变成了gcc-4.8。当我们需要切换版本时,只需选择对应版本前面的序号0/1/2即可。
虽然上面一步解决了编译器版本的问题,重新安装时发现还是报错。此时我们查看一下日志/tmp/cuda_install_*.log,可以看到如下提示:
Can't locate InstallUtils.pm in @INC
表明无法找到InstallUtils.pm这个文件。同时注意到log中@INC contains后面还跟着很多路径,首先需要确认下这些路径是不是在系统中存在,找到一个即可。我的系统中有/usr/share/perl5,因此下一步就是将InstallUtils.pm复制到此路径:
mkdir cuda-8
sudo sh cuda_8.0.61_375.26_linux.run --noexec --target cuda-8
sudo cp cuda-8/InstallUtils.pm /usr/share/perl5
完成上述步骤后,重新安装:
sudo sh cuda_8.0.61_375.26_linux.run
安装成功!!!
经过上述步骤,/usr/local里同时有cuda-10.1和cuda-8.0两个文件夹。此时同样使用update-alternatives来实现版本管理:
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-8.0 20
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.1 10
同时需要注意的是,如果之前的环境变量设置的是/usr/local/cuda-10.1需要改成/usr/local/cuda。如下图情况就需要修改。
最后执行下面命令:
sudo ldconfig /usr/local/cuda/lib64
在需要版本切换时,执行如下语句,然后选择需要版本所对应的序号即可。
sudo update-alternatives --config gcc
和CUDA8.0对应的cuDNN版本为5,下载cuDNN v5 Library for Linux
https://developer.nvidia.com/rdp/cudnn-download
下载完成后,将文件解压,然后:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so