適用版本:Rocky Linux 9以上
以Nvidia顯示卡來說,Linux預設載入的是nouveau開源驅動,需要手動安裝Nvidia專有驅動,之後才能夠安裝CUDA套件。
雖然Rocky Linux安裝指令跟RHEL很像,但是有些服務不太一樣,所以特別寫一篇介紹。
1. 安裝Nvidia專有驅動#
Rocky Linux的「RPM Fusion」和「EPEL」套件庫都有收Nvidia專有驅動套件,但是我選擇從Nvidia官方的套件庫安裝,以取得最新版的套件。
本文安裝的時候並未啟用Secure Boot。
1.1. 桌電與伺服器#
- 查看現在Nvidia GPU是使用哪個驅動。
sudo lspci -k | grep -A 2 -i "NVIDIA"
- 沒安裝Nvidia專有驅動前,Linux應該會載入nouveau核心模組。
# 範例輸出
07:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device 85d6
Kernel modules: nouveau
- 啟用EPEL和CRB套件庫
sudo dnf install epel-release
sudo crb enable
- 加入Nvidia官方套件庫,選取RHEL 9版本
curver="rhel$(rpm -E %rhel)"
sudo wget -O /etc/yum.repos.d/cuda-$curver.repo \
http://developer.download.nvidia.com/compute/cuda/repos/$curver/$(uname -i)/cuda-$curver.repo
- 更新系統,重開機
sudo dnf update
sudo systemctl shutdown now -r
- 安裝編譯依賴套件
sudo dnf groupinstall "Development Tools"
sudo dnf install kernel-devel
sudo dnf install dkms
- 以DKMS方式安裝Nvidia驅動
# 安裝最新版本驅動
sudo dnf module install nvidia-driver:latest-dkms
# 或者解除安裝現有驅動,改裝指定版本的驅動
sudo dnf module list nvidia-driver
sudo dnf erase *nvidia*
sudo dnf module reset nvidia-driver
sudo dnf module install nvidia-driver:560-dkms
- 你可能要編輯GRUB,手動將nouveau驅動加入黑名單
sudo vim /etc/default/grub
# 在GRUB_CMDLINE_LINUX後面加入:rd.driver.blacklist=nouveau
sudo grub2-mkconfig -o /boot/grub2/grubenv
- 重開機
sudo reboot
- 確認Nvidia驅動版本:
nvidia-smi
- 順利的話應該會看到驅動版本
# 範例輸出
Sat Oct 26 15:01:38 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.03 Driver Version: 560.35.03 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1050 Ti Off | 00000000:07:00.0 Off | N/A |
| 29% 43C P8 N/A / 75W | 11MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
- 再度執行lspci指令
sudo lspci -k | grep -A 2 -i "NVIDIA"
- 查看nouveau是否已經變成nvidia。
# 範例輸出
07:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device 85d6
Kernel modules: nvidia_drm, nvidia
1.2. 雙GPU筆電#
搭載Nvidia獨立顯示卡的筆電安裝顯示卡驅動的方式跟桌上型電腦一樣。
不過,像Intel+Nvidia這種的雙GPU筆電,即使裝了Nvidia驅動也可能繼續用Intel的GPU渲染3D,導致3D性能低下。
此時可以使用prime-select
指令,指定用Nvidia顯示卡負責渲染作業。
sudo prime-select nvidia
重開機後再使用指令:vulkaninfo --summary
查看主顯示卡為何。
相關文章: Nvidia PRIME指令使用方式
2. 安裝CUDA#
必須先安裝Nvidia專有驅動才能安裝CUDA。
- 加入Nvidia官方套件庫,選取RHEL 9版本
curver="rhel$(rpm -E %rhel)"
sudo wget -O /etc/yum.repos.d/cuda-$curver.repo \
http://developer.download.nvidia.com/compute/cuda/repos/$curver/$(uname -i)/cuda-$curver.repo
- 安裝最新版CUDA套件
sudo dnf install cuda-toolkit
- 目前CUDA最新版本為12.6,將路徑加入到PATH
echo "export PATH=/usr/local/cuda-12.6/bin${PATH:+:${PATH}}" >> ~/.bashrc
source ~/.bashrc
- 確認CUDA版本
nvcc --version
- 應該會看到以下字串
# 範例輸出
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Sep_12_02:18:05_PDT_2024
Cuda compilation tools, release 12.6, V12.6.77
Build cuda_12.6.r12.6/compiler.34841621_0
3. 安裝NVIDIA Container Toolkit#
在Docker或Podman容器內跑CUDA的技術。宿主機必須安裝Nvidia專有驅動,但不需要安裝CUDA。
- 在Rocky Linux安裝Podman
sudo dnf install podman
- 新增Nvidia官方套件庫
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
- 安裝Nvidia Container Toolkit
sudo dnf install nvidia-container-toolkit
- 建立Nvidia的CDI環境定義
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
sudo nvidia-ctk cdi list
- 測試跑容器,看能否偵測到Nvidia驅動版本
podman run --rm --device nvidia.com/gpu=all --security-opt=label=disable ubuntu nvidia-smi
- 應該能顯示Nvidia驅動版本
# 範例輸出
Sat Oct 26 12:13:55 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.03 Driver Version: 560.35.03 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1050 Ti Off | 00000000:07:00.0 Off | N/A |
| 29% 38C P8 N/A / 75W | 70MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+
參考資料#
- Installing NVIDIA GPU Drivers - Rocky Linux Documentation
- Installing the NVIDIA Container Toolkit - Rocky Linux Documentation
- Nouveau: Accelerated Open Source driver for nVidia cards - freedesktop.org
- NVIDIA Driver Installation Quickstart Guide
- NVIDIA CUDA Installation Guide for Linux
- NVIDIA Deep Learning cuDNN Documentation
- NVIDIA Deep Learning TensorRT Documentation
- NVIDIA Container Toolkit Installation Guide