本文解說如何在Arch Linux安裝Nvidia專有驅動,解決畫面撕裂問題,以及介紹如何安裝相關的CUDA、cuDNN、TensorRT、NVIDIA Container Toolkit套件。
Linux核心內建的Nvidia驅動是為開源的nouveau
,由Linux社群逆向工程而來。nouveau讓你至少開機有畫面,但是一跑3D程式就破功了,nouveau的圖形效能只有Nvidia官方專有(閉源)驅動的一半,所以安裝Nvidia專有驅動乃必要之舉。
儘管 Nvidia官方有詳細的驅動安裝說明文件,但壓根沒提到Arch Linux系的發行版。所幸有全球社群的協助,Arch Linux還是可以安裝Nvidia推出的各式技術與產品的。
一般用戶玩遊戲只要裝完Nvidia專有驅動即可。要跑3D渲染、神經網路(Neural Network)、深度學習(Deep Learning)等AI相關程式的用戶才需要裝後面的CUDA、cuDNN、TensorRT套件。
NVIDIA Container Toolkit是為想跑CUDA但又不想裝多重CUDA版本的用戶所設計的容器工具。
1. 安裝Nvidia專有驅動#
撰文當下的Linux核心版本:6.8.7
Nvidia驅動版本:560
1.1. 桌上型電腦#
桌上型電腦指的是以Nvidia當主顯示卡的配置。
Arch Linux Wiki建議使用pacman安裝Nvidia驅動,不要執行Nvidia官網提供的.run
程式,這樣裝錯了才方便移除。
執行指令
sudo lspci -k | grep -A 2 -i "NVIDIA"
查看現在顯卡是使用哪個驅動。沒安裝專有驅動前,Linux應該會載入nouveau驅動。Maxwell架構以後的Nvidia 顯示卡,用以下指令安裝最新Nvidia驅動。安裝後nouveau應會被禁止載入(黑名單指令寫在
/usr/lib/modprobe.d/nvidia-utils.conf
)。
sudo pacman -S nvidia nvidia-utils
- 建議安裝純文字工具「nvtop」用於查看顯示卡使用率
sudo pacman -S nvtop
安裝驅動後重開機。
用
nvidia-smi
指令檢查安裝狀況,如果有顯示驅動版本代表驅動安裝成功。Nvidia驅動應是開箱即用的,無需手動調整X伺服器設定。再度執行指令
sudo lspci -k | grep -A 2 -i "NVIDIA"
,查看nouveau是否已經變成nvidia驅動。試著開瀏覽器看高畫質影片,再於終端機執行
nvtop
指令,可從圖表的顯卡使用率確認Nvidia顯示卡有無參與圖形算繪。
進階用法:如果你常常換核心開機(例如linux-zen
或linux-lts
),那裝DKMS版的Nvidia驅動會更妥當,它會在每次更新核心時自動編譯。
sudo pacman -R nvidia
sudo pacman -S nvidia-dkms nvidia-utils linux-headers
若是需要「特定版本」的Nvidia驅動,那麼可以到 AUR找舊版驅動,以DKMS安裝:
yay -S nvidia-535xx-dkms
1.2. 雙顯卡筆電#
搭載Nvidia顯卡的Linux筆電的安裝驅動方式跟桌上型電腦一樣。
不過,Intel+Nvidia的雙顯卡筆電,即使裝了Nvidia驅動也可能繼續用Intel顯卡渲染3D,導致3D性能低下。
此時請使用 PRIME指令啟用Nvidia顯示卡渲染;或者用 Envy Control完全切換顯卡渲染工作。
如果Nvidia專有驅動導致進入tty黑螢幕的話,於/etc/default/grub
的GRUB_CMDLINE_LINUX_DEFAULT
引數加入nomodeset
,再更新GRUB。
3. 安裝CUDA#
CUDA (Compute Unified Device Architecture),在做深度學習、Blender渲染時常用到的技術。
本文撰寫時點CUDA最新版本為12.4
- 安裝CUDA,重開機:
sudo pacman -S cuda
用
nvcc --version
指令確認CUDA版本。Arch Linux會將CUDA相關檔案安裝至
/opt/cuda
,有需要的話可以將CUDA的PATH加到~/.bashrc
,此路徑永遠指向最新版CUDA。
export PATH=/opt/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/opt/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
欲安裝舊版本CUDA,去 AUR找社群打包的就可以了。
例如現在最新版是CUDA 12,而你需要CUDA 11.1,就從AUR裝。舊版CUDA會安裝到
/opt/cuda-版本號
。
yay -S cuda-11.1
- CUDA可以多版本共存,改一下
~/.bashrc
裡面的路徑,指向舊版就行了。
export PATH=/opt/cuda-11.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/opt/cuda-11.1/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
4. 安裝NVIDIA Container Toolkit套件#
這是Nvidia設計給Docker/Podman用的工具,讓你只需要在宿主機安裝Nvidia驅動,不需安裝CUDA套件,也能讓容器使用CUDA運算。
- 安裝套件
sudo pacman -S nvidia-container-toolkit
- 新增設定檔
sudo mkdir /etc/docker
sudo vim /etc/docker/daemon.json
- 填入以下內容
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
- 重新啟動Docker
sudo systemctl restart docker
- 拉取CUDA 12.1版本的映像檔
sudo docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu20.04 nvidia-smi
- 測試能否在容器執行
nvidia-smi
,印出Nvidia驅動的資訊。
參考資料#
- NVIDIA - ArchWiki
- NVIDIA/Troubleshooting - Arch Wiki
- GPGPU - ArchWiki
- 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