文档目录

概述

ZStack Cloud支持物理GPU透传功能,物理GPU可携带其上全部外设 (包括:GPU显卡、GPU声卡、以及其它GPU上的小设备) 以为单位整体透传给云主机使用,让云主机享有物理机强劲的GPU并行计算能力。该功能适用于3D渲染、高清转解码、以及具备高密集运算特点的高性能计算 (HPC) 场景。

ZStack Cloud支持以下型号的物理GPU透传:
厂商 型号
NVIDIA
  • Nvidia RTX 6000Ada、Nvidia RTX A6000
  • GeForce RTX 5090、Geforce RTX 4090、Nvidia RTX 3090
  • Quadro RTX 8000、Quadro RTX 6000
  • M4000、P2000
  • GTX 1650/1660、GTX 1060ti
  • H100、H800、H200、H20
  • Nvidia L40、Nvidia L20、Nvidia L4
  • Nvidia A100、A30
  • Nvidia A40、Nvidia A16、Nvidia A10、Nvidia T4
  • Tesla V100、Tesla P4/6/40/100、M6/10/60
  • K6000
  • 更多型号请参考NVIDIA官方文档
AMD
  • Radeon v620、Radeon RX5700
  • FirePro S7150、FirePro S7150X2
HYGON DCU Z100/Z100L、DCU K100 AI
华为
  • Atlas 300i Pro
  • 910B/910B4
Note: 仅物理机为ARM架构时,支持该型号GPU透传
天数智芯 智铠100、天垓
瀚博 SV100、SG100
Note: SG100不建议直接透传,建议虚拟化切割后再加载到云主机使用
燧原 S60
Note: 如云主机加载超过5个该型号GPU设备,请进入操作系统,在/etc/udev/udev.conf文件中添加event_timeout=300,延长udev超时时间,确保所有GPU设备可被正常识别。
其他 沐曦N100、摩尔线程、寒武纪、云燧

应用场景

3D渲染

三维计算机图形的预渲染 (Pre-rendering、Offline rendering) 或实时渲染 (Real-time rendering、Online rendering) 速度都很缓慢。预渲染常用于电影制作,要求很高的计算强度,需要大量的服务器提供运算能力;实时渲染常用于三维视频游戏,通常依靠图形处理器 (GPU) 完成这个过程。

现在由于GPU的高速发展,已经有相当多的3D渲染是在GPU服务器集群中完成。结合ZStack Cloud的GPU透传功能,在性能损失极低的情况下 (5%以内) 同时可获得集中高效的集群管理功能,再配合智能监控软件以及ZStack Cloud自带的计费功能,可以形成一整套更便捷高效的渲染农场方案。

图 1所示:
图 1. 3D渲染


人工智能

GPU的计算能力可以应用于深度学习。自Google推出神经网络工具TensorFlow后,许多科研机构以及企业应用都日渐明显偏向使用GPU作为基础设施。

以规格较高的NVIDIA P100显卡为例,通过ZStack Cloud的GPU透传功能,将其透传至云主机后,性能测试结果显示,几乎与标称完全一致,能够充分满足大规模模型训练对基础设施的要求。

图 2所示:
图 2. 人工智能


云游戏

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

这种云游戏模式,可以借助GPU以及服务器CPU能力,通过ZStack Cloud的GPU透传功能,为游戏创造隔离性更佳的虚拟环境,从而保证计算与渲染的流畅度,为用户提供更好的游戏体验。

图 3所示:
图 3. 云游戏


VDI (桌面云)

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

通过ZStack Cloud的GPU透传功能,以及配合RDP、PCoIP等协议,可充分利用显卡能力,比如3D设计、游戏等流畅运行,提供更逼近本地物理机的用户体验。

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


准备工作

物理机设置

使用GPU透传功能,提前对物理机进行以下设置:
  • 物理机BIOS中开启Intel VT-d / AMD IOMMU功能,且内核开启IOMMU支持。
  • 如使用NVIDIA A系列GPU,升级物理机操作系统Kernel版本至4.18,升级GCC版本至8.3.1。

全局设置

使用GPU透传功能前,请检查以下全局设置:
  • KVM虚拟化标记隐藏开关:如使用NVIDIA桌面级显卡,设置为true
  • 云主机Hyper-V开关:如使用NVIDIA桌面级显卡,设置为true
  • PCI设备热插拔开关:如云主机加/卸载出现硬件兼容性错误或硬件不支持,建议设置为false
  • GPU设备配额:按需配置子账户/项目可使用的GPU设备配额

GPU加/卸载注意事项

使用GPU透传功能前,请阅读以下注意事项:
  • 一台云主机支持同时加载多个物理GPU设备,但不支持同时加载物理GPU和vGPU设备。
  • 云主机加载物理GPU后,更改物理机、更改物理机和主存储、高可用功能可能无法正常工作。
  • 为Windows云主机加载物理GPU,需通过UEFI方式安装云主机操作系统。
  • 如需卸载物理GPU,建议停止云主机后进行,避免蓝屏及暂停。
  • 支持创建云主机时直接加载物理GPU。如按GPU规格加载,支持批量创建;如指定GPU设备加载,仅支持创建单台。

GPU驱动

为正常使用GPU透传功能,需为物理机、云主机安装GPU驱动。推荐驱动版本如下:
GPU 物理机推荐驱动版本 云主机推荐驱动版本
NVIDIA NVIDIA-Linux-x86_64-510.47.03-grid.run NVIDIA官方推荐最新版本:详见NVIDIA
AMD rocm-smi 6.1.2及以上版本 rocm-smi 6.1.2及以上版本
Note: 如云主机使用RHEL7系列操作系统,需确保云主机内核为4.18.0或以上版本。
Hygon

