測試環境:
- FreeBSD 14 Release
- Nvidia專有驅動版本:550.54.14
介紹如何在FreeBSD系統設定Nvidia顯示卡的驅動。
由於 xf86-video-nouveau已經很久沒人維護了,FreeBSD沒有開源版的Nvidia驅動「nouveau」可用,所以不裝Nividia專有驅動就是沒法顯示X視窗系統的畫面。
除驅動之外,Nvidia推出的專有技術,例如CUDA,壓根沒有官方FreeBSD版。不過可以用Linuxulator技術跑Linux版的CUDA,這樣部份Python函式庫依賴CUDA的問題也能得到解決。
裝CUDA的用途為何?這不是必要元件,只是有些程式會用到,比如我參考的教學文章的作者是為了在FreeBSD跑Stable Diffusion WebUI才研究怎麼裝CUDA的~!Man of culture的力量好偉大。
但是這樣也代表依賴CUDA的程式得用Linux模擬方式跑啊。比如FreeBSD套件庫的Blender得用特殊指令才能存取CUDA。
1. 安裝Nvidia專有驅動#
Nvidia官網只有原始碼,沒有提供FreeBSD專門的套件庫,所以我們直接從FreeBSD套件庫裝驅動就可以了。
- Nvidia的驅動是專有軟體,需要看FreeBSD手冊的顯示卡代數表格選擇適合的驅動。像我的顯示卡為Nvidia GTX 1050Ti,可以直接裝最新版驅動:
sudo pkg install nvidia-driver nvidia-settings
- 如果需要跑Wayland桌面,還得安裝DRM驅動
sudo pkg install nvidia-drm-kmod
- 之後,把Nvidia核心模組加入開機自動啟動選項:
sudo sysrc kld_list+=nvidia-modeset
sudo sysrc kld_list+=nvidia-drm
- 如果重開機後無法啟動顯示管理器,就強迫Nvidia產生
/etc/X11/xorg.conf
:
sudo nvidia-xconfig
- 最後用nvidia-smi確認Nvidia驅動版本:
2. 安裝CUDA#
需要給 FreeBSD啟用Linuxulator支援,但不需要安裝Jail
安裝以下套件,libc6-shim可讓FreeBSD跑Linux的glibc
sudo pkg install libc6-shim linux-nvidia-libs
- 預設情況跑
nvidia-smi
是不會印出相容的CUDA版本的,故改用nvidia-slurp執行
nv-sglrun nvidia-smi
這樣會看到該Nvidia GPU相容的CUDA版本:
CUDA Version: 12.0
安裝Linux的編譯器
pkg install linux-c7-devtools
- 使用Linux的cc編譯 uvm_ioctl_override.c.
fetch https://gist.githubusercontent.com/shkhln/40ef290463e78fb2b0000c60f4ad797e/raw/f640983249607e38af405c95c457ce4afc85c608/uvm_ioctl_override.c
/compat/linux/bin/cc --sysroot=/compat/linux -m64 -std=c99 -Wall -ldl -fPIC -shared -o dummy-uvm.so uvm_ioctl_override.c
- 然後安裝linux-c7-libglvnd以取得libGL.so.1
sudo pkg install linux-c7-libglvnd
3. 執行需要CUDA的程式#
以Blender為例,從FreeBSD套件庫安裝
sudo pkg install blender
然後用nvidia-slurp執行,Blender的選單就認得到CUDA裝置了
nvidia-slurp blender
ffmpeg、OBS Studio的NVENC加速比照辦理。
註:FreeBSD論壇的用戶ziomario使用FreeBSD 13成功執行CUDA加上Blender,但是FreeBSD 14會出現錯誤exec: No such file or directory
,似乎是bug?
根據用戶julien40的回報,將Nvidia驅動降版可以解決該問題。