PVE容器直通显卡教程

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

posted @   int16  阅读(895)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示