文档目录

概述

ZStack Cloud支持vGPU功能,通过GPU虚拟化技术,将物理GPU切割成更细粒度的vGPU,形成vGPU资源池。用户可使用vGPU规格快速创建轻量的vGPU云主机,实现更灵活弹性的资源部署、提高资源利用率、以及节约成本。该功能适用于云游戏、VDI、VR/AR、AI推理以及机器学习教学等轻量级GPU计算场景。

ZStack Cloud支持对以下型号显卡进行虚拟化切割:
厂商 型号
NVIDIA Nvidia RTX 6000Ada、Nvidia RTX A6000
Quadro RTX 8000、Quadro RTX 6000
H100、H200、H800、H20
Note:ZStack CloudH84R ISO支持。
Nvidia L40、Nvidia L20、Nvidia L4
Nvidia A40、Nvidia A16、Nvidia A10、Nvidia T4
Tesla V100、Tesla P4/6/40/100、M6/10/60
AMD FirePro S7150、FirePro S7150X2
瀚博 SV100、SG100

应用场景

云游戏

随着宽带网络的发展,以及移动终端设备的普及,将游戏计算置于云端,客户端仅仅负责显示与控制的游戏模式也悄然开始流行。云端服务器上渲染3D游戏,即时为每一帧进行编码,将结果以流的形式传输至任何接驳有线或无线网络的设备。

这种云游戏模式,可以借助GPU以及服务器CPU能力,通过ZStack Cloud的vGPU虚拟化功能,将物理GPU切割成多个满足需求的vGPU设备透传给云主机使用,为游戏创造隔离性更佳的虚拟环境,保证计算与渲染的流畅度的同时提高资源利用率,为用户提供更好的游戏体验。

图 1所示:
图 1. 云游戏


VDI (桌面云)

GPU一直是VDI (桌面云) 中非常重要的设备,它不仅能够改善桌面视觉体验,同时在特殊的应用程序中承担主力计算角色,从而完全代替传统PC图站,让用户在更为安全的环境中进行3D设计。

通过ZStack Cloud的vGPU虚拟化功能,将物理GPU切割成多个满足需求的vGPU设备透传给云主机使用,以及配合RDP、PCoIP等协议,提高资源利用率的同时充分利用显卡能力,比如3D设计、游戏等流畅运行,提供更逼近本地物理机的用户体验。

图 2所示:
图 2. VDI(桌面云)


注意事项

使用vGPU虚拟化功能,需要注意以下情况:
  • 一台云主机仅支持同时加载一个vGPU,暂不支持将物理GPU和vGPU同时加载到同一台云主机使用。
  • 已透传的物理GPU,不支持虚拟化切割成vGPU。
  • 执行加载、卸载vGPU操作前,请确保云主机状态为已停止。
  • 虚拟化切割AMD显卡,需确保物理机内核版本为3.10。
  • 为正常使用GPU虚拟化切割功能并获取vGPU实时负载监控,需为物理机、云主机安装相关驱动,建议驱动版本如下:
    GPU 物理机推荐驱动版本 云主机推荐驱动版本
    NVIDIA
    • GPU驱动:NVIDIA-Linux-x86_64-510.47.03-grid.run
    • vGPU驱动:NVIDIA-Linux-x86_64-510.47.03-vgpu-kvm.run
    使用NVIDIA官方推荐最新版本:详见NVIDIA官方文档
    AMD rocm-smi 6.1.2及以上版本 rocm-smi 6.1.2及以上版本
    Note: 如云主机使用RHEL7系列操作系统,需确保云主机内核为4.18.0或以上版本。
    华为

    Ascend-hdk-310p-npu-driver_24.1.rc1_linux-aarch64.run

    Ascend-hdk-310p-npu-driver_24.1.rc1_linux-aarch64.run

准备工作

NVIDIA GPU虚拟化

