转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net]
网上没一个系统的全流程教程,算了还是自己来吧。
目录
报错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
sudo apt-get autoclean
# 查看是否卸载干净。如果卸载干净了,这条指令后将无提示
dpkg -l | grep nvidia
安装NVIDIA驱动
sudo apt-get install build-essential gcc-multilib dkms gcc g++ make -y
sudo apt install nvidia-common -y
ubuntu-drivers devices
选一个安装版本,如果不懂,无脑选“recommended”的那个(但我选了510的;下面有驱动与cuda的版本对应表):
# 安装指定版本
sudo apt install nvidia-driver-510 -y
# 或者使用自动选择最合适的安装
sudo ubuntu-drivers autoinstall
如果安装时遇到了问题,如:Error! Bad return status for module build on kernel
通常是安装了多个版本的驱动引起,这里是DKMS编译出问题了。可以参考以下修复步骤(注意我的报错是550,对于你的情况注意修改版本):
# 移除现有的NVIDIA DKMS模块 sudo dkms remove nvidia/550.54.14 --all # 删除任何残余的NVIDIA崩溃文件 sudo rm /var/crash/nvidia-*.crash # 重新安装驱动 sudo apt install nvidia-driver-550
如果问题仍然存在,看看是不是卸载干净了:
# 查看是否卸载干净。如果卸载干净了,这条指令后将无提示 dpkg -l | grep nvidia
把没有卸载的全部手动卸载了,然后再重新安装驱动即可。
装完一定需要重启,不然可能会报错的:
sudo reboot
这时候驱动就可以用了:
nvidia-smi
特别注意上面的“CUDA Version:11.6”!!后面装CUDA Toolkit的版本需要跟他一直,不然运行CUDA程序,就可能会报CUDA API错误等等。。。
通常来说,NVIDIA驱动程序的版本应该与CUDA版本相匹配,因为它们是相互依赖的。如果使用的NVIDIA驱动程序版本高于CUDA版本,可能会导致一些问题。
主要原因是CUDA版本和NVIDIA驱动版本之间有一定的兼容性要求。虽然某些情况下可以在不严格匹配的情况下运行,但是这样做可能会导致GPU计算错误、崩溃等问题。
因此,建议使用与CUDA版本相匹配的NVIDIA驱动程序版本,以确保系统稳定性和计算精度。可以查看NVIDIA官方文档,了解CUDA版本和NVIDIA驱动程序版本之间的兼容性。
官方对于兼容性的说明:https://docs.nvidia.com/deploy/cuda-compatibility/
CUDA Toolkit与驱动版本的对应关系表
官方实时更新地址:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
CUDA Toolkit | Toolkit Driver Version | |
---|---|---|
Linux x86_64 Driver Version | Windows x86_64 Driver Version | |
CUDA 12.4 Update 1 | >=550.54.15 | >=551.78 |
CUDA 12.4 GA | >=550.54.14 | >=551.61 |
CUDA 12.3 Update 1 | >=545.23.08 | >=546.12 |
CUDA 12.3 GA | >=545.23.06 | >=545.84 |
CUDA 12.2 Update 2 | >=535.104.05 | >=537.13 |
CUDA 12.2 Update 1 | >=535.86.09 | >=536.67 |
CUDA 12.2 GA | >=535.54.03 | >=536.25 |
CUDA 12.1 Update 1 | >=530.30.02 | >=531.14 |
CUDA 12.1 GA | >=530.30.02 | >=531.14 |
CUDA 12.0 Update 1 | >=525.85.12 | >=528.33 |
CUDA 12.0 GA | >=525.60.13 | >=527.41 |
CUDA 11.8 GA | >=520.61.05 | >=520.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+,下载较慢)
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
由于前面已经装了驱动,这里需要取消驱动的安装:
装完后会提示要添加路径,如果不加,命令就执行不了:
如果你是自己用,就加在自己的环境变量中:
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
如果是大家一起用,那就添加到公共环境变量里,比如:
sudo vim /etc/bash.bashrc
添加的内容和执行的命令,跟上面是一样的,不多写了。
安装CUDNN(可选)
# 下载: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
sudo ldconfig
安装NCCL(可选)
1、去官网找你的系统和cuda版本:nccl-legacy-downloads
2、根据你选的执行指令,比如:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt install libnccl2=2.21.5-1+cuda12.2 libnccl-dev=2.21.5-1+cuda12.2
报错cannot find -lcudart/cannot find -lcusparse的修复
有时装完上述内容,在编译时会出现报错,如:
是因为库找不到,调整一下就行。
sudo ln -s /usr/local/cuda/lib64 /usr/local/lib64
动态库的搜索路径先后顺序:
- 编译目标代码时指定的动态库搜索路径;
- 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
- 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
- 默认的动态库搜索路径/lib;
- 默认的动态库搜索路径/usr/lib。
SSH一段时间自动断开报Destination Host Unreachable
报错长这样:
经过一系列测试,发现不管干啥,固定20~30分钟后就会出现这个问题。第一反应就是系统是不是自动进入睡眠状态了,就跟Windows一样。(确实是的)
看一下是不是有自动睡眠:
systemctl status sleep.target
可以发现loaded。说明自动sleep是启用了。
关闭自动休眠:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
可以再看一下:
systemctl status sleep.target
可以发现masked。说明自动sleep是关闭了。