【教程】保姆级安装NVIDIA CUDA、CUDNN环境全纪录+解决SSH一段时间自动断开报Destination Host Unreachable

2,032 阅读5分钟

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net]

网上没一个系统的全流程教程,算了还是自己来吧。

目录

完全卸载旧版(可选)

安装NVIDIA驱动

CUDA Toolkit与驱动版本的对应关系表

安装CUDA Toolkit

安装CUDNN(可选)

报错cannot find -lcudart/cannot find -lcusparse的修复

SSH一段时间自动断开报Destination Host Unreachable


完全卸载旧版(可选)

# 卸载CUDA Toolkit:
#   这里的“11.6”改成你需要卸载的版本
sudo /usr/local/cuda-11.6/bin/cuda-uninstaller
sudo apt-get --purge remove "*cublas*" "cuda*"
# 卸载NVIDIA驱动
sudo apt-get --purge remove "*nvidia*"
# 删除无用包
sudo apt autoremove

安装NVIDIA驱动

sudo apt-get install build-essential gcc-multilib dkms
ubuntu-drivers devices

        选一个安装版本,如果不懂,无脑选“recommended”的那个(但我选了510的;下面有驱动与cuda的版本对应表):

eb802d34eb134bd3aa630a5c89e72e82.png

sudo apt install nvidia-driver-510 -y

        装完一定需要重启,不然可能会报错的:

sudo reboot

        这时候驱动就可以用了:

nvidia-smi

359a61c58c6447abac10ff6b81e02f00.png

        特别注意上面的“CUDA Version:11.6”!!后面装CUDA Toolkit的版本需要跟他一直,不然运行CUDA程序,就可能会报CUDA API错误等等。。。

        通常来说,NVIDIA驱动程序的版本应该与CUDA版本相匹配,因为它们是相互依赖的。如果使用的NVIDIA驱动程序版本高于CUDA版本,可能会导致一些问题。

        主要原因是CUDA版本和NVIDIA驱动版本之间有一定的兼容性要求。虽然某些情况下可以在不严格匹配的情况下运行,但是这样做可能会导致GPU计算错误、崩溃等问题。

        因此,建议使用与CUDA版本相匹配的NVIDIA驱动程序版本,以确保系统稳定性和计算精度。可以查看NVIDIA官方文档,了解CUDA版本和NVIDIA驱动程序版本之间的兼容性。

        官方对于兼容性的说明:docs.nvidia.com/deploy/cuda…

CUDA Toolkit与驱动版本的对应关系表

官方实时更新地址:docs.nvidia.com/cuda/cuda-t…

CUDA ToolkitToolkit Driver Version
Linux x86_64 Driver VersionWindows x86_64 Driver Version
CUDA 11.8 GA>=520.61.05>=522.06
CUDA 11.7 Update 1>=515.48.07>=516.31
CUDA 11.7 GA>=515.43.04>=516.01
CUDA 11.6 Update 2>=510.47.03>=511.65
CUDA 11.6 Update 1>=510.47.03>=511.65
CUDA 11.6 GA>=510.39.01>=511.23
CUDA 11.5 Update 2>=495.29.05>=496.13
CUDA 11.5 Update 1>=495.29.05>=496.13
CUDA 11.5 GA>=495.29.05>=496.04
CUDA 11.4 Update 4>=470.82.01>=472.50
CUDA 11.4 Update 3>=470.82.01>=472.50
CUDA 11.4 Update 2>=470.57.02>=471.41
CUDA 11.4 Update 1>=470.57.02>=471.41
CUDA 11.4.0 GA>=470.42.01>=471.11
CUDA 11.3.1 Update 1>=465.19.01>=465.89
CUDA 11.3.0 GA>=465.19.01>=465.89
CUDA 11.2.2 Update 2>=460.32.03>=461.33
CUDA 11.2.1 Update 1>=460.32.03>=461.09
CUDA 11.2.0 GA>=460.27.03>=460.82
CUDA 11.1.1 Update 1>=455.32>=456.81
CUDA 11.1 GA>=455.23>=456.38
CUDA 11.0.3 Update 1>= 450.51.06>= 451.82
CUDA 11.0.2 GA>= 450.51.05>= 451.48
CUDA 11.0.1 RC>= 450.36.06>= 451.22
CUDA 10.2.89>= 440.33>= 441.22
CUDA 10.1 (10.1.105 general release, and updates)>= 418.39>= 418.96
CUDA 10.0.130>= 410.48>= 411.31
CUDA 9.2 (9.2.148 Update 1)>= 396.37>= 398.26
CUDA 9.2 (9.2.88)>= 396.26>= 397.44
CUDA 9.1 (9.1.85)>= 390.46>= 391.29
CUDA 9.0 (9.0.76)>= 384.81>= 385.54
CUDA 8.0 (8.0.61 GA2)>= 375.26>= 376.51
CUDA 8.0 (8.0.44)>= 367.48>= 369.30
CUDA 7.5 (7.5.16)>= 352.31>= 353.66
CUDA 7.0 (7.0.28)>= 346.46>= 347.62