使用NVIDIA vGPU功能需要提前准备以下工作:
  • 确保物理GPU型号支持虚拟化切割。
  • 确保物理机BIOS中开启Intel VT-d / AMD IOMMU功能,且物理机内核已开启IOMMU支持。
  • 确保物理机BIOS中开启SR-IOV和Memory Mapped I/O above 4GB功能。
  • 确保已获取物理GPU驱动、vGPU驱动和云主机vGPU驱动。相关驱动以及安装方法请联系设备提供厂商获取帮助,驱动推荐版本可参考注意事项
  • NVIDIA A系列vGPU需额外确保物理机操作系统Kernel版本升级至4.18,GCC版本升级至8.3.1。
  • 若使用NVIDIA vGPU,请参考NVIDIA官方文档提前购买License,搭建License Server并导入License。
  • 按需设置全局设置:进入设置 > 平台设置 > 全局设置界面,按需调整全局设置,以下几个全局设置与物理GPU透传相关:
    • PCI设备热插拔开关:用于设置是否允许云主机热插拔GPU设备,默认为true。若热插拔时出现硬件兼容性错误,或不支持该硬件设备时,建议关闭此功能(设置为false)。
    • 租户/子账户GPU设备默认配额:用于设置账户/项目使用GPU设备(包括:物理GPU和vGPU)数量配额,默认为20。

AMD GPU虚拟化

使用AMD vGPU功能需要提前准备以下工作:
  • 确保物理GPU型号支持虚拟化切割。
  • 确保物理机BIOS中开启Intel VT-d / AMD IOMMU功能,且物理机内核已开启IOMMU支持。
  • 确保已获取物理机GPU驱动、云主机vGPU驱动。相关驱动以及安装方法请联系设备提供厂商获取帮助,驱动推荐版本可参考注意事项
  • 确保高级设置云主机Hyper-V开关状态为false,否则云主机无法正常加载AMD vGPU驱动。可通过以下几种方式按需关闭该高级设置:
    • 进入云主机详情页的高级设置页面,针对单个云主机关闭云主机Hyper-V开关
    • 进入集群详情页的高级设置页面,针对集群关闭云主机Hyper-V开关
    • 进入设置 > 平台设置 > 全局设置 > 基本设置页面,针对整个云平台关闭云主机Hyper-V开关
  • 按需设置全局设置:进入设置 > 平台设置 > 全局设置界面,按需调整全局设置,以下几个全局设置与物理GPU透传相关:
    • PCI设备热插拔开关:用于设置是否允许云主机热插拔GPU设备,默认为true。若热插拔时出现硬件兼容性错误,或不支持该硬件设备时,建议关闭此功能 (设置为false)。
    • GPU设备配额:用于设置账户/项目使用GPU设备 (包括:物理GPU和vGPU) 数量配额,默认为20。

典型使用流程

背景信息

vGPU虚拟化的典型使用流程如下:
  1. 物理机安装GPU驱动、vGPU驱动。
  2. 物理机启用IOMMU设置。
  3. 查看物理GPU/物理GPU规格。
  4. 虚拟化切割。
  5. 查看vGPU/vGPU规格。
  6. 云主机加载vGPU。
  7. 云主机安装vGPU驱动。

使用vGPU虚拟化功能前,请务必确保所有准备工作已完成且准确无误。以下详细介绍vGPU虚拟化功能的操作步骤:

