All-In-One玩vGPU显卡虚拟化,上手Tesla P4
首先我不推荐Tesla P4这张显卡,既无主动散热、也无视频输出接口、性价比又低(性价比连矿渣40HX都不如)。显卡算上散热花了400元,买这张卡是因为我个人喜欢Tesla P4(功耗低、外观小巧,是我眼里颜值最高的显卡),更重要的是给All-In-One主机折腾vGPU显卡虚拟化。

本文介绍的是PVE环境下的Tesla P4显卡虚拟化设置,由于Tesla P4是专业卡本身支持vGPU,非专业卡的N卡则需要vGPU Unlock才能虚拟化,不在本文介绍范围内:
1、准备工作:PVE设置
PVE开启iommu(实现PCIE直通):
vim /etc/default/grub
#修改如下设置
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#intel cpu 改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
#amd cpu改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
更新grub:
update-grub
加载vfio模块
echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_virqfd >> /etc/modules
更新内核参数
update-initramfs -k all -u
屏蔽开源显卡驱动,避免开机时显卡被系统加载
#AMD显卡
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
#NVIDIA显卡
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
#INTEL核显
echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf
更新内核并重启
update-initramfs -k all -u
准备工作完毕!
2、PVE安装显卡host驱动
将显卡装上后就可以安装驱动了。计算卡驱动官网下载需要注册账户比较麻烦,可以网上找别人打包好的驱动。vGPU驱动分host(服务端)、client(客户端)两种驱动。PVE上需要安装host驱动。首先安装显卡驱动依赖环境:
apt install build-essential dkms mdevctl pve-headers-$(uname -r)
通过ssh上传驱动到PVE并安装,如之前安装了显卡驱动需要先卸载:
#如果之前安装了显卡驱动需要先卸载
apt-get remove --purge nvidia-*
#进入驱动所在目录,开始安装驱动
chmod +x NVIDIA-Linux-x86_64-535.54.06-vgpu-kvm.run
./NVIDIA-Linux-x86_64-535.54.06-vgpu-kvm.run
#重启pve
reboot

这样PVE已经安装好了驱动,接下来给虚拟机安装驱动前,先搭建好vGPU的授权服务。
3.搭建授权服务
vGPU客户端需要授权才可以正常使用驱动。个人去买商业授权有点不划算,所以用民间的授权大法:通过docker搭建授权服务。
找一台Linux设备,安装好docker环境,记下设备的局域网IP地址,开始搭建docker,下面2种方式任选其一:
3.1 makedie/fastapi-dls 镜像
makedie/fastapi-dls 是基于collinwebdesigns/fastapi-dls原版镜像修改的方案,不需要自己搭建openssl,所以操作比较简单。
一条命令就可以搭建好容器,注意修改实际的局域网IP:
docker run -d -e DLS_URL=192.168.31.20 -e DLS_PORT=1020 -p 1020:443 makedie/fastapi-dls
3.2 collinwebdesigns/fastapi-dls 镜像(原版)
collinwebdesigns/fastapi-dls 是原版镜像需要自己搭建openssl证书,所以服务器上不仅要安装docker还要安装好openssl
apt install openssl
服务器上创建证书:
WORKING_DIR=/opt/docker/fastapi-dls/cert
mkdir -p $WORKING_DIR
cd $WORKING_DIR
# create instance private and public key for singing JWT's
openssl genrsa -out $WORKING_DIR/instance.private.pem 2048
openssl rsa -in $WORKING_DIR/instance.private.pem -outform PEM -pubout -out $WORKING_DIR/instance.public.pem
# create ssl certificate for integrated webserver (uvicorn) - because clients rely on ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout $WORKING_DIR/webserver.key -out $WORKING_DIR/webserver.crt
运行docker fastapi-dls服务:
docker run -e DLS_URL=192.168.31.128 -e DLS_PORT=1020 -p 1020:443 -v $WORKING_DIR:/app/cert collinwebdesigns/fastapi-dls:latest
访问 https://192.168.31.20:1020 查看授权服务是否正常运行:

4.虚拟机安装vGPU驱动及授权
首先在PVE上给虚拟机添加PCI设备,选择对应的显卡:

由于我要对显卡做划分,所以在MDev类型要选一下,我只打算划分2块,所以选的GRID P4-4Q(nvidia-65):

接下来在虚拟机上安装vGPU驱动及授权,将驱动发送到虚拟机上(根据不同系统可以采用smb共享或者ssh远程的方法操作)。就像正常在电脑上安装驱动即可。


安装好驱动后,获取vGPU授权:
Windows管理员权限运行 PowerShell 执行如下命令,注意修改认证服务器地址(同上面docker容器服务的地址):
# 下载授权文件
curl.exe --insecure -L -X GET https://192.168.31.20:1020/-/client-token -o "C:Program FilesNVIDIA CorporationvGPU LicensingClientConfigTokenclient_configuration_token_$($(Get-Date).tostring('dd-MM-yy-hh-mm-ss')).tok"
# 重启英伟达服务
Restart-Service NVDisplay.ContainerLocalSystem
# 查看授权状态
nvidia-smi.exe -q | Select-String License
Linux root 权限执行如下命令:
# 下载授权文件
curl --insecure -L -X GET https://192.168.31.20:1020/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
# 重启英伟达服务
service nvidia-gridd restart
# 查看授权状态
nvidia-smi -q | grep License
在Windows上安装好驱动后,在任务管理器里已经可以正常识别到显卡了,由于我把显卡做了划分,所以这里显示的显存为4G。

为了更好调用显卡可以通过moonlight+sunshine对虚拟机进行串流。

hanbrake可以正常调用到NVENC进行编码、可以正常安装CUDA、除了没有物理视频输出功能和一般显卡相同。


不过这张卡虽然功耗低,但是必须改造散热。由于还没有对显卡做散热改造,所以跑分和测试性能没意义,放在下次介绍吧!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

六吉哥
校验提示文案
值友6539164670
校验提示文案
Xeon-E3
校验提示文案
红烧土豆
校验提示文案
不一样的牛粪
校验提示文案
值友看客
校验提示文案
企鹅巴耶夫
校验提示文案
值友8974565270
校验提示文案
哪有那么易
校验提示文案
阿咸老哥
校验提示文案
企鹅巴耶夫
校验提示文案
男人的梦想
校验提示文案
绝版-sniper
校验提示文案
TimZhong
校验提示文案
笑饮农药
校验提示文案
李败五
代码应该是这个,不知道有没被吞
校验提示文案
值友6238923182
校验提示文案
等我无尽可以打
校验提示文案
大萝莉和小淘气
校验提示文案
值友9903411783
校验提示文案
值友9903411783
校验提示文案
大萝莉和小淘气
校验提示文案
等我无尽可以打
校验提示文案
值友6238923182
校验提示文案
李败五
代码应该是这个,不知道有没被吞
校验提示文案
笑饮农药
校验提示文案
TimZhong
校验提示文案
绝版-sniper
校验提示文案
男人的梦想
校验提示文案
企鹅巴耶夫
校验提示文案
企鹅巴耶夫
校验提示文案
值友看客
校验提示文案
阿咸老哥
校验提示文案
哪有那么易
校验提示文案
红烧土豆
校验提示文案
Xeon-E3
校验提示文案
值友6539164670
校验提示文案
值友8974565270
校验提示文案
不一样的牛粪
校验提示文案
六吉哥
校验提示文案