PVE8.X N卡虚拟化VGPU--基于1050Ti
顺带接有偿部署,有需要可以加博主微信
微信:ha_July
记录一下pve8.X 配置N卡虚拟化的一些设置,基于GTX1050Ti。
硬件配置
配置 | 型号 |
---|---|
系统 | PVE 8.1.4 |
内核 | Linux 6.5.11-8-pve |
CPU | Intel Core i5-7500 @ 3.4GHz 4核4线程 |
显卡 | GTX1050 Ti 4096MB |
VGPU驱动 | 535.129.03 |
PVE基本设置
安装PVE过程略过,提前将pve安装好,在安装VGPU前先将pve底层设置优化一下nano
命令 Ctrl +X
输入“Y
”保存
更换系统源
国内清华源
# 编辑sources.list
nano /etc/apt/sources.list
# 将原有的源链接在句首加 # 注释掉,更换以下清华源信息
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
更换企业源
国内清华源
# 编辑pve-enterprise.list
nano /etc/apt/sources.list.d/pve-enterprise.list
# 将原有的源链接在句首加 # 注释掉,更换以下清华源信息
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription
修复源401错误
# 编辑ceph.list
nano /etc/apt/sources.list.d/ceph.list
# 将原有的源链接在句首加 # 注释掉,添加中科大ceph源
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
执行更新源
apt update && apt dist-upgrade -y
LXC容器更源
国内清华源
# 备份APLInfo.pm
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
# 替换为清华源:
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
# 重启服务后生效
systemctl restart pvedaemon.service
PVE常用优化脚本
去掉登录订阅提示,合并local-lvm以最大化利用硬盘空间,添加CPU频率硬盘温度,删掉不用的内核等信息
# 下载pve_source二进制文件到/root目录
wget https://yangwenqing.com/files/pve/pve_source && chmod +x pve_source && ./pve_source
开启硬件直通
需要提前在主板BIOS开启虚拟化功能,才能开启硬件直通。在BIOS开启vt-d,AMD平台是iommu,部分OEM主板上叫SRIOV
使用nano
命令编辑/etc/default/grub
Intel CPU
nano /etc/default/grub
# 开启iommu分组
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
# 更新grub
update-grub
加载内核模块
编辑nano /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
屏蔽设备
添加设备黑名单,编辑pve-blacklist.conf
# 编辑pve-blacklist.conf
nano /etc/modprobe.d/pve-blacklist.conf
# 直通AMD显卡,请使用下面命令
blacklist radeon
blacklist amdgpu
# 直通NVIDIA显卡,请使用下面命令
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
# 直通INTEL核显,请使用下面命令
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
# 允许不安全的设备中断
options vfio_iommu_type1 allow_unsafe_interrupts=1
执行更新initramfs
# 更新initramfs
update-initramfs -u -k all
# 重启
reboot
验证是否开启直通
# 验证是否开启iommu
dmesg | grep iommu
或者
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
出现如下例子。则代表成功
[ 1.341100] pci 0000:00:00.0: Adding to iommu group 0
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4
此时输入命令
find /sys/kernel/iommu_groups/ -type l
#出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启
lsmod | grep vfio
# 检测模块是否加载
vfio_pci 16384 4
vfio_pci_core 94208 1 vfio_pci
vfio_iommu_type1 49152 2
vfio 57344 17 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd 73728 1 vfio
irqbypass 16384 41 vfio_pci_core,kvm
#出现这类信息,就代表成功了。
配置VGPU_Unlock
# 创建vgpu_unlock文件夹
mkdir /etc/vgpu_unlock
# 创建profile_override.toml文件
touch /etc/vgpu_unlock/profile_override.toml
# 创建nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d启动服务
mkdir /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d}
# 写入路径信息
echo -e "[Service]\nEnvironment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpud.service.d/vgpu_unlock.conf
echo -e "[Service]\nEnvironment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpu-mgr.service.d/vgpu_unlock.conf
# 重新加载服务
systemctl daemon-reload
执行完成后,cat下查看服务配置是否与下边一致
cat /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d}/*
[Service]
Environment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so
[Service]
Environment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so
下载预编译好的libvgpu_unlock_rs.so文件
mkdir -p /opt/vgpu_unlock-rs/target/release
cd /opt/vgpu_unlock-rs/target/release
wget -O libvgpu_unlock_rs.so https://yangwenqing.com/files/pve/vgpu/vgpu_unlock/rust/libvgpu_unlock_rs_20230207_44d5bb3.so
安装VGPU驱动
安装显卡驱动需要用到的依赖
apt install build-essential dkms mdevctl pve-headers-$(uname -r)
# 下载显卡驱动
wget "https://yun.yangwenqing.com/ESXI_PVE/vGPU/NVIDIA/16.2/NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm-patched.run"
# 赋予执行权限
chmod +x NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm-patched.run
# 安装驱动(默认回车直至安装完成即可)
./NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm-patched.run
# 重启
reboot
其他补充提示:
1) 如之前安装过了显卡驱动,则需要先卸载,再安装
# 卸载显卡驱动
./NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm-patched.run --uninstall
# 移除显卡相关程序
sudo apt-get remove --purge nvidia-*
# 安装驱动(默认回车直至安装完成即可)
./NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm-patched.run
2) 下载慢?试试aria2吧
# 在pve安装aria2
apt install aria2
# 4线程下载文件
aria2c -s 4 -x 4 -j 10 'https://yun.yangwenqing.com/ESXI_PVE/vGPU/NVIDIA/16.2/NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm-patched.run'
重启完成后查看相关服务状态
# 查看相关服务状态
systemctl status {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
# 重新启动相关服务
systemctl restart {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
# 停止相关服务
systemctl stop {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
随后使用nvidia-smi
以及mdevctl types
查看
搭建fastapi-dls授权服务
你可以在内网或者外网部署好Docker环境,然后搭建fastapi-dls授权服务,我这里提供一个pve lxc的Docker容器,部署到内网进行授权。
# 进入pve备份文件夹
cd /var/lib/vz/dump/
# 使用wget命令下载lxc docker 容器备份包
wget https://yun.yangwenqing.com/ESXI_PVE/PVE/Docker/vzdump_lxc_docker_root_123123.tar.zst
# 或者使用aria2c命令多线程下载lxc docker 容器备份包
aria2c -s 4 -x 4 -j 10 'https://yun.yangwenqing.com/ESXI_PVE/PVE/Docker/vzdump_lxc_docker_root_123123.tar.zst'
# 重命名为vzdump-lxc-100-2023_11_14-15_docker.tar.zst
mv vzdump_lxc_docker_root_123123.tar.zst vzdump-lxc-100-2023_11_14-15_docker.tar.zst
LXC容器信息:
- 默认IP地址:192.168.3.74
- 账号:root
- 密码:123123
1)将下载下来的LXC容器进行还原
2)并将原来的IP改为自己内网的IP,我这里用的就是3网段就不改了。
3)登录LXC容器(账号:root
密码:123123
)并创建授权服务:
# 删除旧的容器
docker rm af06b7705582
# 创建授权服务,注意下边的IP(192.168.3.74)改为刚刚自己修改好的
docker run --restart always -d -e DLS_URL=192.168.3.74 -e DLS_PORT=443 -p 443:443 makedie/fastapi-dls
创建虚拟机(Win10为例)
创建win10虚拟机(21H2)
名称:自定义
光驱挂载:Win安装ISO镜像
系统中显卡:默认
机型:q35
BIOS:OVMF
EFI分区:UEFI(OVMF)需要
磁盘:SCSI 大小60G(按需设置,或硬盘直通)
CPU:host 核心数量4(按需设置)
内存:4G及以上
网络:virtIO(半虚拟化或网卡直通)网卡
建立好虚拟机后
添加CD/DVD设备1个,挂载virtIO驱动ISO镜像
添加PCI设备:nvidia显卡(勾选ROM-Bar和PCIE在Mdev类型中选择vgpu设备)
其中 GRID P40-1Q 是 mdev 的名字,P40--显卡名,1--1G 显存,Q 代表 vWS
关于最后一位字母,如下
A = Virtual Applications (vApps)
B = Virtual Desktops (vPC)
C = AI/Machine Learning/Training (vCS or vWS)
Q = Virtual Workstations (vWS)(性能最佳)
在配置vgpu的时候,选择正确的型号型号即可。
资源下载
# Windows 10 Enterprise LTSC 2021 (x64) - DVD (Chinese-Simplified).ISO
https://yun.yangwenqing.com/Windows/MSDN/Windows_Desktop/Windows10/Windows%2010%20Enterprise%20LTSC%202021%20(x64)%20-%20DVD%20(Chinese-Simplified).ISO
# virtIO驱动
https://yun.yangwenqing.com/ESXI_PVE/PVE/virtio-win-0.1.240.iso
# NVIDIA Guest驱动 528.24
https://yun.yangwenqing.com/ESXI_PVE/vGPU/NVIDIA/15.1/Guest_Drivers/528.24_grid_win10_win11_server2019_server2022_dch_64bit_international.exe
安装NVIDIA Guest驱动
创建好系统之后,在系统中开启远程功能。如远程桌面,todesk,vnc,向日葵,parsec等然后安装 NVIDIA Guest驱动
启用授权
1)在浏览器访问fastapi-dls授权服务:https://192.168.3.74/-/client-token
会自动下载好授权文件
2)下载后放入C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\
这个目录下
3) 重启NVIDIA Display Container Ls服务,即可获得授权
也可以在cmd窗口使用nvidia-smi -q
命令查看授权情况
4)使用Todesk远程工具连接上虚拟机跑个鲁大师测试一下,显卡是否正常工作
想解除60帧?
编辑
nano /etc/vgpu_unlock/profile_override.toml
文件,加入以下信息重启pve生效。[profile.nvidia-46]
num_displays = 1
display_width = 1920
display_height = 1080
max_pixels = 2073600
cuda_enabled = 1
frl_enabled = 0
参数说明:
[profile.nvidia-46]nvidia-46 为vgpu型号的参数。如选的不是46则改成自己选的那个型号。
num_displays 最大显示器数量
display_width = 1920
display_height = 1080
max_pixels = 2073600 这3个是虚拟显示器的分辨率,max_pixels是长宽的乘积
cuda_enabled = 1是否开启cuda
frl_enabled = 0 是否限制帧数,0为不限制
5)在PVE后台查看是否调用成功
创建虚拟机(Ubuntu23.04为例)
创建Ubuntu虚拟机(2304)
名称:自定义
光驱挂载:Ubuntu安装ISO镜像
系统中显卡:默认
机型:q35
BIOS:默认 (SeaBIOS)
磁盘:SCSI 大小60G(按需设置,或硬盘直通)
CPU:host 核心数量4(按需设置)
内存:4G及以上
网络:virtIO(半虚拟化或网卡直通)网卡
添加PCI设备:nvidia显卡(勾选ROM-Bar和PCIE在Mdev类型中选择vgpu设备)
资源下载
# ubuntu-23.04-desktop-amd64.iso
https://yun.yangwenqing.com/Linux/Ubuntu/ubuntu-23.04-desktop-amd64.iso
# NVIDIA Guest驱动 535.129
https://yun.yangwenqing.com/ESXI_PVE/vGPU/NVIDIA/16.2/Guest_Drivers/NVIDIA-Linux-x86_64-535.129.03-grid.run
1) 安装显卡驱动前先将需要的依赖文件打上
# 安装ssh工具,使用第三方SSH工具(putty,终端)连接到Ubuntu,PVE里面控制台无法复制命令
sudo apt-get install openssh-server
# 开机自启ssh
sudo systemctl enable ssh.service
# 重启ssh服务
sudo systemctl restart ssh.service
# 需要所需依赖
sudo apt install build-essential linux-headers-generic libglvnd-dev pkg-config -y
# 安装dkms
sudo apt install dkms -y
# 安装32位兼容库
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 -y
2)屏蔽自带的显卡驱动
# 创建blacklist-nouveau.conf文件
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
# 在blacklist-nouveau.conf文件添加如下内容:
blacklist nouveau
options nouveau modeset=0
# 重载内核initramfs
sudo update-initramfs -u
# 重启Ubuntu
sudo reboot
# 重启完成后检查nouveau是否已禁用,没有任何输出说明已经禁用
lsmod | grep nouveau
# 切换到文本命令行控制台
sudo chvt 3
# 关闭图形界面服务
sudo service gdm stop
3)安装显卡驱动
# 使用aria2c命令多线程下载 NVIDIA Guest驱动 535.129
aria2c -s 4 -x 4 -j 10 'https://yun.yangwenqing.com/ESXI_PVE/vGPU/NVIDIA/16.2/Guest_Drivers/NVIDIA-Linux-x86_64-535.129.03-grid.run'
# 给可执行权限
chmod +x NVIDIA-Linux-x86_64-535.129.03-grid.run
# 安装驱动(默认回车直至安装完成即可)
./NVIDIA-Linux-x86_64-535.129.03-grid.run
# 安装完成重启Ubuntu
reboot
4)重启完成后,使用nvidia-smi
验证
root@Ubuntu23:~# nvidia-smi
Tue Feb 20 16:22:12 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 GRID P40-1Q On | 00000000:01:00.0 Off | N/A |
| N/A N/A P8 N/A / N/A | 7MiB / 1024MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 801 G /usr/lib/xorg/Xorg 6MiB |
+---------------------------------------------------------------------------------------+
启用授权
# 获取授权文件
wget --no-check-certificate -O /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok https://192.168.3.74/-/client-token
# 或者
curl --insecure -L -X GET https://192.168.3.74/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
验证授权
# 重启服务
sudo service nvidia-gridd restart
# 验证授权获取情况
nvidia-smi -q | grep License
# 看到有Licensed字样,就授权好了。
root@Ubuntu23:~# nvidia-smi -q | grep License
vGPU Software Licensed Product
License Status : Licensed (Expiry: 2024-5-20 9:40:22 GMT)
虚拟机去虚拟化
# 查看你当前安装的qemu版本
dpkg -l|grep kvm
# 我这里是8.1.5-3
ii pve-qemu-kvm 8.1.5-3 amd64 Full virtualization on x86 hardware
安装去虚拟化qemu版本
# 如果你的版本是8.1.5-3,执行一下指令
wget https://yun.yangwenqing.com/ESXI_PVE/PVE/pve%E5%8F%8D%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%A3%80%E6%B5%8B%E7%8E%A9%E6%B8%B8%E6%88%8F%E5%8C%85/pve-qemu-kvm_8.1.5-3_amd64_anti_detection20240302.deb
dpkg -i pve-qemu-kvm_8.1.5-3_amd64_anti_detection20240302.deb
# 如果你的版本是7.2.0-8,执行一下指令
wget https://yun.yangwenqing.com/ESXI_PVE/PVE/pve%E5%8F%8D%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%A3%80%E6%B5%8B%E7%8E%A9%E6%B8%B8%E6%88%8F%E5%8C%85/pve-qemu-kvm_7.2.0-8_amd64_anti_detection20230901.deb
dpkg -i pve-qemu-kvm_7.2.0-8_amd64_anti_detection20230901.deb
Intel核显直通,加入以下参数
args: -cpu host,hypervisor=off,vmware-cpuid-freq=false,enforce=false,host-phys-bits=true, -smbios type=0,version=UX305UA.201 -smbios type=1,manufacturer=ASUS,product=UX305UA,version=2021.1 -smbios type=2,manufacturer=Intel,version=2021.5,product='Intel i7-12700' -smbios type=3,manufacturer=XBZJ -smbios type=17,manufacturer=KINGSTON,loc_pfx=DDR4,speed=3200,serial=114514,part=FF63 -smbios type=4,manufacturer=Intel,max-speed=3200,current-speed=3200
AMD核显直通,Intel、AMD、NVIDIA三家独显直通,加入以下参数
args: -cpu host,hypervisor=off,vmware-cpuid-freq=false,enforce=false,host-phys-bits=true, -smbios type=0,version=UX305UA.201 -smbios type=1,manufacturer=ASUS,product=UX305UA,version=2021.1 -smbios type=2,manufacturer=Intel,version=2021.5,product='Intel i7-12700' -smbios type=3,manufacturer=XBZJ -smbios type=17,manufacturer=KINGSTON,loc_pfx=DDR4,speed=3200,serial=114514,part=FF63 -smbios type=4,manufacturer=Intel,max-speed=3200,current-speed=3200
相关文章参考
佛西博客-在Proxmox VE 7.1 中开启vGPU_unlock,实现显卡虚拟化
佛西博客-在Proxmox VE 7.4 中开启NVIDIA P106显卡虚拟化(vGPU)
版权属于: July's Bolg 所有,转载请注明出处
本文链接: https://yangwenqing.com/archives/1766/
友情提示: 如果文章部分链接出现404,请留言或者联系博主修复。
start failed:QEMU exit
错误。打不开