安装CUDA Toolkit

        去官网找到你需要的版本:

CUDA Toolkit Archive | NVIDIA Developer

       我这选个11.6.0就行了

9eaeeb5f86d94600a2f857516193ba77.png

        选一下,下面有命令行,复制过来运行就行。

6aecd0538eb54f009017a640860b277e.png

        不同版本不同选项下生成的命令都不一样。建议用这个runfile方式吧。(2G+,下载较慢)

wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run
sudo sh cuda_11.6.0_510.39.01_linux.run

        由于前面已经装了驱动,这里需要取消驱动的安装:

fdb1fdfc9c884ae28586947185aa56fd.png

057b5dc8f1804205915f673d38b0fa9e.png

69eee7ce22d54be193decef5fed20a9c.png

d7a3a7aa0e6a4cd4a147b9a9cc4d3986.png

        装完后会提示要添加路径,如果不加,命令就执行不了:

75a85d152d6c4d4d9b395d8e958dce9d.png

        如果你是自己用,就加在自己的环境变量中:

sudo vim ~/.bashrc

        在最后添加:

export PATH=/usr/local/cuda-11.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH

        然后更新:

source ~/.bashrc
sudo ldconfig

        好了,可以用了:

nvcc --version

50d01fd88f884739b7b8bf3ba6322a80.png

        如果是大家一起用,那就添加到公共环境变量里,比如:

sudo vim /etc/bash.bashrc

        添加的内容和执行的命令,跟上面是一样的,不多写了。

安装CUDNN(可选)

developer.nvidia.com/rdp/cudnn-d…

Installation Guide :: NVIDIA cuDNN Documentation

# 下载:Local Installer for Ubuntu20.04 x86_64 (Deb)

sudo dpkg -i cudnn-local-repo-ubuntu2004-8.9.1.23_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2004-8.9.1.23/cudnn-local-A9C84908-keyring.gpg /usr/share/keyrings/
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.9.1.23_1.0-1_amd64.deb

# 或者下载:Local Installer for Linux x86_64 (Tar)
tar -xvf cudnn-linux-x86_64-8.9.1.23_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.9.1.23_cuda11-archive
# 注意替换为你的cuda
sudo cp -P include/cudnn*.h  /usr/local/cuda-11.7/include 
sudo cp -P lib/libcudnn*     /usr/local/cuda-11.7/lib64 
sudo chmod a+r /usr/local/cuda-11.7/include/cudnn*.h /usr/local/cuda-11.7/lib64/libcudnn*

# ls -l /usr/local/cuda-11.7/lib64 | grep libcudnn
# ls -l /usr/local/cuda-11.7/targets/x86_64-linux/lib/ | grep libcudnn
# ls -l /usr/local/cuda-11.7/include | grep cudnn
# ls -l /usr/local/cuda-11.7/targets/x86_64-linux/include/ | grep cudnn

报错cannot find -lcudart/cannot find -lcusparse的修复

        有时装完上述内容,在编译时会出现报错,如:

fa3adbca212a461db6ff1ec41f356db4.png

        是因为库找不到,调整一下就行。

sudo ln -s /usr/local/cuda/lib64 /usr/local/lib64

动态库的搜索路径先后顺序:

  1. 编译目标代码时指定的动态库搜索路径;
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
  3. 配置文件 /etc/ld.so.conf中指定的动态库搜索路径;
  4. 默认的动态库搜索路径 /lib
  5. 默认的动态库搜索路径 /usr/lib

SSH一段时间自动断开报Destination Host Unreachable

        报错长这样: 

e9acec1b047846e3b24b4fc416b4510c.png

        经过一系列测试,发现不管干啥,固定20~30分钟后就会出现这个问题。第一反应就是系统是不是自动进入睡眠状态了,就跟Windows一样。(确实是的)

        看一下是不是有自动睡眠:

systemctl status sleep.target

a71fbecd2cda4d4fa3fc58f59459ab6a.png

        可以发现loaded。说明自动sleep是启用了。

        关闭自动休眠:

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

        可以再看一下:

systemctl status sleep.target

7b3bc80f99094d638443e5f054a31495.png

        可以发现masked。说明自动sleep是关闭了。