在PVE8中实现LXC容器直通显卡(以NVIDIA P102为例)
研究LXC显卡直通的原因:宿主机也需要显卡用于虚拟机加速,没法创建一个虚拟机然后PCI直通。。。
下面进入正题:(PS:教程并不是很详细,有报错是正常的,环境问题比如Linux-header啥的可能得自己见机行事自己配置一下,不要死磕我的教程,而是将我的教程当成一个思路分享)
首先先在PVE宿主机安装Nvidia的驱动,建议直接使用run文件安装,例如我使用的是当时最新的560.35.03版本驱动(问就是好久了才想起来写一个教程。。)
Linux的runfile可以在这个Nvidia官方网站上面找到
(PS:之前有直接用apt装驱动的记得卸载一下驱动)
下载驱动到宿主机,然后chmod +x接运行二进制文件,直接一路安装下去,如果碰到说禁用nouveau和nvidiafb的提示,直接允许,等待安装完成,重启,使用nvidia-smi命令查看是否正常识别显卡,如果不正常得自己排查一下问题。。。
正常情况类似下图:

然后正常创建一个CT,我个人是用ubuntu22的模板,事实上应该绝大部分系统都能用(本文默认创建的LXC的VID为101)。
创建完毕后,先不急着启动,依旧在宿主机,依次输入以下命令:
ls -al /dev/nvidia*
ls -al /dev/dri/*
此时输出了如下内容:


你需要记住nvidia0的195,nvidia-uvm的506和card0的226(如果你只有这一张显卡的话,不过即便有多张显卡这个参数也是不会出现多个的),在后面修改conf文件的时候要用。
接下来修改LXC的配置文件:vi /etc/pve/lxc/101.conf(101即前面创建容器的VID)
在文件末尾添加以下内容(其中195,506,226为之前ls -al /dev/nvidia*和ls -al /dev/dri/*查询到的值,若有不同需要自行更改):
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 506:* rwm
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidia1 dev/nvidia1 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm 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-tools dev/nvidia-uvm-tools none bind,optional,create=file
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
(PS:如果你是PVE7或者PVE6,可能需要修改cgroup2为cgroup)
宿主机这边到这里就处理完成了,接下来打开LXC容器,下载同一个驱动到容器,chmod +x以后使用如下命令进行无内核模块安装:
./NVIDIA-Linux-x86_64-460.91.03.run --no-kernel-module(root用户执行)
安装完成后运行nvidia-smi,即可看到显卡正常驱动:

ps:本文教程参考了B站-节操仙人 的教程并在其基础上进行了总结修改,在此感谢大佬的付出 😃

浙公网安备 33010602011771号