intel、amd、nvidia的顯示卡均可以直通,並且該直通是共享,不是獨佔,也即所有容器都可以同時使用這些顯示卡,同時效能沒有損耗。
建立容器
取消勾選無特權的容器
,即unprivileged container
檢視顯示卡檔案
$ ls -l /dev/dri/
crw-rw---- 1 root video 226, 0 Dec 29 11:20 card0
crw-rw---- 1 root render 226, 128 Jul 14 01:29 renderD128
如上所述,記住226
、0
和128
這些序號。
修改容器配置檔案
修改LXC容器配置/etc/pve/lxc/xxx.conf
,按需修改以下四行新增到檔案末尾
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
完成
這時候你就可以在容器裡面正常使用顯示卡執行jellyfin和ffmpeg之類的東西了。如果沒有許可權使用,注意修改容器裡面的/dev/dri/card0
等檔案的許可權或者所有者。
驗證方法
intel可以安裝intel-media-va-driver-non-free intel-gpu-tools
,使用intel_gpu_top
檢查執行狀況。amd可以使用radeontop
。
nvidia
nvidia fxxk u
nvidia需要先在pve裡面裝好驅動。apt install dkms proxmox-headers-xxx
(改為你的核心版本對應的header,不清楚就用uname -a
檢查,然後按tab補全)
接著安裝nvidia-drivers
執行nvidia-smi
檢查是否正常工作。
nvidia裝置比較多,如果你要用cuda之類的,還需要通入以下裝置
檢查:
$ ls -la /dev/nvidia*
crw-rw-rw- 1 root root 195, 0 Feb 25 13:12 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Feb 25 13:12 /dev/nvidiactl
crw-rw-rw- 1 root root 195, 254 Feb 25 13:12 /dev/nvidia-modeset
crw-rw-rw- 1 root root 510, 0 Feb 25 13:12 /dev/nvidia-uvm
crw-rw-rw- 1 root root 510, 1 Feb 25 13:12 /dev/nvidia-uvm-tools
/dev/nvidia-caps:
total 0
drwxr-xr-x 2 root root 80 Feb 25 13:12 .
drwxr-xr-x 19 root root 4400 Feb 25 13:12 ..
cr-------- 1 root root 235, 1 Feb 25 13:12 nvidia-cap1
cr--r--r-- 1 root root 235, 2 Feb 25 13:12 nvidia-cap2
如果發現缺失nvidia_uvm
,檢查該模組:
$ lsmod | grep nvidia_uvm
若不存在則在/etc/modules
中新增一行nvidia_uvm
,然後重啟或者執行modprobe nvidia_uvm
,然後執行nvidia-modprobe -c0 -u
就能看到uvm裝置了。
將上述裝置通入,編輯/etc/pve/lxc/xxx.conf
,記得一一對應序號
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 226:1 rwm
lxc.cgroup2.devices.allow: c 226:129 rwm
lxc.cgroup2.devices.allow: c 235:* rwm
lxc.cgroup2.devices.allow: c 510:* rwm
lxc.mount.entry: /dev/dri/card1 dev/dri/card1 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD129 dev/dri/renderD129 none bind,optional,create=file
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
然後在你的容器裡面下載NVIDIA_xxx.run驅動檔案後chmod +x並執行./NVIDIA_xxx.run --no-kernel-module
,同理cuda_xxx.run --override
,就能用cuda了。