一、安装前准备
首先要查看你的NVIDIA显卡驱动是否支持cuda10.1版本。
因为是在docker中执行,所以需要先进入你的容器:
nvidia-docker start 容器名
nvidia-docker attach 容器名
在你的容器里执行以下命令查看cuda版本:
nvidia-smi
CUDA Version: … 这里的版本号需要大于等于你安装的cuda版本号
二、关键点:gcc降级
因为Ubuntu20.04自带的gcc版本为9.3,而cuda10.1不支持gcc-9,因此要手动安装gcc-7,命令如下:
sudo apt-get install gcc-7 g+±7
安装完gcc-7,系统中就存在两个版本的gcc,因此要设置默认的gcc,命令如下:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 1
此命令可以通过update-alternatives设置gcc各版本的优先级,优先级最高的为系统默认版本,可以用下述命令显示其优先级:
sudo update-alternatives --display gcc
设置默认的g++也是如此:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g+±7 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g+±9 1
显示g++优先级:
sudo update-alternatives --display g++
三、按照官网的安装步骤下载并安装CUDA 10.1
CUDA Toolkit 10.1 update2 Archive
Base Installer
Installation Instructions:
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
sudo sh cuda_10.1.243_418.87.00_linux.run
1、然后输入accept,回车。
2、由于你的系统中已经有了NVIDIA显卡驱动,如果不想安装CUDA 10.1中附带的驱动,移动到Driver选项上,按空格键将该项取消。移动到Install选项,回车,等待安装完成。如下图:
成功后:
四、安装过程中遇到的问题:
本人容器中自带一个cuda11.1,但是我需要重新安装个低版本的。
操作:
1、进入容器后,cd /usr/local
2、输入ls,查看有哪些文件,我这里会显示存在一个cuda-11.1
3、我之前自己建了一个文件夹cuda-10.1(mkdir 文件名),在这里边进行cuda10.1的下载和安装,但是报了以下错误:
首先说一下在运行 sudo sh cuda_10.1.243_418.87.00_linux.run命令时报的错:
(1)安装cuda报错:./cuda-installer: error while loading shared libraries: libxml2.so.2:如下图:![]()
解决办法1:
apt update
apt install libxml2
亲测,失败了。
解决方法2:
sudo apt-get install libxml2:i386 libstdc++6:i386
亲测,再次失败了!
(2)出现Missing recommended library错误:
解决方法,先安装依赖,命令如下:
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
本人并未遇到该问题。但是依然执行了该操作。
后来能进行 sudo sh cuda_10.1.243_418.87.00_linux.run命令的安装,但是安装完后出现了下述错误:
(3)安装失败:
具如何查看log中ERROR的内容呢?
** cat /var/log/cuda-installer.log | grep [ERROR] > a.txt**
a.txt文件中的具体错误内容如下:
解决办法:
将指令改为sudo ./cuda_10.1.243_418.87.00_linux.run --librarypath=/usr/local/cuda-10.1,重新运行。操作和上面的相同。
本人亲测,又又一次失败了!
最终解决办法:
我将cuda-10.1文件夹删除了 (rm -rf cuda-10.1),
然后 cd /usr/local,在该目录下重新下载安装cuda10.1
终于成功了!
五、配置可执行文件及库路径
安装完成后,需要为CUDA 10.1配置环境。
1、输入下述命令编辑bashrc文件:
vim ~/.bashrc 编辑文件的命令 输入i进行编辑
2、 加入配置
export PATH="$PATH:/usr/local/cuda-10.1/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-10.1/lib64"
3、使其生效:
source ~/.bashrc
或者:
1编辑bash_profile文件:
~/.bash_profile
写入
export PATH=/usr/local/cuda-10.1/binKaTeX parse error: Expected '}', got 'EOF' at end of input: {PATH:+:{PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64KaTeX parse error: Expected '}', got 'EOF' at end of input: …LIBRARY_PATH:+:{LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-10.1
2、执行下面语句使其生效:
source ~/.bash_profile
3、查看是否安装配置成功:
nvcc -V
类似下图:
六、cuda多个版本的切换
1、在安装了多个cuda版本后,可以在/usr/local/目录下查看自己安装的cuda版本,输入cd /usr/local/ ,然后输入:ls
2、这里,cuda-10.1和cuda-11.1就是我们安装的两个cuda版本了,而cuda是一个软链接,它指向我们指定的cuda版本(在设置环境变量时,我们可以使用cuda,而不用cuda-10.1和cuda-11.1,这样可以方便我们切换cuda版本,可以让我们不用每次都去该环境变量的值。)如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
3、可以使用stat命令查看当前cuda软链接指向的哪个cuda版本(stat cuda),如下所示:
文件类型是symbolic link,而指向的目录正是/usr/local/cuda-10.1,当我们想使用cuda-11.1版本时,只需要删除该软链接,然后重新建立指向cuda-11.1版本的软链接即可(注意名称还是cuda,因为要与bash_profile文件里设置的保持一致)
sudo rm -rf cuda
sudo ln -s /usr/local/cuda-11.1 /usr/local/cuda
七、cuDNN
1、下载cuDNN
Download cuDNN
(1)打开链接后,网站会要求你登陆,如果没有NVIDIA账号,注册后再登陆。
(2)登录之后寻找历史版本的cuDNN:
(3)选择下图中的进行下载:
2、安装cuDNN
(1)将下载的压缩包解压后(为cuda文件夹)上传到服务器上,放置路径为/workspace;
(2)将解压出的cuda/include/cudnn.h文件复制到/usr/local/cuda/include文件夹:
cd workspace/cuda/include
sudo cp .h /usr/local/cuda/include/ (注意这里是你自己的cuda的安装地址,复制.h文件)
(3)将cuda/lib64/下所有文件复制到/usr/local/cuda/lib64文件夹:
cd workspace/cuda/lib64/
sudo cp libcudnn /usr/local/cuda/lib64/*
(4)为上述文件添加读写和执行权限:
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
(5)查看cuDNN是否安装好:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
安装好后结果如下图: