在 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 一種並行計算平台和應用程式程式設計介面 (API),主要利用 NVIDIA GPU 的運算能力,加速運算密集型工作,特別是科學計算、深度學習、機器學習和大規模數據處理等領域,簡單來說就是可以讓 GPU 跑更快。
CUDA 要安裝的版本必需與驅動搭配,您可以透過 nvidia-smi 指令看到驅動搭配的 CUDA 版本,以我的主機為例 CUDA 版本是 12.2。 接下來,請透過以下連結至官網找到您需要的 CUDA 資料,官網提供的安裝方法有 deb(local)、deb(network) 及 runfile(local),看個人習慣擇一挑選,我是選 deb(network)。 附帶一提,cuda 安裝源包含 GPU 驅動與 CUDA Toolkit,如果您直接安裝 CUDA 系統會連同對應的驅動一起安裝,由於上面我們已經安裝過驅動了,這邊我們只需要安裝 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) 是一個專為深度神經網路(DNN)設計的 GPU 加速程式庫,主要針對深度神經網路中的常見操作,如卷積、池化、激活函數等,提供高度優化的實現,以充分發揮 NVIDIA GPU 的計算能力。
cuDNN 安裝需要搭配 CUDA 版本,在下載之前您必須先註冊 NVIDIA 帳號,請先透過以下連結至官網找到您需要的 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 驅動安裝完成之後,常常無緣無故驅動失效,大概就是因為內核更新造成的。
# 安裝 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
移除驅動
如果您在安裝過程遇到問題,想要將驅動移除並重新安裝,可以參考一下指令。
sudo apt remove --purge '^nvidia-.*'
sudo apt remove --purge '^cuda-.*'
sudo apt autoremove
3 則留言
有一个可能得原因是uefi的安全启动,禁用,即使他处于禁用状态,也要启用之后重新禁用。可以试试。
很迷。
之前我安装的时候,没有配置这个,也成功了,现在必须要禁用安全启动。