检测宿主机是否能直接驱动核显
宿主机命令行执行ls -l /etc/dri,如果没有结果返回,说明核显被你直通给vm了。
取消vm的核显直通
pve里的群晖关机,在pve的群晖面板内取消群晖的PCI硬件(核显)
修改grub文件,去掉video相关字段
vim /etc/default/grub
将GRUB_CMDLINE_LINUX_DEFAULT一行的内容改为GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt",去掉video相关的配置。
改完之后执行update-grub
如果/etc/modules有改动过,可以忽略不改回来
开启pve宿主机的核显驱动
注释或者删除/etc/modprobe.d/blacklist.conf文件内的所有blacklist开头的内容。
把显卡从vfio-pci取消绑定
注释或者删除/etc/modprobe.d/vfio.conf内的形如options vfio-pci ids=8086:3185的内容
重启pve
创建lxc容器
创建的时候:
- 取消勾选”无特权容器”,即有特权。
- 创建完毕不要开机
- 选项-功能内勾选”嵌套”、“NFS”、“SMB/CIFS”、“FUSE”
自定义额外配置,将显卡挂载到虚拟机
在pve宿主机命令行,执行ls -l /etc/dri:
root@pve:~# ls -l /dev/dri/
total 0
drwxr-xr-x 2 root root 80 Oct 13 12:39 by-path
crw-rw---- 1 root video 226, 0 Oct 13 12:39 card0
crw-rw---- 1 root render 226, 128 Oct 13 12:39 renderD128
先找到card0,可以看到设备号”226,0”,再找到renderD128,可以看到设备号为”226,128”。记下card0的设备号为226:0,renderD128的设备号为226:128。
新建一个配置文件:/var/lib/lxc/106/mount_hook.sh(这里的106是上一步新建lxc的容器编号)
记得加权限:chmod +x /var/lib/lxc/106/mount_hook.sh。(这里还有其他很多办法,可以参考底部文章)
mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/fb0 c 29 0
修改lxc容器配置/etc/pve/lxc/106.conf:(这里的106是上一步新建lxc的容器编号)
# 这几行是docker运行需要的
lxc.apparmor.profile: unconfined
lxc.mount.auto: cgroup:rw
lxc.mount.auto: proc:rw
lxc.mount.auto: sys:rw
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
# 这4行是驱动核显需要的
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/106/mount_hook.sh
以上这些配置的目的是让容器拥有访问显卡设备的权限
启动lxc,执行ls /dev/dri,有返回card0 renderD128则说明lxc共享核显成功
监测核显运行
apt-get install -y intel-gpu-tools vainfo
执行vainfo查看自己的核显支持哪些格式。
执行intel_gpu_abrt、intel_gpu_time、intel_gpu_top查看核显实时运行状态。
其他
之后就可以在lxc里部署jellyfin等存储周边服务了,如pve lxc容器安装jellyfin,挂载使用NFS资源
参考 https://miaotony.xyz/2023/11/26/Server_HomeLab_4_GPUtranscoding/#toc-heading-12 https://post.smzdm.com/p/apzdlwdw/ https://www.alainlam.cn/?p=255