Pop!_OS 22.04(Ubuntu 22.04)安装Nvidia GPU 驱动、CUDA、cuDNN 以及Docker GPU支持(nvidia-docker2)
1 平台
- OS:Pop!_OS 22.04 LTS
- 本文所有输入输出都是在Pop!_OS 22.04 LTS上的。
- Pop!_OS 22.04 LTS是一款基于Ubuntu 22.04 LTS的Linux发行版,由System76开发和维护。理论上本文也适用于Ubuntu 22.04,但是未经测试。
- GPU:Nvidia Quadro M2000M
2 目标
- 安装GPU驱动nvidia-driver-530
- 安装CUDA 12.1
- 安装cuDNN 8.9.1.23
- 安装nvidia-docker2
3 步骤
3.1 驱动
1 更新apt软件源
sudo apt update
2 使用apt安装驱动
sudo apt install nvidia-driver-530
3 重启计算机
4 验证
在重启计算机后,执行以下命令
nvidia-smi
若有类似以下格式的输出,并且第二行Driver Version对应530版本,则可确认驱动安装成功
- 需要注意的是,这里的CUDA Version表示驱动支持的CUDA版本,并不代表我们已安装该版本的CUDA
3.2 CUDA
1 CUDA Toolkit安装
执行以下指令
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/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-get -y install cuda
以上指令来自CUDA Toolkit 12.1 Downloads | NVIDIA Developer的target_os=Linux -- target_arch=x86_64 -- Distribution=Ubuntu -- target_version=22.04 -- target_type=deb_network 方式,如需详细查看其他方式可能需要完成注册并登录再点击链接
2 环境变量设置
在~/.bashrc文件末尾添加
- 可先验证/usr/local/cuda-12.1文件夹是否存在后,再修改~/.bashrc,以免导致环境变量错误
export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}
3 POWER9设置
3.1 验证NVIDIA Persistence 守护进程是否正在运行
NVIDIA Persistence 守护进程应该会自动启动,验证是否正在运行
systemctl status nvidia-persistenced
-
若进程正在运行, Active状态应为active
-
若进程未自动启动,使用执行以下命令再验证
sudo systemctl enable nvidia-persistenced
3.2 禁用默认安装的 udev 规则
1 将POP!_OS 22.04 LTS的相应udev文件拷贝到/etc/udev/rules.d目录下
sudo cp /lib/udev/rules.d/40-vm-hotadd.rules /etc/udev/rules.d
2 在/etc/udev/rules.d/40-vm-hotadd.rules文件的类似以下格式对应的memory一行前加#注释掉该行
SUBSYSTEM=="memory", ACTION=="add", DEVPATH=="/devices/system/memory/memory[0-9]*", TEST=="state", ATTR{state}!="online", ATTR{state}="online
- 一些 Linux 发行版中默认安装了 udev 规则,这些规则会导致热插拔内存在物理探测时自动联机。此行为会阻止 NVIDIA 软件使用非默认设置来让 NVIDIA 设备进行内存联机。必须禁用此 udev 规则,NVIDIA CUDA 驱动程序才能在 POWER9 系统上正常运行。
- POP!_OS 22.04 LTS 默认安装的udev规则在
/lib/udev/rules.d/40-vm-hotadd.rules
文件中,有类似如下格式
SUBSYSTEM=="memory", ACTION=="add", DEVPATH=="/devices/system/memory/memory[0-9]*", TEST=="state", ATTR{state}!="online", ATTR{state}="online"
4 重启计算机
5 验证
1 重启后nvcc命令应可用
执行
nvcc -V
若CUDA安装成功,应有类似如下输出
2 (可选,但强烈推荐)编译并运行CUDA示例程序
1 克隆实例程序库
git clone https://github.com/NVIDIA/cuda-samples.git
- CUDA 12.1 对应commit e612904184446c81e4d5beac8755081f9662cca0
2 在示例程序目录下编译程序
cd cuda-samples
make
- 使用
TARGET_ARCH
make选项指定编译程序的目标架构,不指定默认为x86_64
make TARGET_ARCH=x86_64
make TARGET_ARCH=ppc64le
make TARGET_ARCH=armv7l
make TARGET_ARCH=aarch64
3 执行示例程序
编译成功后示例程序应在cuda-samples文件夹下的bin/x86_64/linux/release目录中
在cuda-samples文件夹下执行
./bin/x86_64/linux/release/deviceQuery
./bin/x86_64/linux/release/bandwidthTest
若两个程序末尾都有 Result = PASS
,则验证通过
3.3 cuDNN
1 配置临时环境变量
直接在终端执行
export OS=ubuntu2204
export cudnn_version=8.9.1.23
export cuda_version=cuda12.1
- 这里OS表示当前的系统,Pop!_OS 22.04 LTS 是基于Ubuntu 22.04 LTS的这里设置为ubuntu2204,官方文档表示可选debian11, ubuntu1804, ubuntu2004, o或 ubuntu2204;cudnn_version表示想要安装的cuDNN版本,官方文档表示可以是8.9.1.*,这里选择了8.9.1.23;cuda_version表示我们的CUDA版本,官方文档表示只能设置为cude12.1或cuda11.8
2 添加apt库
执行以下命令添加apt库
wget https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/cuda-${OS}.pin
sudo mv cuda-${OS}.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/ /"
sudo apt-get update
3 安装cuDNN 和cuDNN 示例程序
sudo apt-get install libcudnn8=${cudnn_version}-1+${cuda_version}
sudo apt-get install libcudnn8-dev=${cudnn_version}-1+${cuda_version}
sudo apt-get install libcudnn8-samples=${cudnn_version}-1+${cuda_version}
4 验证
0 可能缺少libfreeimage3 libfreeimage-dev库,执行
sudo apt install libfreeimage3 libfreeimage-dev
1 拷贝示例程序到用户文件夹,并编译
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
2 执行示例程序
在 $HOME/cudnn_samples_v8/mnistCUDNN文件夹下,执行
./mnistCUDNN
若输出程序末尾包含Test passed!,则验证成功
3.4 nvidia-docker2
安装nvidia-docker2的前提是你已经安装了docker
1 添加nvidia-docker2的GPG Keys
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
2 添加nvidia-docker2的apt库
创建/etc/apt/sources.list.d/nvidia-container-toolkit.list文件,并添加以下内容
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu22.04/$(ARCH) /
3 更新apt软件源
执行
sudo apt update
4 使用apt安装nvidia-docker2
sudo apt install nvidia-docker2
5 重启计算机
6 验证
重启后执行
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu20.04 nvidia-smi
若有类似以下输出则验证成功,此输出与在host中执行 nvidia-smi
类似
References
1 NVIDIA CUDA Installation Guide for Linux
2 cuDNN Installation Guide - NVIDIA Docs
3 How to Use the NVIDIA GPU in Docker Containers on Ubuntu 22.04 LTS (linuxhint.com)
4 CUDA Toolkit 12.1 Downloads | NVIDIA Developer