# Fedora install Nvidia Driver Guida
Nvidia Driver說明
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html
本教學以 Fedora 為主,其他的可能請至官方文件說明
本篇以 Fedora 42 為主體
首先
在 Linux 上安裝 NVIDIA 驅動程式有一些要求。
## 介紹
Linux 系統需求
要在系統上使用 NVIDIA 驅動程式,你需要已安裝:
- NVIDIA GPU
- 受支援的 Linux 版本與編譯器及工具鏈(如 gcc)
另外在本節提到的注意 `<distro>` 與 `<arch>` 需以表格中「Codename」與「Architecture」欄位的值替換。
並且,對各作業系統的支援截至該作業系統官方所定義的標準 EOSS/EOL(支援終止/生命週期終止)日期。
| Distribution | Codename | Architecture |
| :--- | :--- | :--- |
| **amd64 systems (x86_66)** | | |
| Red Hat Enterprise Linux 10 | rhel10 | x86_64 |
| Red Hat Enterprise Linux 9 | rhel9 | x86_64 |
| Red Hat Enterprise Linux 8 | rhel8 | x86_64 |
| OpenSUSE Leap 15 SP6 | opensuse15 | x86_64 |
| Rocky Linux 10 | rhel10 | x86_64 |
| Rocky Linux 9 | rhel9 | x86_64 |
| Rocky Linux 8 | rhel8 | x86_64 |
| SUSE Linux Enterprise Server 15 SP6+ | sles15 | x86_64 |
| Ubuntu 24.04 LTS | ubuntu2404 | amd64 |
| Ubuntu 22.04 LTS | ubuntu2204 | amd64 |
| Debian 12 | debian12 | amd64 |
| Fedora 42 | fedora42 | x86_64 |
| KylinOS V10 SP3 2403 | kylin10 | x86_64 |
| Azure Linux 2.0 (CBL Mariner 2.0) | cm2 | x86_64 |
| Azure Linux 3.0 | azl3 | x86_64 |
| Amazon Linux 2023 | amzn2023 | x86_64 |
| Oracle Linux 9 | rhel9 | x86_64 |
| Oracle Linux 8 | rhel8 | x86_64 |
| **arm64 systems (sbsa)** | | |
| Red Hat Enterprise Linux 10 | rhel10 | aarch64 |
| Red Hat Enterprise Linux 9 | rhel9 | aarch64 |
| Red Hat Enterprise Linux 8 | rhel8 | aarch64 |
| SUSE Linux Enterprise Server 15 SP6+ | sles15 | aarch64 |
| Kylin V10 SP3 2403 | kylin10 | aarch64 |
| Ubuntu 24.04 LTS | ubuntu2404 | arm64 |
| Ubuntu 22.04 LTS | ubuntu2204 | arm64 |
| Azure Linux 3.0 | azl3 | aarch64 |
| Amazon Linux 2023 | amzn2023 | aarch64 |
可由一般使用者執行的指令,行首以 `$` 標示。
需要系統管理權限(`root`)的指令,行首以 `#` 標示。
上述兩句話為原手冊寫法,本文中若是為一般使用者可操作指令將不會加任何前綴,對於需以 `root` 執行的,會直接替代,方便操作
本文中的許多指令可能需要超級使用者權限。
在大多數 Linux 發行版上,這需要以 root 登入。
對已啟用 sudo 套件的系統,請在必要指令前加上 sudo,或使用 sudo -i 進入 root shell。
## 安裝前動作
在 Linux 上安裝 NVIDIA 驅動程式之前,必須先完成下列動作:
確認系統執行受支援的 Linux 版本。
確認系統已安裝對應的核心標頭(kernel headers)與開發套件(development packages)。
處理可能衝突的安裝方式。
### 確認你使用的是受支援的 Linux 發行版
NVIDIA 驅動程式套件僅支援特定的 Linux 發行版。這些發行版列於 NVIDIA 驅動程式的發行註記中。
欲確認目前系統的發行版與版本號,請輸入:
```
hostnamectl
```
### 確認系統已安裝正確的核心套件
NVIDIA 驅動程式要求:在安裝驅動程式當下,以及日後重建驅動程式時,系統必須安裝與正在執行的核心版本相同的 kernel headers 與 development packages。
例如:若系統執行的核心版本為 3.17.4-301,則必須安裝 3.17.4-301 的核心標頭與開發套件。
以 rpm 或 deb 安裝的驅動程式若偵測到未安裝任何版本的相關套件,會嘗試安裝 kernel headers 與 development packages 的最新版本;但該最新版本不一定與系統正在使用的核心版本相符。
因此,最佳做法是在安裝驅動程式之前(以及每次更換核心版本時),手動確保正確版本的核心標頭與開發套件已就緒。
查詢系統正在執行的核心版本:
```
sudo uname -r
```
### 選擇安裝方法
NVIDIA 驅動程式可使用發行版專屬套件(rpm 或 Debian 套件)安裝。
亦可使用與發行版無關的獨立封裝(runfile)。
與發行版無關的封裝可跨更多 Linux 發行版使用,但不會與發行版原生套件管理系統整合更新;
發行版專屬套件可與該發行版的套件管理系統整合。建議在可行時優先使用發行版專屬套件。
使用 rpm 或 Debian 的本機倉庫安裝包時,下載的套件會在本機檔案系統(如 /var/)中包含一個倉庫快照;此類套件只告訴套件管理器到哪裡取得實際安裝套件,不會直接安裝。
若啟用了線上網路倉庫,安裝時 rpm 或 Debian 套件會透過系統套件管理器(apt、dnf、tdnf、yum、zypper)自動下載所需套件。
## 額外說明
若沒有需要可以跳過(額外說明)的部分
### 驅動程式輔助腳本
目前 NVIDIA 有提供一個腳本,用以偵測並安裝最適合使用者系統的 NVIDIA 驅動程式套件。
此軟體旨在根據偵測到的系統硬體,幫助使用者決定要安裝哪一款 NVIDIA 顯示卡驅動程式。
若要安裝此驅動程式輔助腳本,請使用 `apt/dnf/tdnf/zypper` 安裝 `nvidia-driver-assistant` 套件。
下表說明了此驅動程式輔助腳本的不同旗標:
**驅動程式輔助腳本旗標**
| 旗標 (Flags Used) | 說明 (Description) |
| :--- | :--- |
| `--install` | 安裝建議的驅動程式。 |
| `--branch [BRANCH]` | 指定一個 NVIDIA 驅動程式分支。 |
| `--list-supported-distros` | 印出支援的 Linux 發行版列表。 |
| `--supported-gpus [SUPPORTED_GPUS]` | 使用一個不同的 `supported-gpus.json` 檔案。 |
| `--sys-path [SYS_PATH]` | 使用一個不同的 `/sys` 路徑。常用於測試。 |
| `--os-release-path [OS_RELEASE_PATH]` | 使用一個不同的 `os-release` 檔案路徑。常用於測試。 |
| `--distro [DISTRO]` | 使用 `DISTRO:VERSION` 或 `DISTRO` 格式來指定 Linux 發行版。常用於測試。 |
| `--module-flavor [MODULE_FLAVOR]` | 指定核心模組類型;可接受的值為 `open` (開源) 和 `closed` (封閉)。常用於測試。 |
| `--verbose` | [可選] 詳細輸出。 |
以下是指令輸出的範例:
**指令輸出**
| 指令 (Command) | 輸出範例 (Example Output) |
| :--- | :--- |
| `nvidia-driver-assistant` | `Detected GPUs:` <br> `NVIDIA GeForce RTX 3070 - (pci\_id 0x2484)` <br><br> `Detected system:` <br> `Ubuntu 24.04` <br><br> `Please copy and paste the following command to install the open kernel module flavour:` <br><br> `sudo apt install -y nvidia-open`
### 自動硬體選擇
從 560 版本開始,獨立的 NVIDIA 驅動程式 runfile 將會使用硬體偵測功能,根據偵測到的 SKU (產品型號),自動選擇安裝開源 GPU 核心模組或專有核心模組。
CUDA runfile 捆綁了一個完整的 NVIDIA 驅動程式 runfile,並且如果使用者透過 ncurses 介面或指令列選擇了安裝驅動程式(預設選項),它會傳遞 `--silent` 旗標。
因此,在預設情況下,使用者透過 CUDA runfile 將會安裝自動偵測的核心模組類型。此外,我們也在 `ncurses` UI 進階選項中,或透過 `--kernel-module-type=open` 和 `--kernel-module-type=proprietary` 旗標,提供了覆蓋(override)選項,讓使用者可以手動選擇開源 GPU 或專有核心模組。
### 核心模組 (Kernel Modules)
NVIDIA Linux GPU 驅動程式包含多個核心模組:
* `nvidia.ko`
* `nvidia-modeset.ko`
* `nvidia-uvm.ko`
* `nvidia-drm.ko`
* `nvidia-peermem.ko`
從 515 驅動程式系列開始,提供了兩種版本的核心模組:
* **專有 (Proprietary)** - 這是 NVIDIA 歷來提供的版本。適用於 Maxwell、Pascal 或 Volta 等較舊架構的 GPU。開源 GPU 核心模組與您的平台不相容,因此您必須使用專有模組。
* **開源 (Open-source)** - 以 MIT/GPLv2 雙重授權發布的核心模組。這些僅適用於 Turing 及更新的架構,如果您擁有這些架構之一,這就是您應該使用的。
從 560 驅動程式系列開始,開源核心模組是預設的安裝選項。
開源 GPU 核心模組僅支援 Turing 及更新的世代。要驗證您的 NVIDIA GPU 至少為 Turing 或更新:
```bash
lspci | grep VGA
```
#### 開源 GPU 核心模組安裝
為了簡化,我們將套件管理器的建議濃縮成表格格式。570 版之後的所有發行版都將使用這些封裝慣例。
以下指令將安裝一個**完整**的驅動程式,它將包含所有桌面元件以及用於運算工作負載的 CUDA 函式庫和工具。
**表 6 套件管理器安裝建議**
| 發行版 | 安裝最新版 | 安裝特定版本 |
| :--- | :--- | :--- |
| Red Hat Enterprise Linux 8/9, Rocky Linux 8/9 <br><br> Oracle Linux 8/9, KylinOS 10, Amazon Linux 2023 | `sudo dnf module enable nvidia-driver:open-dkms` <br><br> `sudo dnf install nvidia-open` | `sudo dnf module enable nvidia-driver:580-open` <br><br> `sudo dnf install nvidia-open-580` |
| Red Hat Enterprise Linux 10, Rocky Linux 10, <br><br> Fedora 42 | `sudo dnf install nvidia-open` | `sudo dnf install nvidia-open-580` |
| Azure Linux 2 / Azure Linux 3 | `sudo tdnf install nvidia-open` | `sudo tdnf install nvidia-open-580` |
| openSUSE Leap 15 | `sudo zypper install nvidia-open` | `sudo zypper install nvidia-open-580` |
| SUSE Linux Enterprise Server 15 (x86_64) | `sudo zypper install nvidia-open` | `sudo zypper install nvidia-open-580` |
| SUSE Linux Enterprise Server 15 (aarch64) | `sudo zypper install nvidia-open` | `sudo zypper install nvidia-open-580` |
| Debian 12 | `sudo apt install nvidia-open` | `#sudo apt install nvidia-open-580` |
| Ubuntu 22.04/24.04 | `sudo apt install nvidia-open` | `sudo apt install nvidia-open-580` |
#### 專有 GPU 核心模組安裝
為了簡化,我們將套件管理器的建議濃縮成表格格式。570 版之後的所有發行版都將使用這些封裝慣例。
以下指令將安裝一個**完整**的驅動程式,它將包含所有桌面元件以及用於運算工作負載的 CUDA 函式庫和工具。
**表 7 專有 GPU 核心模組安裝**
| 發行版 | 安裝最新版 | 安裝特定版本 |
| :--- | :--- | :--- |
| Red Hat Enterprise Linux 8/9, Rocky Linux 8/9 <br><br> Oracle Linux 8/9, KylinOS 10, Amazon Linux 2023 | `sudo dnf module enable nvidia-driver:latest-dkms` <br><br> `sudo dnf install cuda-drivers` | `sudo dnf module enable nvidia-driver:580-dkms` <br><br> `sudo dnf install cuda-drivers-580` |
| Red Hat Enterprise Linux 10, Rocky Linux 10, <br><br> Fedora 42 | `sudo dnf install cuda-drivers` | `sudo dnf install cuda-drivers-580` |
| Azure Linux 2 / Azure Linux 3 | Only the open kernel modules are supported. | Only the open kernel modules are supported. |
| openSUSE Leap 15 | `sudo zypper install cuda-drivers` | `sudo zypper install cuda-drivers-580` |
| SUSE Linux Enterprise Server 15 | `sudo zypper install cuda-drivers` | `sudo zypper install cuda-drivers-580` |
| Debian 12 | `sudo apt install cuda-drivers` | `sudo apt install cuda-drivers-580` |
| Ubuntu 22.04/24.04 | `sudo apt install cuda-drivers` | `sudo apt install cuda-drivers-580` |
## Fedora
### 請先執行「安裝前動作」。
為目前正在執行的核心安裝對應的 kernel headers 與 development 套件:
```bash
sudo dnf install kernel-devel-matched kernel-headers
```
本教學使用,網路倉庫安裝(Network Repository Installation)。
因此執行以下指令
請注意,以 Fedora 42 為例,請將參數 `$distro` 更換成 `fedora42`,`$arch` 更換成 `x86_64`
若為其他發行版請參考一開始的表格去替換
```bash
sudo dnf config-manager addrepo --from-repofile=https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
```
上述執行完後
清理 DNF 倉庫快取
```bash
sudo dnf clean expire-cache
```
### 驅動程式安裝(Driver Installation)
安裝驅動程式
<font color="red">若使用的是 RTX 20 系列或 GTX 16 系列的顯示卡(Turing 或更新架構),請安裝 Open Kernel Modules;
較舊的(如Maxwell, Pascal, 或是 Volta architectures 架構),請安裝 Proprietary Kernel Modules</font>
<font color="red">若使用的是 RTX 20 系列或 GTX 16 系列的顯示卡(Turing 或更新架構),請安裝 Open Kernel Modules;
較舊的(如Maxwell, Pascal, 或是 Volta architectures 架構),請安裝 Proprietary Kernel Modules</font>
<font color="red">若使用的是 RTX 20 系列或 GTX 16 系列的顯示卡(Turing 或更新架構),請安裝 Open Kernel Modules;
較舊的(如Maxwell, Pascal, 或是 Volta architectures 架構),請安裝 Proprietary Kernel Modules</font>
裝錯很麻煩
#### 開源核心模組(Open Kernel Modules):
```bash
sudo dnf install nvidia-open
```
#### 專有核心模組(Proprietary Kernel Modules):
```bash
sudo dnf install cuda-drivers
```
安裝完成後請執行 Post-installation Actions
## 安裝後續作業 (Post-installation Actions)
安裝後續作業必須手動執行。
建議重新開機後再執行
若是未重開機就執行可能會報錯
### Persistence Daemon
NVIDIA 在 Linux 上提供了一個使用者空間 (user-space) 的 daemon 服務,以支援在多次 CUDA 任務運行之間保持驅動程式的狀態。相較於持久性模式 (persistence mode),daemon 服務為這個問題提供了一個更優雅且更穩健的解決方案。
關於 NVIDIA Persistence Daemon 的更多詳細資訊,
請參閱
http://docs.nvidia.com/deploy/driver-persistence/index.html#persistence-daemon
所有的發行版套件都包含一個 `systemd` preset (預設配置),如果它是作為其他驅動程式元件的依賴項被安裝的,該服務會被自動啟用。它也可以透過執行以下指令來手動重啟:
```bash
sudo systemctl restart nvidia-persistenced
```
### 驗證驅動程式版本
如果您安裝了驅動程式,請驗證載入的是否為正確的版本。當驅動程式被載入時,可以透過執行以下指令來找到驅動程式的版本:
```bash
cat /proc/driver/nvidia/version
```
### 移除本地軟體庫
在驅動程式安裝完成後,建議移除本地軟體庫的安裝程式。
Fedora 42 使用以下指令
```bash
sudo dnf remove nvidia-driver-local-repo\*
```
整體驅動至此安裝完成