rock-5.2.0-5.16.29-V01.13.run

Hygon GPU透传后,暂不支持通过云主机GPU驱动获取负载监控数据
华为

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

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

天数智芯
  • x86架构:corex-installer-linux64-4.0.1_x86_64_10.2.run
  • ARM架构:corex-installer-linux64-4.0.1_arm64_10.2.run
  • x86架构:corex-installer-linux64-4.0.1_x86_64_10.2.run
  • ARM架构:corex-installer-linux64-4.0.1_arm64_10.2.run

授权

  • 使用基础GPU透传功能,需确保购买GPU服务模块许可证。企业版智算版平台许可证默认提供GPU服务模块许可证,无需单独购买。
  • 如需查看GPU使用率、内存使用率、功耗、温度等详细监控数据,并获取报警推送,需购买智算版平台许可证。

典型使用流程

背景信息

GPU设备透传的典型使用流程如下:
  1. 启用物理机IOMMU设置。
  2. 设置ROM (可选)。
  3. 云主机加载物理GPU。
  4. 云主机安装GPU设备驱动。
  5. 获取GPU监控和报警 (可选)。

操作步骤

  1. 物理机启用IOMMU设置。
    1. 确保物理机BIOS已开启Intel VT-d / AMD IOMMU
    2. ZStack Cloud开启物理机IOMMU设置
      ZStack Cloud主菜单,点击资源中心 > 硬件设施 > 物理机,进入物理机界面。点击物理机名称,进入物理机详情页。查看IOMMU启用状态开关是否打开。如未打开,可点击开启,并重启物理机生效。
      图 5所示:
      图 5. 已添加物理机启用IOMMU设置


    3. 在物理机详情页,检查IOMMU就绪状态是否为可用
      IOMMU就绪状态为不可用,可能是因为以下原因:
      • 开启IOMMU启用状态后未重启物理机,重启即可。
      • 物理机配置错误,请进入物理机BIOS并开启Intel VT-d / AMD IOMMU配置。
  2. 设置ROM (可选)。

    ROM文件是用于物理GPU透传的配置文件。ROM文件上传后,将直接更新到已添加的规格对应的物理GPU中。

    ZStack Cloud已内置基础ROM文件,满足绝大部分物理GPU透传。若用户需要使用其他ROM文件,请自行GPU在供应商官网获取所需的ROM文件并上传。

    ZStack Cloud主菜单,点击资源中心 > 云资源池 > 计算配置 > GPU规格,进入GPU规格界面,选中需要设置ROM的物理GPU规格并点击批量操作 > 设置ROM按钮,在弹出的设置ROM页面上传ROM文件。

    图 6所示:
    图 6. 设置ROM


    Note:
    • 请务必上传与物理GPU匹配且版本信息正确的ROM文件,否则可能导致透传后的物理GPU不能正常工作。
    • 最新上传的ROM文件会覆盖之前的ROM文件。
  3. 云主机加载物理GPU。

    ZStack Cloud主菜单,点击资源中心 > 云资源池 > 虚拟资源 > 云主机。在云主机界面,找到需加载物理GPU的云主机,点击操作 > 系统配置 > 设置GPU策略。弹出设置GPU策略界面。

    支持以下GPU加载策略:
    • 按GPU规格加载:选择一个物理GPU规格,系统将为云主机加载一个匹配改规格的物理GPU
      Note: 按规格加载时,可选择关机是否自动卸载GPU设备。
      • 如选择自动卸载,云主机关机后将释放该GPU设备,云主机开机后,系统将重新分配一个GPU设备
      • 如选择不自动卸载,云主机关机后将继续保有当前GPU设备。但如发生意外关机,高可用功能将不可用
    • 指定GPU设备加载:为云主机加载指定的GPU设备
  4. 云主机安装GPU设备驱动。
    为正常使用透传的GPU设备,需为云主机安装GPU驱动。不同GPU型号或操作系统对应的驱动安装流程可能不同,建议参考GPU设备官方资料或联系厂商获取帮助。本场景以Linux云主机安装NVIDIA GPU驱动为例进行介绍。
    Note: 如使用双芯片AMD卡 (AMD Firepro S7150 X2) ,并将其对应的两个物理GPU设备分别透传给不同云主机使用,请确保为云主机安装相同版本的驱动,以保证正常获取GPU监控数据。
    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     #运行驱动文件
      安装过程需要配置一些参数,请参考下图进行配置,如图 7所示:
      图 7. 安装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
  5. (可选) 获取GPU监控和报警
    如需查看GPU实时监控并获取报警推送,可参考本步骤配置。如不需要,可跳过本步骤。
    1. 安装云主机性能优化工具
      不同操作系统安装性能优化工具的流程不同,详情请参考《用户手册》云主机性能优化工具章节
    2. 查看GPU设备监控
      ZStack Cloud主菜单,点击资源中心 > 硬件设施 > 计算设施 > GPU设备。在GPU设备界面,点击需要查看的GPU名称,进入GPU详情页,即可查看实时负载监控
    3. 创建GPU设备报警器
      ZStack Cloud主菜单,点击平台运维 > 云平台监控,进入云平台监控模块。创建通知对象和报警器,详情请参考监控报警功能使用教程
GPU设备透传使用教程 | 5.4.12 | ZStack Cloud · ZCF | ZStack 资源中心