PVE容器直通顯示卡教程

int16發表於2024-11-04

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

如上所述,記住2260128這些序號。

修改容器配置檔案

修改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了。

相關文章