
在 Ubuntu 22.04 安裝 NVIDIA GPU 驅動、CUDA 及 cuDNN
伺服器這陣子因為工作關係,不定期的就安裝了一次 GPU 驅動程式,雖然不到每天安裝的程度,但每次安裝時都還是會忘記流程,還是需要上網找資料,於是今天就自己記錄一下吧。 這篇文章是我在 Ubuntu 22.04 安裝 GeForce RTX 4070 驅動、CUDA 及 cuDNN 的紀錄,提供大家參考。
禁用 nouveau 驅動
第一步需要先禁用 Ubuntu 內建的 nouveau 驅動,再安裝 NVIDIA 驅動。 這一步似乎不一定要做,有幾次我忘記禁用還是可以安裝驅動,不過早期我在安裝驅動時,是一定要做這個步驟的,可能跟驅動程式有關吧。
# 禁用 nouveau 驅動
# 在 /etc/modprobe.d/blacklist-nouveau.conf 檔案中加入下方兩行字
# blacklist nouveau
# options nouveau modeset=0
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf && echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
# 更新 kernel initramfs
sudo update-initramfs -u
# 重開機
reboot
# 執行後,沒有出現任何訊息,就表示成功禁用 nouveau 驅動
lsmod | grep nouveau
# 也可以使用以下指令檢查一下 configuration 是否還有 nouveau 文字
sudo lshw -numeric -C display
安裝 NVIDIA 驅動程式
先更新一下作業系統還有安裝一些套件。
# 更新及安裝套件
sudo apt-get update
sudo apt-get install libc-dev -y
sudo apt-get install linux-headers-$(uname -r) -y
sudo apt-get install ubuntu-drivers-common
自動偵測支援目前顯卡所需得驅動版本。
# 這個指令會直接輸出建議安裝驅動
nvidia-detector
# 這個指令會列出全部支援的驅動
# 請注意有一行會顯示 recommended
ubuntu-drivers devices
我偵測到的驅動是 nvidia-driver-535,所以直接以 nvidia-driver-535 為例進行安裝,實際上請記得置換成符合您顯卡的驅動。
# 您可以選擇手動安裝
sudo apt-get install nvidia-driver-535 -y
# 也可以選擇自動安裝 recommended 的驅動
sudo ubuntu-drivers autoinstall
確認是否正確安裝。
# 輸入 nvidia-smi 如果看到以下畫面就表示安裝成功了。
nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 4070 Off | 00000000:01:00.0 Off | N/A |
| 0% 38C P0 31W / 200W | 2MiB / 12282MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
安裝 CUDA
CUDA 是一種由 NVIDIA 提供的並行計算平台與程式設計介面(API),主要透過 NVIDIA GPU 的運算能力,來加速運算密集型的任務,特別適用於科學計算、深度學習、機器學習和大規模資料處理等領域。簡單來說,CUDA 能夠有效提升 GPU 的運算效能,讓程式執行得更快速。
在安裝 CUDA 時,需注意 CUDA 的版本必須與現有的 GPU 驅動程式相容。您可以透過 nvidia-smi 指令查看目前已安裝的 GPU 驅動所支援的最高 CUDA 版本。例如,我的主機支援的 CUDA 版本為 12.2。 接下來,請透過以下連結前往 NVIDIA 官方網站,選擇適合您需求的 CUDA 安裝方式。官網提供了 deb(local)、deb(network) 和 runfile(local) 三種安裝方式,您可以依照個人喜好任選其一。我個人習慣使用 deb(network) 的方式。
附帶一提,CUDA 安裝套件同時包含了 GPU 驅動與 CUDA Toolkit,如果您直接安裝 CUDA 套件,系統會自動安裝相對應的 GPU 驅動。但由於上述步驟中我們已經安裝過驅動程式,因此在此步驟我們僅需安裝 CUDA Toolkit 即可。
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 cuda-toolkit-12-2
# [不要執行] 以下指令會連同驅動一起安裝
sudo apt-get -y install cuda
# 加入環境變數
# 這個指令是暫時修改環境變數而已
# 如果要永久修改,請將以下兩行文字複製到 ~/.bashrc 檔案中的最後一行
export PATH=/usr/local/cuda-12/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
確認是否正確安裝。
# 方法一:直接使用 nvcc 指令
nvcc -V
# 正確安裝的話,會輸出以下內容
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:02:13_PDT_2023
Cuda compilation tools, release 12.2, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0
# 方法二:使用 deviceQuery 工具
git clone https://github.com/NVIDIA/cuda-samples
cd cuda-samples/Samples/1_Utilities/deviceQuery
make
./deviceQuery
# 會輸出一大堆東西,但只要注意有輸出 Result = PASS 就代表成功安裝
安裝 cuDNN
cuDNN(CUDA Deep Neural Network library)是由 NVIDIA 開發的 GPU 加速函式庫,專門用來提升深度神經網路(Deep Neural Networks, DNN)效能所設計。cuDNN 提供針對深度學習中常見運算(如卷積、池化與激活函數等)的高度優化實作,可有效發揮 NVIDIA GPU 的計算性能,進而加速模型的訓練與推論速度。
安裝 cuDNN 時需注意其與 CUDA 的版本相容性。在下載 cuDNN 前,您必須先註冊一個 NVIDIA 開發者帳號。請透過以下連結前往 NVIDIA 官方網站,選擇與您 CUDA 版本相符的 cuDNN 安裝檔,網站將引導您完成帳號註冊與檔案下載程序。
# 啟用本機儲存庫
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.5.30_1.0-1_amd64.deb
# 導入 GPG 金鑰
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
# 更新安裝源資料
sudo apt-get update
# 查詢是否有 libcudnn8 套件
apt-cache search libcudnn8
# 查詢 libcudnn8 安裝資訊
apt-cache policy libcudnn8
# 安裝 cuDNN
sudo apt-get install libcudnn8=8.9.6.50-1+cuda12.2
確認是否正確安裝。
sudo apt install libfreeimage3 libfreeimage-dev
sudo apt-get install libcudnn8-samples=8.9.6.50-1+cuda12.2
cp -r /usr/src/cudnn_samples_v8/ ~
cd ~/cudnn_samples_v8/mnistCUDNN/
make
./mnistCUDNN
# 會輸出一大堆東西,但只要注意有輸出 Test passed! 就代表成功安裝
安裝 DKMS (非必要)
DKMS(Dynamic Kernel Module Support)是 Linux 系統中用於動態管理內核模組的框架。 當 Linux 內核更新時,原本編譯好的內核模組可能會因版本不同而產生相容性問題,導致無法正常運作。 DKMS 的主要功能就是在偵測到內核更新後,自動重新編譯並安裝相關模組,以確保模組與新版本的內核相容。 例如,在安裝 NVIDIA 顯示卡驅動後,有時會遇到驅動突然失效或無法正常運作的問題,這通常是由於系統內核更新後,原先安裝的 NVIDIA 驅動模組未經重新編譯所導致。 透過 DKMS 機制,可有效避免這種情況的發生,確保驅動在每次內核更新後仍能正常運作。
# 安裝 DKMS
sudo apt-get install dkms
# 當您安裝 NVIDIA 驅動後,可以在 /usr/src 目錄中找到驅動原始檔
ls /usr/src | grep nvidia
# 使用 DKMS 安裝驅動
sudo dkms install -m nvidia -v 535.129.03
# 查看 DKMS 管理的模塊
dkms status
安裝 GDS (非必要)
GDS (GPUDirect Storage) 是 NVIDIA 開發的一項技術,主要是通過減少 CPU 的參與,直接在 GPU 和存儲之間實現高效的數據傳輸,這可以加快模型參數載入的速度。
這一項我還沒有深入研究,先在這裡做個紀錄,以下是官網安裝指南,提供大家參考。
安裝 NVIDIA Container Toolkit (在 Docker 中使用 GPU)
Docker 是現今很常見的部署工具,要讓 Docker 也能使用 GPU 的話,還需要額外安裝 NVIDIA Container Toolkit。
# 安裝 apt 安裝源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新
sudo apt-get update
# 安裝 NVIDIA Container Toolkit
sudo apt-get install -y nvidia-container-toolkit
安裝完成後,還需要對 Docker 進行一些設定。
# 設定 Docker 識別 NVIDIA Container Runtime
sudo nvidia-ctk runtime configure --runtime=docker
# 重新啟動 docker 服務
sudo systemctl restart docker
鎖定 GPU 驅動版本
雖然 DKMS 可以在 Linux 內核更新時,自動重新編譯 NVIDIA 的驅動模組,以避免 GPU 驅動失效,但實際上仍存在另一種情況可能導致 GPU 驅動失效,那就是系統或套件管理程式自動更新 GPU 驅動版本。 為了避免因此產生不必要的問題和大量電話,我通常會將 GPU 驅動版本鎖定,防止其自動更新。 不過,鎖定版本後,建議還是需要定期進行手動更新,以確保驅動版本保持最新的安全性與效能修正。
# 安裝 GPU 驅動版本
sudo apt-mark hold nvidia-driver-535
sudo apt-mark hold nvidia-kernel-source-535
sudo apt-mark hold nvidia-kernel-common-535
# 確認鎖定是否成功
apt-mark showhold
移除驅動
如果您在安裝過程遇到問題,想要將驅動移除並重新安裝,可以參考一下指令。
sudo apt remove --purge '^nvidia-.*'
sudo apt remove --purge '^cuda-.*'
sudo apt autoremove
3 則留言
有一个可能得原因是uefi的安全启动,禁用,即使他处于禁用状态,也要启用之后重新禁用。可以试试。
很迷。
之前我安装的时候,没有配置这个,也成功了,现在必须要禁用安全启动。