本文解說如何在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驅動版本:550
1.1. 桌上型電腦#
桌上型電腦指的是以Nvidia當主顯示卡的配置。
Arch Linux官方建議使用pacman安裝Nvidia驅動,不要執行Nvidia官網提供的.run
程式,這樣裝錯了才方便移除。
執行指令
sudo lspci -k | grep -A 2 -i "NVIDIA"
查看現在顯卡是使用哪個驅動。沒安裝專有驅動前,Linux應該會載入nouveau驅動。Maxwell架構以後的顯示卡,用以下指令安裝最新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。
2. 解決Nvidia畫面撕裂問題#
KDE 6在X11的工作階段可能會遇到動畫lag、捲動螢幕出現條紋、遊戲畫面撕裂(tearing)的問題。
- 以root執行Nvidia X server Setting
sudo nvidia-settings
點選Advanced,勾選Force Composition Pipeline
取消勾選Sync to Blank和Allow Flipping設定,關閉VSync
電源模式勾選Prefer Maximum Performance
點選Save to X Configuration File,將設定檔寫入至
/etc/X11/xorg.conf
編輯
/etc/environment
sudo vim /etc/environment
- 加入以下環境變數。
__GL_SYNC_DISPLAY_DEVICE
後面填寫螢幕代號(可以在Nvidia X server settings看),KWIN_X11_REFRESH_RATE
填寫螢幕重新整理頻率*1000的數值,例如我是60Hz。
__GL_SYNC_DISPLAY_DEVICE=HDMI-0
VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=HDMI-0
__GL_SYNC_TO_VBLANK=0
KWIN_X11_REFRESH_RATE=60000
KWIN_X11_NO_SYNC_TO_VBLANK=1
KWIN_X11_FORCE_SOFTWARE_VSYNC=1
重開機試試,畫面應該會改善許多。
如果還是不行,試試在登入畫面切換成KDE Wayland工作階段。KDE 6 (Nvidia驅動版本 > 545) 得啟用DRM才能正常進入Wayland工作階段。
su
mkdir /etc/modprobe.d
echo "options nvidia_drm modeset=1 fbdev=1" >> /etc/modprobe.d/nvidia.conf
或者嘗試降級Nvidia驅動版本、將Linux核心更換成linux-lts
。
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. 安裝cuDNN#
CUDA Deep Neural Network (cuDNN),用於加速神經網路的函式庫。
撰文當下cuDNN版本為8.9.7.29。
- 安裝cuDNN:
sudo pacman -S cudnn
- 同CUDA, AUR上也有舊版本cuDNN可以安裝。
5. 安裝TensorRT#
TensorRT是Nvidia推出的深度學習推理平台。
- 因為軟體授權限制,無法直接用yay裝,需要手動複製AUR儲存庫
sudo pacman -S base-devel
git clone https://aur.archlinux.org/tensorrt.git
然後到 Nvidia官網註冊帳號,下載
tar.gz
檔(注意版本需跟CUDA一致),放到tensorrt
目錄安裝python-oonx
yay -S python-onnx python-onnxruntime python-tensorflow-cuda
- 同步依賴套件,編譯安裝
cd tensorrt
makepkg --syncdeps
makepkg --install
6. 安裝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 Driver Installation Quickstart Guide
- NVIDIA - ArchWiki
- NVIDIA/Troubleshooting - Arch Wiki
- GPGPU - ArchWiki
- For those that have stutter/lags problems with KDE Plasma on Nvidia proprietary drivers - r/EndeavourOS Reddit
- Tutorial: How to disable vsync in kwin compositor X11. - r/kde Reddit
- docker: Error response from daemon: could not select device driver "" with capabilities: gpu