1 安装显卡驱动
1.1 禁用nouveau
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
在文件中插入以下内容,将nouveau加入黑名单,默认不开启
blacklist nouveau
options nouveau modeset=0
输入以下命令使禁用生效然后重启
sudo update-initramfs -u
sudo reboot
重启后验证
lsmod | grep nouveau
如果回车后无反应,则禁用成功
1.2 安装显卡驱动
查询电脑最适合的显卡驱动版本
ubuntu-drivers devices
安装推荐的显卡驱动,后面标recommended
sudo apt-get update
sudo apt-get install nvidia-driver-570 #此处数字要对应上面查询到的版本号
安装完成后重启
sudo reboot
重启后在终端验证
nvidia-smi
若出现GPU列表,则安装成功
2 安装CUDA
下载CUDA,并按照官方提示安装。
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
sudo sh cuda_12.4.1_550.54.15_linux.run
等待一会,会出现安装界面,取消第一个Driver选项里的X,[X]改为[ ],选择Install。
安装完后需要配置环境变量,将以下内容添加到~/.bashrc
文件中。
sudo vim ~/.bashrc
在文件末尾添加如下两行。
export LD_LIBRARY_PATH=/usr/local/cuda/lib
export PATH=$PATH:/usr/local/cuda/bin
然后刷新~/.bashrc
配置文件,使得配置生效。
source ~/.bashrc
测试、查询nvcc版本检查是否安装成功
nvcc -V
3 安装cuDNN
cuDNN下载链接, 下载对应版本的cuDNN
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cudnn
4 安装Fabric-manager(天坑)
之前装好了显卡驱动、CUDA、cuDNN后,使用Pytorch测试一直显示GPU不可用,报错代码:
Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 802: system not yet initialized
只能尝试重装驱动和CUDA等,试了无数个版本都未果。丢给DeepSeek、文心一言、豆包等都是得到教科书式的标准答案:"建议检查驱动兼容性"、"尝试清理残留文件",最后天无绝人之路,尝试丢给ChatGPT,答案输出的同时,瞬间看出具体问题所在,激动的心,颤抖的手。。。
在使用NVIDIA显卡(V100/A100/A30等)时,需要安装对应的驱动,还要安装与驱动版本对应的 nvidia-fabricmanager 服务,使GPU卡间能够通过NVSwitch互联。
安装nvidia-fabricmanager:
version=570.xxx.xx #已经安装的驱动版本
main_version=$(echo $version | awk -F '.' '{print $1}')
apt-get update
apt-get -y install nvidia-fabricmanager-${main_version}=${version}-*
启动服务
systemctl start nvidia-fabricmanager
查看状态
systemctl status nvidia-fabricmanager
设置开机自启动
systemctl enable nvidia-fabricmanager
5 使用Pytorch验证
使用miniconda安装好对应版本的Pytorch,运行下面的程序进行验证。
import torch
# 检查是否有可用的GPU
if torch.cuda.is_available():
device_count = torch.cuda.device_count()
print(f"当前系统中可用的GPU数量为:{device_count}")
else:
print("未检测到可用的GPU")
# 使用GPU进行计算任务
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
z = x + y
print(f"在GPU上进行计算:{z}")
else:
print("无法使用GPU进行计算")