【教程】Ubuntu20.04安装NVIDIA CUDA全纪录+解决SSH一段时间自动断开报Destination Host Unreachable

2022-12-02 15:00:51 浏览数 (1)

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net] 网上没一个系统的全流程教程,算了还是自己来吧。

目录

完全卸载旧版(可选)

安装NVIDIA驱动

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

安装CUDA Toolkit

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

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


完全卸载旧版(可选)

代码语言:javascript复制
# 卸载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驱动

代码语言:javascript复制
sudo apt-get install build-essential gcc-multilib dkms
代码语言:javascript复制
ubuntu-drivers devices

        选一个安装版本,如果不懂,无脑选“recommended”的那个(但我选了510的):

代码语言:javascript复制
sudo apt install nvidia-driver-510 -y

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

代码语言:javascript复制
sudo reboot

        这时候驱动就可以用了:

代码语言:javascript复制
nvidia-smi

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

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

CUDA Toolkit

Toolkit Driver Version

Linux x86_64 Driver Version

Windows 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就行了

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

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

代码语言:javascript复制
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

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

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

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

代码语言:javascript复制
sudo vim ~/.bashrc

        在最后添加:

代码语言:javascript复制
export PATH=/usr/local/cuda-11.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH

        然后更新:

代码语言:javascript复制
source ~/.bashrc
sudo ldconfig

        好了,可以用了:

代码语言:javascript复制
nvcc --version

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

代码语言:javascript复制
sudo vim /etc/bash.bashrc

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

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

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

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

代码语言:javascript复制
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

        报错长这样: 

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

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

代码语言:javascript复制
systemctl status sleep.target

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

        关闭自动休眠:

代码语言:javascript复制
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

        可以再看一下:

代码语言:javascript复制
systemctl status sleep.target

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

0 人点赞