PVE8开启vgpu显卡虚拟化(基于Tesla P4)

发布于 2024年01月24日

Tesla系列显卡真是垃圾佬的福音,很久以上上万的卡,现在几百块就能收到,不仅可以炼丹,还可以玩游戏,甚至可以给PVE用作vgpu,来实现云桌面,云游戏。博主先后买过P40和P4,面对250W功耗的24G显存的P40,显然它更适合炼丹,P4 TDP 75W,1060的性能表现,它的最佳用途其实不是个人桌面的游戏显卡,而是虚拟化云主机使用,而搭配上一台低功耗主机,做all in one 是非常不错的选择,任何一个虚拟机想要硬解或者游戏,都可以分配一个vgpu来使用,8g显存的P4, 如果分配2G显存,可以供4个虚拟机使用,分配1G可以供8个虚拟机使用,一般来说普通游戏2G已足够。

一、PVE8的安装

二、PVE配置开启硬件直通

  • 前提条件:主板BIOS开启VT-D


  1. 登录PVE后台,进入shell管理终端

  2. 开启iommu

    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"
  3. 更新grub

    update-grub
  4. 加载vfio模块

    echo vfio >> /etc/modules
    echo vfio_iommu_type1 >> /etc/modules
    echo vfio_pci >> /etc/modules
    echo vfio_virqfd >> /etc/modules
  5. 更新内核参数

    update-initramfs -k all -u
  6. 屏蔽系统中的开源显卡驱动避免开启显卡被系统加载

    #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 

  1. 更新内核并重启

    update-initramfs -k all -u 

三、安装nvidia显卡宿主机vgpu驱动

  • 注意,这个驱动不是常规的驱动,需要去nvidia官网注册企业账号才能下载到,PVE8的内核为6.2,可以安装最新的535驱动,如果不想注册企业号,可以去网上搜索下载。

    1. 将PVE需要安装的驱动传如PVE中,方法很多,可以通过scp或者ssh工具软件或者修改后缀名为iso,直接用pve后台传进去。
      2.安装显卡驱动需要用到的依赖

      apt install build-essential dkms mdevctl pve-headers-$(uname -r)
    2. 安装驱动并重启

      #进入驱动所在目录
      #r如果安装了显卡驱动,先卸载
      ./NVIDIA-Linux-x86_64-535.54.06-vgpu-kvm.run --uninstall
      sudo 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
    3. 验证是否安装成功,若正常显示下图所示,证明安装成功

      nvidia-smi


四、创建虚拟机,这里以WIN11为例,在虚拟机中安装vgpu驱动

  1. 创建虚拟机过程略,在创建完成后添加PCI设备,如下图

  2. 打开win11虚拟机,将上面提到的虚拟机vgpu驱动传入win11,然后双击安装,过程略

  3. 装好以后重启设备管理器就识别了


五、搭建nvidia vgpu授权服务

  1. 服务需要用到证书,所以搭建之前要自己创建证书,可以使用任何一台安装完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
  2. 运行docker fastapi-dls服务

    docker run -e DLS_URL=替换成你的ip地址 -e DLS_PORT=443 -p 443:443 -v $WORKING_DIR:/app/cert collinwebdesigns/fastapi-dls:latest
  3. 访问你服务得https://ip地址,查看服务是否运行
    1.win11下载证书,用浏览器访问
    https://ip地址/-/client-token ,下载后放入C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\这个目录

  4. 重启win11

  5. 击右下角的nvidia图标,看到如下图所示就证明授权成功


  • 如果是linux系统,执行下面命令即可

    curl --insecure -L -X GET https://<dls-hostname-or-ip>/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
    # or
    wget --no-check-certificate -O /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok https://<dls-hostname-or-ip>/-/client-token
  • 其他细节其实可以查看https://ip/-/readme



评论