操作步骤

  1. 物理机安装GPU驱动、vGPU驱动
    物理机添加GPU设备后,需继续安装对应的驱动程序才能正常使用。
    • NVIDIA:需手动安装GPU驱动和vGPU驱动,请参考GPU驱动推荐表,并点击这里下载合适的官方驱动。
    • AMD:需手动安装GPU驱动,vGPU驱动由ZStack Cloud自动集成,请参考GPU驱动推荐表,并点击这里下载合适的官方驱动。
    • 华为:需手动安装GPU驱动推荐表中指定的驱动,GPU监控和虚拟化切割均依赖该驱动,请联系华为官方获取驱动。
    不同GPU设备的驱动以及安装方法可能不同,详情请联系GPU设备提供厂商获取帮助。本教程以为物理机安装NVIDIA GPU驱动为例,基本操作流程如下:
    1. 获取GPU驱动安装包;
    2. 安装对应kernel版本的kernel-devel、gcc、make等必须包;
    3. 执行rpm -i ${GPUDRIVERPACKETNAME}命令,为物理机安装驱动;
    4. 重启物理机,通过nvidia-smi命令查看显卡信息,若物理机能够成功识别GPU设备,表示物理机安装GPU驱动成功。
  2. 物理机启用IOMMU设置
    确保物理机BIOS已开启Intel VT-d / AMD IOMMU配置的前提下,在ZStack Cloud云平台开启物理机IOMMU设置。
    • 新添加物理机:在资源中心 > 硬件设施 > 计算设施 > 物理机界面添加物理机过程,选择扫描物理机IOMMU设置配置,添加物理机的同时开启IOMMU设置。
      图 3所示:
      图 3. 新添加物理机并启用IOMMU设置


    • 已添加物理机:在物理机详情页,启用IOMMU启用状态配置,针对已添加物理机开启IOMMU设置,重启物理机生效。
      图 4所示:
      图 4. 已添加物理机启用IOMMU设置


    Note: 物理机开启IOMMU设置后,还需在物理机详情页确保IOMMU就绪状态为可用,否则也无法正常使用vGPU功能。若IOMMU启用状态为启用,但IOMMU就绪状态不可用,可能存在以下原因:
    • 开启IOMMU设置但未重启物理机,手动重启物理机即可。
    • 物理机配置错误,请进入物理机BIOS并开启Intel VT-d / AMD IOMMU配置。
  3. 查看物理GPU/物理GPU规格
    IOMMU启用状态为启用,IOMMU就绪状态为就绪时,ZStack Cloud将能够识别到物理机上的物理GPU以及物理GPU规格。
    • 查看物理GPU:在物理机详情页,点击关联资源 > 外接设备 > 物理GPU设备,即可查看该物理机上识别到的物理GPU设备。
      图 5所示:
      图 5. 查看物理GPU


    • 查看物理GPU规格:

      ZStack Cloud主菜单,点击资源中心 > 云资源池 > 计算配置 > GPU规格按钮,进入GPU规格界面,查看扫描到的物理GPU规格。

      图 6所示:
      图 6. 物理GPU规格


  4. 虚拟化切割
    虚拟化切割即表示将未用于透传的物理GPU经过虚拟化,切割成若干固定规格的vGPU。不同厂商的物理GPU虚拟化切割方法略有不同,ZStack Cloud目前支持虚拟化切割NVIDIA物理GPU和AMD物理GPU。
    • 虚拟化切割NVIDIA物理GPU:支持按照所选切割规格,单独虚拟化切割NVIDIA物理GPU。

      在物理机详情页,点击关联资源 > 外接设备 > 物理GPU设备,选择未加载云主机、可虚拟化的物理GPU设备,点击操作 > 虚拟化切割,按所选规格虚拟化切割NVIDIA物理GPU。

      图 7所示:
      图 7. 虚拟化切割NVIDIA物理GPU


      切割规格显示此物理GPU可被切割的所有规格列表。例如:GRID M60-2A(4ins-2048 MiB-1280*1024)表示将一个核心的物理GPU虚拟化切割成4个帧数为60FPS、显存为2048MB、分辨率为1280*1024的vGPU。
      Note: 若需要将vGPU还原成物理GPU,请点击操作 > 虚拟化还原按钮执行操作。虚拟化还原NVIDIA vGPU需确保此物理GPU相关的vGPU已经全部从云主机卸载。
    • 虚拟化切割AMD物理GPU:支持按照所选切割数量,同时虚拟化切割当前AMD显卡对应的所有物理GPU,执行虚拟化切割的操作路径和NVIDIA物理GPU相同。
      图 8所示:
      图 8. 虚拟化切割AMD物理GPU


      Note: 若需要将vGPU还原成物理GPU,请点击操作 > 虚拟化还原按钮执行操作。虚拟化还原AMD vGPU需确保当前AMD显卡对应的所有AMD vGPU全部已经从云主机卸载。
  5. 查看vGPU/vGPU规格
    虚拟化切割完成后,形成vGPU规格和vGPU,可在对应页面查看。
    • 查看vGPU:

      在物理机详情页,点击关联资源 > 外接设备 > vGPU设备,即可查看该物理机上的vGPU设备。

    • 查看vGPU规格:

      ZStack Cloud主菜单,点击资源中心 > 云资源池 > 计算配置 > GPU规格按钮,进入GPU规格界面的vGPU子页面,查看虚拟化切割后的vGPU规格。

      图 9所示:
      图 9. 查看vGPU规格


  6. 云主机加载vGPU
    ZStack Cloud云平台支持以下几种方法为云主机加载vGPU:
    • 方法一:创建云主机并加载vGPU
      资源中心 > 云资源池 > 虚拟资源 > 云主机界面创建云主机,在资源配置步骤,设置GPU项。支持按GPU规格加载指定GPU设备加载两种vGPU加载策略:
      • 按GPU规格加载:指定vGPU规格,系统将根据指定的规格自动分配vGPU设备。选择该策略,可勾选关机后自动卸载GPU设备,勾选后,云主机关机将自动卸载vGPU设备,下次启动时系统将根据vGPU规格重新分配。如不勾选,云主机关机后将继续保有此vGPU设备,下次启动后将继续使用原来的vGPU设备。
        Note: 如云主机开启高可用,不勾选关机后自动卸载GPU设备可能导致云主机意外关机后无法高可用启动。
        图 10所示:
        图 10. 加载规格


      • 指定GPU设备加载:直接指定一个vGPU设备加载到云主机。
        图 11所示:
        图 11. 加载设备


      配置完成后,点击确定按钮,即可创建一台加载vGPU的云主机。
    • 方法二:单个已有云主机加载vGPU

      ZStack Cloud主菜单,点击云资源池 > 云主机,进入云主机界面,点击云主机名称,进入云主机界面的配置信息子页面的vGPU设备栏,点击加载按钮手动加载vGPU。

      图 12所示:
      图 12. 加载vGPU


      • 一台云主机支持同时加载一个vGPU,暂不支持将物理GPU和vGPU同时加载到同一台云主机使用。
      • 若需要释放GPU设备,选中GPU设备,点击操作 > 卸载按钮,释放GPU设备。
      • 执行加载、卸载vGPU操作前,请确保云主机状态为已停止
    • 方法三:批量为已有云主机设置vGPU

      云主机管理界面选择一台或多台云主机,点击批量操作 > 系统配置 > 设置GPU策略按钮,批量为云主机加载vGPU设备或vGPU规格。

      图 13所示:
      图 13. 批量加载GPU规格


  7. 云主机安装vGPU驱动
    云主机加载vGPU后,需要安装对应的驱动程序才能正常使用。不同vGPU的驱动以及安装方法可能不同,详情请联系GPU设备提供厂商获取帮助。本章节以Linux云主机安装NVIDIA vGPU驱动为例介绍参考操作流程:
    1. 获取驱动安装相关文件:

      获取GPU设备匹配的显卡驱动和CUDA toolkit文件。

    2. 禁用nouveau驱动:
      NVIDIA显卡的官方驱动和系统自带的nouveau驱动存在冲突。执行lsmod | grep nouveau命令,若有输出内容表示存在nouveau驱动,可参考以下方法禁用nouveau驱动;若不存在nouveau驱动,跳过此步骤即可。
      # touch  /etc/modprobe.d/nvidia-installer-disable-nouveau.conf  #创建文件,将以下两行内容保存至文件中
      
      blacklist nouveau
      options nouveau modeset=0
    3. 安装gcc、kernel-devel、kernel-headers:
      依次执行以下命令,安装gcc、与内核版本一致的kernel-devel和kernel-headers。建议使用相同版本的ISO配置本地源安装。
      # yum install gcc kernel-devel-$(uname -r)  kernel-headers-$(uname -r)     #重构 initramfs 镜像
      # cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
      # dracut /boot/initramfs-$(uname -r).img $(uname -r) --force       #只使用文本模式重启云主机
      # systemctl set-default multi-user.target
      # init 3
      # reboot
      # lsmod | grep nouveau    #云主机重新启动后,检查nouveau驱动应该没有被使用
    4. 安装NVIDIA 驱动:
      将下载的驱动包拷贝至云主机系统内,依次执行以下命令运行驱动文件:
      # chmod +x NVIDIA-Linux-x86_64-346.47.run    #配置可执行权限
      # ./NVIDIA-Linux-x86_64-346.47.run      #运行驱动文件
      命令执行后将开始解压驱动包并进入安装步骤,安装过程可能出现一些警告,依次确认即可,不影响驱动安装。若出现error报错,请参考表 1检查环境。
      报错 解决方案

      ERROR: Unable to find the kernel source tree for the currently running kernel. Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.

      需要确保kernel、kernel-headers、kernel-devel是否均已安装,并且版本号完全一致

      ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver, and must be disabled before proceeding. Please consult the ow to correctly disable the Nouveau kernel driver.

      需要禁用nouveau驱动

      ERROR: Failed to find dkms on the system!

      ERROR: Failed to install the kernel module through DKMS. No kernel module was installed; please try installing again without DKMS, or check the DKMS logs for more information.

      需要安装DKMS,它可以帮我们维护内核外的驱动程序,在内核版本变动之后可以自动重新生成新的模块

      ERROR: Unable to load the kernel module 'nvidia.ko'. This happens most frequently when this kernel module was built against the wrong or improperly configured kernel sources, with a version of gcc that differs from the one used to build the target kernel, or if a driver such as rivafb, nvidiafb, or nouveau is present and prevents the NVIDIA kernel module from obtaining ownership of the NVIDIA graphics device(s), or no NVIDIA GPU installed in this system is supported by this NVIDIA Linux graphics driver release.

      执行命令./NVIDIA-Linux-x86_64-384.98.run --kernel-source-path=/usr/src/kernels/3.10.0-XXX.x86_64/ -k $(uname -r)即可
    5. 检查驱动安装情况:
      分别执行以下两条命令,检查驱动安装情况。若返回结果能够显示显卡的型号信息,说明驱动已经安装成功。
      # lspci |grep NVIDIA
      # nvidia-smi
    6. 安装CUDA toolkit:
      将下载的驱动包拷贝至云主机系统内,依次执行以下命令执行驱动文件:
      # chmod +x cuda_8.0.61_375.26_linux.run      #配置可执行权限
      # ./cuda_8.0.61_375.26_linux.run     #运行驱动文件

      安装过程需要配置一些参数,请参考下图进行配置。

      图 14所示:
      图 14. 安装CUDA toolkit


    7. 配置环境变量:
      执行vim /root/.bashrc命令,将以下内容保存至此文件,完成环境变量配置:
      #gpu driver
      export CUDA_HOME=/usr/local/cuda-8.0
      export PATH=/usr/local/cuda-8.0/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
      export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib:${LD_LIBRARY_PATH}"
      环境变量添加完成后立即生效,可执行以下命令进行验证测试:
      # source ~/.bashrc
      # cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
      # make
      # ./deviceQuery
vGPU虚拟化使用教程 | 5.5.30 | ZStack Cloud · ZCF | ZStack 资源中心