目录
1.2 NVIDIA vGPU软件部署对主要的显示适配器要求
1.3.3 NVIDIA vGPU软件支持的NVIDIA CUDA工具包和OpenCL
1.3.5 支持NVIDIA vGPU软件的NVIDIA GPU云(NGC)容器
2.5 在Citrix Hypervisor安装和配置NVIDIA vGPU管理器
2.5.1 在Citrix Hypervisor安装和更新NVIDIA vGPU管理器
2.5.1.1 在Citrix Hypervisor安装rpm包
2.5.1.2 在Citrix Hypervisor更新rpm包
2.5.1.3 使用Citrix Hypervisor安装或更新补充包
2.5.1.4 验证NVIDIA vGPU软件包在Citrix Hypervisor上的安装
2.5.2 配置带有虚拟GPU的Citrix Hypervisor虚拟机
2.5.3 在Citrix Hypervisor上设置vGPU插件参数
2.6 在Linux KVM上安装NVIDIA vGPU 管理软件包
2.7 在Ubuntu上安装配置NVIDIA vGPU管理软件包
2.7.1 在Ubuntu上安装NVIDIA vGPU管理软件包
2.8 在VMware vSphere上安装配置NVIDIA vGPU管理软件包
2.8.1 在VMware vSphere上安装NVIDIA vGPU管理软件包
2.8.2 在VMware vSphere上更新NVIDIA vGPU管理软件包
2.8.4 在VMware vSphere上管理vGPU软件进程
2.8.5 在VMware vSphere中配置带vGPU的VMware vMotion
2.8.6 在VMware vSphere中更改默认图形类型
2.8.7 在VMware vSphere 虚拟机VM上 vGPU
2.8.7.1 配置具有NVIDIA vGPU的vSphere 8虚拟机
2.8.7.2 配置具有NVIDIA vGPU的vSphere 7虚拟机
2.8.8 在VMware vSphere上设置vGPU插件参数
2.9 配置Linux与KVM Hypervisor的vGPU管理器
2.9.1 在具有KVM Hypervisor的Linux系统上获取GPU的BDF和域
2.9.2 在Linux KVM Hypervisor上创建vGPU
2.9.2.1 在Linux KVM管理程序上创建传统Legacy的NVIDIA vGPU
2.9.2.2 在带有KVM Hypervisor的Linux上创建支持SR-IOV的NVIDIA vGPU
2.9.3 为Linux KVM虚拟机添加一个或多个vGPU
2.9.3.1 使用virsh命令为Linux KVM虚机添加一个或多个vGPU
2.9.3.2 使用QEMU命令行为Linux KVM虚拟机添加一个或多个vGPU
2.9.4 在Linux KVM虚拟机上设置vGPU插件参数
2.15 配置 vGPU 虚拟机以使用 NVIDIA GPUDirect 存储技术
第一章、NVIDIA vGPU软件简介
NVIDIA vGPU软件是一种GPU虚拟化平台,为虚拟机(VMs)提供对NVIDIA GPU访问的技术。 NVIDIA vGPU软件允许多个虚拟机实例共享一块物理GPU,从而提高了虚拟化环境中图形处理的性能和效率。通过将NVIDIA GPU技术引入虚拟化环境,用户可以在虚拟机中运行需要高性能图形处理的应用程序,如3D渲染、机器学习和科学计算等。这种虚拟化平台使得在虚拟化环境中使用GPU变得更加灵活和高效,为用户提供了更好的图形处理能力和性能。
1.1 如何使用NVIDIA vGPU软件
NVIDIA vGPU软件可以通过多种方式使用。
1.1.1 英伟达vGPU
NVIDIA虚拟GPU(vGPU)使多个虚拟机(VMs)能够同时直接访问单个物理GPU,使用与非虚拟化操作系统上部署的相同的NVIDIA图形驱动程序。通过这种方式,NVIDIA vGPU为虚拟机提供了无与伦比的图形性能、计算性能和应用程序兼容性,同时通过在多个工作负载之间共享GPU带来的成本效益和可扩展性。NVIDIA vGPU软件允许多个虚拟机实例共享一块物理GPU,从而提高了虚拟化环境中图形处理的性能和效率。通过在虚拟化环境中使用与非虚拟化操作系统相同的NVIDIA图形驱动程序,用户可以获得出色的图形处理性能、计算性能和应用程序兼容性。这种虚拟化平台使得在虚拟化环境中使用GPU变得更加灵活和高效,为用户提供了更好的图形处理能力和性能。
1.1.2 GPU直通
GPU直通模式是指将一整块物理GPU直接分配给一台虚拟机使用。绕过NVIDIA虚拟GPU管理器。在此模式下,GPU被分配给它的虚拟机中运行的NVIDIA驱动程序独占访问。虚拟机之间不共享GPU。
1.1.3 裸金属服务器部署
在裸金属部署场景下,可以使用NVIDIA vGPU软件驱动vWS和vApps授权,提供远程虚拟桌面和应用。如果你想要使用没有管理程序的GPU卡,请使用NVIDIA vGPU软件图形驱动程序,而不是其他NVIDIA驱动程序。
要在裸机部署中使用NVIDIA vGPU软件驱动程序,请完成以下任务:
1. 在物理主机上安装驱动程序
具体操作请参见《安装NVIDIA vGPU软件显卡驱动程序》。
2. 授权您正在使用的任何NVIDIA vGPU软件。
有关说明,请参阅《Virtual GPU Software Client Licensing》
3. 配置远程访问平台。
要使用gpu的图形功能,必须使用支持的远程控制解决方案,例如RemoteFX、Citrix Virtual Apps and desktop、VNC等技术。
4. 使用主机操作系统的“显示设置”特性,将GPU卡配置为主要显示输出设备。
NVIDIA 显卡通常作为裸机平台上的辅助设备运行。
5. 如果系统有多个显示器接口,请禁用通过该显示器接口连接的非NVIDIA的GPU显示设备。
可以使用主机操作系统自带的显示设置特性,也可以使用远程解决方案自带的显示设置特性
为此目的。在NVIDIA gpu上,包括Tesla gpu,默认的显示设备是启用。
用户可以启动需要NVIDIA GPU技术的应用程序,以增强用户只有在启用NVIDIA适配器驱动的显示器后才能体验。
1.2 NVIDIA vGPU软件部署对主要的显示适配器要求
设置为主显示适配器的GPU不能用于NVIDIA vGPU部署或GPU直通部署。
任何正在用于NVIDIA vGPU部署或GPU直通部署必须将部署设置为辅助显示适配器。
注意:Citrix Hypervisor提供了一个特定的设置,允许使用主显示适配器用于GPU直通部署。
仅支持以下gpu作为主显示适配器:
‣ Tesla M6
‣ Quadro RTX 6000
‣ Quadro RTX 8000
所有支持NVIDIA vGPU软件的gpu不能作为主显示器因为它们是3D控制器,而不是VGA设备。
如果虚拟机管理程序主机没有额外的图形适配器,请考虑安装低端适配器将用作主显示适配器。如有必要,请确保这一点主显示适配器在hypervisor主机的BIOS选项中设置正确。
1.3 NVIDIA vGPU软件功能
NVIDIA vGPU软件包括vWS、vCS、vPC和vApps。
1.3.1 NVIDIA vGPU支持GPU实例软件
NVIDIA vGPU软件支持多实例GPU上的GPU实例
NVIDIA vGPU和GPU直通部署中的GPU(MIG)功能。
MIG使物理GPU被安全地划分为多个单独的GPU实例,提供多个用户使用单独的GPU资源来加速他们的应用程序
除了提供MIG的所有好处外,NVIDIA vGPU软件还添加了虚拟机安全和工作负载管理。单根I/O虚拟化(SRIOV)虚拟功能为以下虚拟机提供完整的IOMMU保护配置了vGPU。
图1显示了一个GPU,它被分成三个不同大小的GPU实例,每个实例映射到一个vGPU。尽管每个GPU实例都由并且映射到一个vGPU,每个虚拟机可以进一步细分将计算资源划分为较小的计算实例并在其上运行多个容器即使在每个vGPU中,也可以并行运行。
配置了NVIDIA vGPU的GPU实例
NVIDIA vGPU软件支持带DEC、JPG和OFA的单片MIG支持的vGPU。只有一个支持DEC、JPG和OFA的MIG支持的vGPU可以驻留在GPU。该实例可以被放置为与没有DEC、JPG、PNG或PNG的单个切片实例相同,以及OFA支持。
并非所有管理程序都支持NVIDIA vGPU部署中的GPU实例。来确定您选择的管理程序支持NVIDIA vGPU部署中的GPU实例,请看NVIDIA Virtual GPU Software v15.0 through 15.4 - NVIDIA Docs。
NVIDIA vGPU软件仅支持使用NVIDIA Virtual Compute Server的GPU实例和Linux客户机操作系统。
要使用NVIDIA vGPU支持GPU实例,GPU必须配置为MIG模式启用和GPU实例必须在物理GPU上创建和配置。更多信息,请参阅为《MIG支持的vGPU配置GPU》。一般信息有关MIG功能,请参阅:NVIDIA Multi-Instance GPU User Guide。
1.3.2 API对NVIDIA vGPU的支持
NVIDIA vGPU包括对以下API的支持:
‣ Open Computing Language (OpenCL™ software) 3.0
‣ OpenGL® 4.6
‣ Vulkan® 1.3
‣ DirectX 11
‣ DirectX 12 (Windows 10)
‣ Direct2D
‣ DirectX Video Acceleration (DXVA)
‣ NVIDIA® CUDA® 12.0
‣ NVIDIA vGPU software SDK (remote graphics acceleration)
‣ NVIDIA RTX (on GPUs based on the NVIDIA Volta graphic architecture and later
architectures)
注意:这些API向后兼容。API的旧版本也受支持。
1.3.3 NVIDIA vGPU软件支持的NVIDIA CUDA工具包和OpenCL
NVIDIA vGPU仅在以下子集上支持NVIDIA CUDA工具包和OpenCL
vGPU类型和支持的GPU。
注意:
如果您在Linux上使用带有CUDA的NVIDIA vGPU软件,请避免安装冲突方法通过从独立于发行版的run文件包安装CUDA。不要从特定于发行版的RPM或Deb软件包安装CUDA。确保CUDA被覆盖时,NVIDIA vGPU软件图形驱动程序不会被覆盖安装后,在选择要安装的CUDA组件时取消选择CUDA驱动程序。了解更多信息http://docs.nvidia.com/cuda/archive/12.0/pdf/CUDA_Installation_Guide_Linux.pdf
OpenCL和CUDA应用程序支持
以下NVIDIA vGPU类型支持OpenCL和CUDA应用程序:
‣ The 8Q vGPU type on Tesla M6, Tesla M10, and Tesla M60 GPUs
‣ All Q-series vGPU types on the following GPUs:
‣ Since 15.2: NVIDIA L4
‣ Since 15.1: NVIDIA L40
‣ Since 15.1: NVIDIA RTX 6000 Ada
‣ NVIDIA A2
‣ NVIDIA A10
‣ NVIDIA A16
‣ NVIDIA A40
‣ NVIDIA RTX A5000
‣ NVIDIA RTX A5500
‣ NVIDIA RTX A6000
‣ Tesla P4
‣ Tesla P6
‣ Tesla P40
‣ Tesla P100 SXM2 16 GB
‣ Tesla P100 PCIe 16 GB
‣ Tesla P100 PCIe 12 GB
‣ Tesla V100 SXM2
‣ Tesla V100 SXM2 32GB
‣ Tesla V100 PCIe
‣ Tesla V100 PCIe 32GB
‣ Tesla V100S PCIe 32GB
‣ Tesla V100 FHHL
‣ Tesla T4
‣ Quadro RTX 6000
‣ Quadro RTX 6000 passive
‣ Quadro RTX 8000
‣ Quadro RTX 8000 passive
‣ All C-series vGPU types
NVIDIA CUDA工具包开发工具支持
NVIDIA vGPU支持以下NVIDIA CUDA Toolkit开发工具
GPU:
‣ Debuggers:
‣ CUDA-GDB
‣ Compute Sanitizer
‣ Profilers:
‣ The Activity, Callback, and Profiling APIs of the CUDA Profiling Tools Interface
(CUPTI)
Other CUPTI APIs, such as the Event and Metric APIs, are not supported.
‣ NVIDIA Nsight™ Compute
‣ NVIDIA Nsight Systems
‣ NVIDIA Nsight plugin
‣ NVIDIA Nsight Visual Studio plugin
不支持其他CUDA分析工具,如nvprof和NVIDIA Visual Profiler。
这些工具仅在Linux客户机中受支持。
支持NVIDIA CUDA Toolkit分析工具,可以在VM上启用统一存储器。
默认情况下,NVIDIA vGPU上禁用了NVIDIA CUDA Toolkit开发工具。如果使用,您必须为每个需要它们的VM单独启用NVIDIA CUDA Toolkit开发工具通过设置vGPU插件参数,。有关说明请看《Enabling NVIDIA CUDA Toolkit Development Tools for NVIDIA vGPU》.
下表列出了NVIDIA vGPU支持这些调试器的gpu分析器。
GPU | vGPU模式 | 调试器 | 分析器 |
Since 15.2: NVIDIA L4 | Time-sliced | ✓ | ✓ |
Since 15.1: NVIDIA L40 | Time-sliced | ✓ | ✓ |
Since 15.1: NVIDIA RTX 6000 Ada | Time-sliced | ✓ | ✓ |
NVIDIA A2 | Time-sliced | ✓ | ✓ |
NVIDIA A10 | Time-sliced | ✓ | ✓ |
NVIDIA A16 | Time-sliced | ✓ | ✓ |
NVIDIA A30 | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A30X | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A40 | Time-sliced | ✓ | ✓ |
NVIDIA A100 HGX 40GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A100 PCIe 40GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A100 HGX 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A100 PCIe 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A100 PCIe 80GB liquid cooled | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A100X | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A800 PCIe 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A800 PCIe 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A800 PCIe 80GB liquid cooled | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA A800 HGX 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
Since 15.2: NVIDIA H800 PCIe 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA H100 PCIe 80GB | Time-sliced | ✓ | ✓ |
MIG-backed | |||
NVIDIA RTX A5000 | Time-sliced | ✓ | ✓ |
NVIDIA RTX A5500 | Time-sliced | ✓ | ✓ |
NVIDIA RTX A6000 | Time-sliced | ✓ | ✓ |
Tesla T4 | Time-sliced | ✓ | ✓ |
Quadro RTX 6000 | Time-sliced | ✓ | ✓ |
Quadro RTX 6000 passive | Time-sliced | ✓ | ✓ |
Quadro RTX 8000 | Time-sliced | ✓ | ✓ |
Quadro RTX 8000 passive | Time-sliced | ✓ | ✓ |
Tesla V100 SXM2 | Time-sliced | ✓ | ✓ |
Tesla V100 SXM2 32GB | Time-sliced | ✓ | ✓ |
Tesla V100 PCIe | Time-sliced | ✓ | ✓ |
Tesla V100 PCIe 32GB | Time-sliced | ✓ | ✓ |
Tesla V100S PCIe 32GB | Time-sliced | ✓ | ✓ |
Tesla V100 FHHL | Time-sliced | ✓ | ✓ |
✓表示支持特性
支持的NVIDIA CUDA工具包功能
NVIDIA vGPU支持以下NVIDIA CUDA Toolkit特性,如果vGPU类型为:物理GPU、虚拟化环境软件版本支持以下特性:
- 纠错码(ECC)内存
- 通过NVLink进行点对点CUDA传输
注意:确定主机或虚拟gpu之间的NVLink拓扑,分配给虚拟机后,在主机或虚拟机上执行如下命令:
$ nvidia-smi topo -m
- NVIDIA GPUDirect®远程直接内存访问(RDMA)技术,
- GPUDirect Storage技术
- 统一内存
注意:默认关闭统一内存。如果使用,必须启用统一内存通过设置vGPU插件参数,为每个需要它的vGPU单独设置。详细说明,请参阅《Enabling Unified Memory for a vGPU》
- NVIDIA Nsight系统GPU上下文切换跟踪
支持以下功能的物理GPU上的所有vGPU类型都支持动态页面退出ECC内存,即使物理GPU上禁用了ECC内存。
不支持NVIDIA CUDA Toolkit功能的 NVIDIA vGPU
NVIDIA vGPU不支持NVIDIA CUDA的NVIDIA Nsight Graphics特性工具包。
注意:NVIDIA Nsight Graphics特性支持GPU直通模式和裸机部署。
1.3.4 其他vWS功能
除了vPC和vapp的特性外,vWS还提供以下特性:
- 工作站特有的图形特性和加速
- 经过专业应用认证的驱动程序
- GPU通道用于工作站或专业3D图形
在直通模式下,vWS支持多个分辨率更高的虚拟显示头到8K和灵活的虚拟显示分辨率基于可用像素的数量。有关详细信息请看《Display Resolutions for Physical GPUs.》,
- Windows用户的10位颜色。(Linux目前不支持HDR/10位颜色,支持NvFBC捕获,但已弃用。)
1.3.5 支持NVIDIA vGPU软件的NVIDIA GPU云(NGC)容器
NVIDIA vGPU软件支持NVIDIA vGPU中的NGC容器和GPU直通在所有受支持的管理程序上部署。
在NVIDIA vGPU部署中,以下基于Maxwell架构之后的NVIDIA GPU架构vGPU类型仅在GPU上受支持
- 所有q系列vGPU类型
- 所有c系列vGPU类型
在GPU直通部署中,所有基于NVIDIA GPU架构的GPU支持NVIDIA vGPU软件的NVIDIA Maxwell™架构。
支持Ubuntu客户操作系统。
有关设置NVIDIA vGPU软件以供NGC容器使用的更多信息,请看http://docs.nvidia.com/ngc/pdf/ngc-vgpu-setup-guide.pdf
1.3.5 NVIDIA GPU操作支持
NVIDIA GPU Operator简化了NVIDIA vGPU软件在软件上的部署由Kubernetes容器编排引擎管理的容器平台。它在配置了NVIDIA vGPU的客户虚拟机中运行的容器平台自动安装和更新NVIDIA vGPU软件图形驱动程序。
NVIDIA GPU操作员使用随NVIDIA vGPU软件发布的驱动程序目录图形驱动程序,用于自动确定NVIDIA vGPU软件图形驱动程序
与平台的虚拟GPU管理器兼容的版本。
NVIDIA GPU安装的任何驱动程序都必须从NVIDIA本地计算机的许可门户下载
通过以下方式自动访问NVIDIA许可门户
NVIDIA GPU Operator支持自动配置NVIDIA vGPU软件和通过在客户虚拟机中运行的DCGM出口商提供遥测支持。
NVIDIA GPU Operator仅支持特定的管理程序软件组合版本、容器平台、vGPU类型和客户操作系统版本。来确定你的
配置是否支持NVIDIA GPU Operator与NVIDIA vGPU部署,请参阅所选管理程序的发行说明NVIDIA Virtual GPU Software v15.0 through 15.4 - NVIDIA Docs
了解更多信息https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/overview.html
1.4 本指南包含哪些内容?
虚拟GPU软件用户指南包含内容如下:
本章介绍NVIDIA vGPU软件的功能和特点。
- 《Installing and Configuring NVIDIA Virtual GPU Manager》 提供分步指南在支持的管理程序上安装和配置vGPU。
- 《Using GPU Pass-Through》解释如何配置GPU以通过支持的管理程序。
- 《Installing the NVIDIA vGPU Software Graphics Driver》解释如何在 Windows和Linux操作系统上安装NVIDIAvGPU软件图形驱动程序。
- 《Licensing an NVIDIA vGPU》说明如何在Windows和Linux操作系统授权NVIDIA vGPU授权产品。
- 《Modifying a VM's NVIDIA vGPU Configuration》本节介绍如何移除虚拟机的vGPU该任务指导软件调测工程师为开启vgpu的虚拟机配置和修改GPU分配。必备事项
- 《Monitoring GPU Performance》涵盖物理gpu的性能监控和来自管理程序和单个客户虚拟机的虚拟gpu。
- 《Changing Scheduling Behavior for Time-Sliced vGPUs》描述调度NVIDIA vgpu的行为以及如何改变它。
- 《Troubleshooting》提供故障处理指导。
- 《Virtual GPU Types Reference》提供了每个支持的GPU可用的vGPU的详细信息,并提供了b系列的混合虚拟显示配置的例子q系列vgpu。
- 《Configuring x11vnc for Checking the GPU in a Linux Server》说明如何使用x11vnc确认NVIDIA GPU在Linux服务器上没有向哪个设备显示都是直接连接的。
- 《Disabling NVIDIA Notification Icon for Citrix Published Application User Sessions》说明如何确保NVIDIA通知图标应用程序不会阻止Citrix已发布应用程序用户会话被注销,即使在用户已退出所有操作
- 《Citrix Hypervisor Basics》本节介绍Citrix Hypervisor的基本操作安装和配置NVIDIA vGPU软件,优化Citrix Hypervisor操作与vGPU。
- 《Citrix Hypervisor vGPU Management》介绍了Citrix Hypervisor上的vGPU管理。
- 《Citrix Hypervisor Performance Tuning》涵盖了Citrix上的vGPU性能优化管理程序。
第二章:安装与配置NVIDIA vGPU
安装和配置NVIDIA虚拟GPU管理器的过程取决于您正在使用的虚拟机监控程序。完成此过程后,您可以为您安装的客户操作系统显示器提供驱动程序,并为正在使用的NVIDIA vGPU软件产品进行许可。
2.1 关于NVIDIA虚拟GPU
2.1.1 NVIDIA vGPU架构
NVIDIA vGPU的高级架构如图2所示。在控制之下在管理程序下运行的NVIDIA虚拟GPU管理器,NVIDIA物理GPU能够支持可以直接分配的多个虚拟GPU设备(vGPU)访问虚拟机。
访客虚拟机使用NVIDIA vGPU的方式与物理GPU相同,由虚拟机管理程序传递:客户机虚拟机中加载的NVIDIA驱动程序提供
直接访问GPU以实现性能关键的快速路径,以及半虚拟化NVIDIA虚拟GPU管理器的接口用于非性能管理操作。
NVIDIA vGPU系统架构
每个NVIDIA vGPU都类似于传统GPU,具有固定数量的GPU帧缓冲器和一个或多个虚拟显示输出或“头”。vGPU的帧缓冲区
在创建vGPU时从物理GPU的帧缓冲区中分配,以及vGPU保留对该帧缓冲区的独占使用,直到它被销毁。
根据物理GPU的不同,可以在vGPU上创建不同类型的vGPU:
在所有支持NVIDIA vGPU软件的GPU上,都可以创建分时切片的vGPU。此外,在支持多实例GPU(MIG)功能的GPU上,MIG支持
可以创建vGPU。MIG功能基于NVIDIA Ampere GPU架构。
2.1.1.1 分时切片NVIDIA vGPU内部架构
分时切片vGPU是一种驻留在物理GPU上的vGPU,该GPU未被划分为多个GPU实例。驻留在GPU上的所有分时切片vGPU共享
GPU的引擎包括图形(3D)、视频解码和视频编码引擎。
在分时切片的vGPU中,在vGPU上运行的进程被安排为串行运行。当其他进程在其他vGPU上运行时,每个vGPU都会等待。当进程正在运行时,在vGPU上,vGPU独占GPU的引擎。您可以更改默认值,如中所述的调度行为《Changing Scheduling Behavior for Time-Sliced vGPUs.》
分时切片NVIDIA vGPU内部架构
2.1.1.2 MIG支持的NVIDIA vGPU内部架构
MIG支持的vGPU是驻留在具有MIG功能的物理设备中的GPU实例上的vGPU。驻留在GPU上的每个MIG支持的vGPU都可以独占访问GPU实例的引擎,包括计算和视频解码引擎。
在MIG支持的vGPU中,在vGPU上运行的进程与进程并行运行在GPU上的其他vGPU上运行。进程在物理GPU上的所有vgpu上运行
同时进行。
MIG支持的NVIDIA vGPU内部架构
2.1.2 关于vGPU类型
每块GPU卡有多少个物理gpu取决于单板。每个物理GPU支持多种不同类型的虚拟GPU (vGPU)。
系列 | 最佳工作负载 |
Q系列 | 为需要以下功能的设计和技术专业人员提供的虚拟工作站Quadro技术的性能和特点 |
C系列 | 计算密集型服务器工作负载,如人工智能(AI)、深度学习或高性能计算(HPC) |
B系列 | 面向行业专业人员和知识工作者的虚拟桌面 |
A系列 | 面向虚拟应用用户的应用流或基于会话的解决方案 |
在Windows 10客户操作系统上,帧缓冲区小于1 GB的NVIDIA vGPU仅支持1个虚拟显示接口。C系列vGPU类型是NVIDIA虚拟计算服务器vGPU类型,针对计算密集型进行了优化工作量。因此,它们只支持单个显示头,不提供Quadro图形加速。
vGPU类型名称中主板类型后的数字表示帧数分配给该类型vGPU的缓冲区。例如,A16-4C型vGPU是在NVIDIA A16板上分配了4096 MB的帧缓冲区
由于它们具有不同的资源需求,可以同时在物理GPU上创建的vGPU的最大数量根据vGPU类型而变化。例如,NVIDIA A16板可以在其两个物理GPU上每个支持最多4个A16-4C vGPU,总共支持16个vGPU,但只能支持2个A16-8C vGPU,总共支持8个vGPU。
帧速率限制器(FRL)启用后,以帧/帧为单位限制最大帧速率vGPU的FPS设置如下:
- 对于B系列vGPU,最大帧率为45 FPS。
- 对于Q系列、C系列和A系列vGPU,最大帧率为60 FPS。
默认情况下,所有GPU都启用了FRL。当vGPU调度行为从默认的最佳努力调度程序更改为支持替代vGPU调度程序的GPU上时,FRL将被禁用。具体请参考《Changing Scheduling Behavior for Time-Sliced vGPUs》
在最佳调度程序的vGPU上,可以禁用FRL,如下所示在所选管理程序的发行说明中进行了解释
注意:NVIDIA vGPU是所有受支持GPU板上的授权产品。软件许可证是需要启用虚拟机VM中的所有vGPU功能。所需许可证类型
取决于vGPU类型。
- Q系列vGPU类型需要vWS许可证。
- C系列vGPU类型需要NVIDIA虚拟计算服务器(vCS)许可证,但可以也可以与vWS许可证一起使用。
- B系列vGPU类型需要vPC许可证,但也可以与vWS许可证一起使用。
NVIDIA虚拟计算服务器vGPU的最大数量限制为每个物理GPU 8个vGPU,无论物理GPU的可用硬件资源。-1B4和-2B4 vGPU类型在此版本中已被弃用,并可能在未来的版本中被删除。为准备要删除这些vGPU类型,请使用以下提供等效功能的vGPU类型:
- 使用-1B vGPU类型而不是-1B4 vGPU类型。
- 使用-2B vGPU类型代替-2B4 vGPU类型。
对于许多工作负载,-1B和-1B4 vGPU的性能很好,每个vGPU只有2个2560×1600虚拟显示器。如果你如果希望每个vGPU使用2个以上2560×1600虚拟显示器,请使用具有更多帧缓冲区的vGPU,如-2B或-2B4 vGPU。了解更多信息《NVIDIA GRID vPC Sizing Guide (PDF).》
A系列的NVIDIA vGPU支持在低分辨率下使用单个显示器作为远程应用程序环境(如RDSH和Citrix Virtual Apps和Desktops)中的控制台显示。A系列NVIDIA vGPU的最大分辨率和虚拟显示头数量仅适用于控制台显示。每个RDSH或Citrix Virtual Apps和Desktops会话的最大分辨率由远程解决方案确定,并不受vGPU的最大分辨率限制。同样,每个会话支持的虚拟显示头数量由远程解决方案确定,并不受vGPU的限制。
- A系列vGPU类型需要vApps许可证。
有关每个支持的GPU可用的vGPU类型的详细信息请看《Virtual GPU Types for Supported GPUs.》
2.1.3 Q系列和B系列vGPU
Q系列和B系列vGPU不支持每个显示器的固定最大分辨率,而是支持基于可用像素数量的最大组合分辨率,这取决于它们的帧缓冲区大小。您可以选择在这些vGPU上使用少量高分辨率显示器或更多数量的低分辨率显示器。
您可以使用的虚拟显示器数量取决于以下因素的组合:
- vGPU系列
- GPU架构
- vGPU帧缓冲区大小
- 显示分辨率
注意:您不能使用超过vGPU支持的最大显示数量,即使显示器的组合分辨率小于vGPU的可用像素数量。例如,因为-0Q和-0B vGPU仅支持最多两个显示器,即使显示器的组合分辨率(6220800)小于这些vGPU的可用像素数量(8192000),您也不能在这些vGPU上使用四个1280×1024的显示器。各种因素会影响GPU帧缓冲区的消耗,从而影响用户体验。这些因素包括但不限于显示器数量、显示分辨率、工作负载和部署的应用程序、远程解决方案和客户操作系统。
vGPU驱动特定组合显示器的能力并不保证足够的帧缓冲区空间供所有应用程序运行。如果应用程序用尽帧缓冲区,请考虑通过以下方式之一更改设置
- 切换到有更多帧缓冲的vGPU类型
- 使用更少的显示器
- 使用低分辨率显示器
2.1.4 有效的单个GPU上的分时vGPU配置
在单个GPU上有效的vGPU配置取决于vGPU是分时切片还是在支持MIG的GPU上是MIG支持的。
这个版本的NVIDIA vGPU支持在同一物理GPU上使用具有相同帧缓冲区量的不同虚拟GPU系列的分时vGPU。例如,A系列、B系列、C系列和Q系列vGPU可以同时驻留在同一物理GPU上,前提是它们具有相同数量的帧缓冲区。
然而,所有vGPU都具有相同帧缓冲区的要求并不跨越同一卡上的物理GPU。同一卡上的不同物理GPU可以同时承载具有不同帧缓冲区量的虚拟GPU,只要同一物理GPU上的vGPU类型都具有相同数量的帧缓冲区。
例如,NVIDIA A16卡有四个物理GPU,并且可以支持多种类型的虚拟GPU。
- 在GPU0上混合使用A16-4C vGPU和A16-4Q vGPU的配置是有效的。
- 在GPU 0和GPU 1上使用A16-16C vGPU,在GPU 2上使用A16-8C vGPU,在GPU3上使用A16-4C vGPU的配置是有效的。
- 在GPU0上混合使用A16-8C vGPU和A16-4C vGPU的配置是无效的。
2.1.4 有效的单个GPU上的MIG支持的虚拟GPU配置
这个版本的NVIDIA vGPU支持基于底层GPU实例配置的同质和混合MIG支持的虚拟GPU。例如,NVIDIA A100 PCIe 40GB卡有一个物理GPU,并且可以支持多种类型的虚拟GPU。图5显示了在NVIDIA A100 PCIe 40GB上有效的同质和混合MIG支持的虚拟GPU配置的以下示例。
- 在3个MIG.2g.10b GPU实例上有3个A100-2-10C vGPU的有效同质配置。
- 在3个MIG.3g.20b GPU实例上有2个A100-3-20C vGPU的有效同质配置。
- 一个有效的混合配置,其中有1个A100-4-20C vGPU在一个MIG.4g.20b GPU实例上,1个A100-2-10C vGPU在一个MIG.2.10b GPU实例上,以及1个A100-1-5C vGPU在一个MIG.1g.5b实例上。
Example MIG-Backed vGPU Configurations on NVIDIA A100
PCIe 40GB
2.1.5 支持的虚拟机
NVIDIA vGPU支持Windows和Linux客户虚拟机操作系统。支持的vGPU类型取决于客户虚拟机的操作系统。有关支持的Windows和Linux版本的详细信息,以及有关支持的配置的更多信息,请参阅NVIDIA虚拟GPU软件文档中您所使用的虚拟机监控程序的驱动程序发布说明
2.1.5.1 Windows虚拟机
所有NVIDIA vGPU类型都支持Windows客户虚拟机,即:Q系列、C系列、B系列和A系列NVIDIA vGPU类型
2.1.5.2 Linux虚拟机
自15.1版本以来:所有NVIDIA vGPU类型都支持Linux客户虚拟机,即:Q系列、C系列、B系列和A系列NVIDIA vGPU类型。仅限于15.0版本:Linux客户虚拟机仅支持Q系列、C系列和B系列NVIDIA vGPU类型。它们不支持A系列NVIDIA vGPU类型
2.2 使用NVIDIA vGPU的先决条件
在继续之前,请确保满足以下先决条件:
- 您拥有一个能够托管所选虚拟机监控程序和支持NVIDIA vGPU软件的NVIDIA GPU的服务器平台。
- 在您的服务器平台上安装了一块或多块支持NVIDIA vGPU软件的NVIDIA GPU。
- 如果您使用基于NVIDIA Ampere架构的GPU,则在您的服务器平台上已启用以下BIOS设置:
- VT-D/IOMMU
- SR-IOV
- 您已下载适用于所选虚拟机监控程序的NVIDIA vGPU软件包,该软件包包括以下软件:
- 适用于您的虚拟机监控程序的NVIDIA虚拟GPU管理器
- 支持的客户操作系统的NVIDIA vGPU软件图形驱动程序
- 根据软件供应商文档中的说明安装以下软件:
- 您选择的虚拟机监控程序,例如Citrix Hypervisor、Red Hat Enterprise Linux KVM、Red Hat Virtualization (RHV)或VMware vSphere Hypervisor (ESXi)
- 管理您所选虚拟机监控程序的软件,例如Citrix XenCenter管理GUI或VMware vCenter Server
- 您将与运行NVIDIA虚拟GPU的虚拟机(VM)一起使用的虚拟桌面软件,例如Citrix Virtual Apps和Desktops或VMware Horizon。
- 已创建待启用vGPU的虚拟机。
注意:本指南中涉及的所有虚拟化环境都支持一个虚拟机中有多个vgpu。
- 虚拟机已安装客户操作系统。
有关受支持的硬件和软件的信息,以及任何已知的问题NVIDIA vGPU软件的版本,请参阅您选择的管理程序的版本说明:
Virtual GPU Software R525 for Red Hat Enterprise Linux with KVM
Virtual GPU Software R525 for Citrix Hypervisor
Virtual GPU Software R525 for Microsoft Azure Stack HCI
Virtual GPU Software R525 for Ubuntu
Virtual GPU Software R525 for VMware vSphere
2.3 支持多种显示模式的GPU的模式切换
一些GPU支持显示关闭和显示启用模式,但必须在NVIDIA vGPU软件部署中以显示关闭模式使用。 下表列出的一些GPU支持多种显示模式。如表所示,一些GPU在出厂时处于显示关闭模式,而其他GPU则处于显示启用模式。
GPU | 出厂提供的模式 |
NVIDIA A40 | Display-off |
NVIDIA L40 | Display-off |
NVIDIA RTX 6000 Ada | Display enabled |
NVIDIA RTX A5000 | Display enabled |
NVIDIA RTX A5500 | Display enabled |
NVIDIA RTX A6000 | Display enabled |
出厂时处于显示关闭模式的GPU,例如NVIDIA A40 GPU,可能在其模式之前已被更改的情况下处于显示启用模式。要更改支持多种显示模式的GPU的模式,请使用displaymodeselector工具,您可以从NVIDIA开发者网站上的NVIDIA显示模式选择工具页面请求该工具。
注意:只有以下gpu支持displaymodeselector工具:
‣ NVIDIA A40
‣ NVIDIA L40
‣ NVIDIA RTX A5000
‣ NVIDIA RTX 6000 Ada
‣ NVIDIA RTX A5500
‣ NVIDIA RTX A6000
其他支持NVIDIA vGPU软件的gpu不支持显示模式选择器工具,除非另有说明,不需要显示模式切换。
2.4 切换特斯拉M60的模式或M6 GPU
Tesla M60和M6 GPU支持计算模式和图形模式。NVIDIA vGPU要求支持两种模式的GPU在图形模式下运行。最近的Tesla M60 GPU和M6 GPU以图形模式提供。但是,如果您的GPU是较旧的Tesla M60 GPU或M6 GPU,或者其模式之前已更改,那么您的GPU可能处于计算模式。
要配置Tesla M60和M6 GPU的模式,请使用随NVIDIA vGPU软件发布的gpumodeswitch工具。如果您不确定GPU处于哪种模式,请使用gpumodeswitch工具查找模式。
只有Tesla M60和M6 GPU支持gpumodeswitch工具。其他支持NVIDIA vGPU的GPU不支持gpumodeswitch工具,并且除非在支持多种显示模式的GPU的模式切换中另有说明,否则不需要进行模式切换。即使在计算模式下,Tesla M60和M6 GPU也不支持NVIDIA Virtual Compute Server vGPU类型。此外,在Citrix Hypervisor上不支持任何GPU上的vCS,更多详细信息请看NVIDIA GRID vgpu&gpumodeswitch工具使用场景及方法详解(GPU卡计算&图形模式切换)-CSDN博客
2.5 在Citrix Hypervisor安装和配置NVIDIA vGPU管理器
以下内容将引导您完成设置单个Citrix Hypervisor VM以使用NVIDIA vGPU的过程。完成该过程后,您可以为客户操作系统安装图形驱动程序,并为您使用的任何NVIDIA vGPU软件许可产品进行许可。 这些设置步骤假定您熟悉在Citrix Hypervisor Basics中介绍的Citrix Hypervisor技能。
2.5.1 在Citrix Hypervisor安装和更新NVIDIA vGPU管理器
NVIDIA虚拟GPU管理器在Citrix Hypervisor的dom0域中运行。NVIDIA虚拟GPU管理器用于Citrix Hypervisor以RPM文件和补充包的形式提供。
注意:NVIDIA虚拟GPU管理器和客户VM驱动程序必须兼容。如果您将vGPU管理器更新到与客户VM驱动程序不兼容的版本,客户VM将以禁用vGPU的状态启动,直到其客户vGPU驱动程序更新为兼容版本。有关更多详细信息,请参阅Citrix Hypervisor版本的虚拟GPU软件发布说明。
2.5.1.1 在Citrix Hypervisor安装rpm包
安装前需要将RPM文件拷贝到Citrix Hypervisor物理节点上
1、使用命令安装包
[root@xenserver ~]# rpm -iv NVIDIA-vGPU-NVIDIA-vGPUCitrixHypervisor-8.2-525.125.03.x86_64.rpm
Preparing packages for installation...
NVIDIA-vGPU-NVIDIA-vGPU-CitrixHypervisor-8.2-525.125.03
[root@xenserver ~]#
2、重启 Citrix Hypervisor平台
[root@xenserver ~]# shutdown –r now
Broadcast message from root (pts/1) (Fri Apr 14 14:24:11 2023):
The system is going down for reboot NOW!
[root@xenserver ~]#
2.5.1.2 在Citrix Hypervisor更新rpm包
如果系统上已安装现有的NVIDIA虚拟GPU管理器,并且您希望要升级,请执行以下步骤:
1. 关闭所有使用NVIDIA vGPU的虚拟机。
2. 使用rpm命令的-U选项安装新包,从先前安装的软件包:
[root@xenserver ~]# rpm -Uv NVIDIA-vGPU-NVIDIA-vGPUCitrixHypervisor-8.2-525.125.03.x86_64.rpm
Preparing packages for installation...
NVIDIA-vGPU-NVIDIA-vGPU-CitrixHypervisor-8.2-525.125.03
[root@xenserver ~]#
使用命令NVIDIA Virtual GPU Manager查询当前安装的NVIDIA Virtual GPU Manager包的版本
RPM -q命令:
[root@xenserver ~]# rpm –q NVIDIA-vGPU-NVIDIA-vGPUCitrixHypervisor-8.2-525.125.03
[root@xenserver ~]#
3、重启 Citrix Hypervisor平台
[root@xenserver ~]# shutdown –r now
Broadcast message from root (pts/1) (Fri Apr 14 14:24:11 2023):
The system is going down for reboot NOW!
[root@xenserver ~]#
2.5.1.3 使用Citrix Hypervisor安装或更新补充包
XenCenter支持在Citrix Hypervisor 主机上安装或更新补充包,NVIDIA vGPU管理器补充包作为ISO提供。
1. 从“工具”菜单中选择“安装更新”。
2. 在完成开始之前部分的说明后,单击Next。
3. 单击“选择更新”部分上的“从磁盘选择更新或补充包”并打开NVIDIA的Citrix Hypervisor补充包ISO。
在XenCenter中选择NVIDIA vGPU管理器更新包
4. 在Select Update部分单击Next。
5. 在Select Servers部分中,选择所有Citrix Hypervisor主机
应该安装补充包,然后单击下一步。
6. 一旦补充包被上传到,点击上传部分的下一步
所有Citrix Hypervisor主机。
7. 在Prechecks部分单击Next。
8. 在“更新模式”部分单击“安装更新”。
9. 单击Install Update部分上的Finish。
NVIDIA vGPU管理器成功安装更新包
2.5.1.4 验证NVIDIA vGPU软件包在Citrix Hypervisor上的安装
在Citrix Hypervisor平台重新启动后,验证NVIDIA vGPU软件包在Citrix Hypervisor上的安装。
1、通过检查内核加载模块列表中的NVIDIA内核驱动程序,验证NVIDIA vGPU软件包是否已正确安装和加载。
[root@xenserver ~]# lsmod | grep nvidia
nvidia 9522927 0
i2c_core 20294 2 nvidia,i2c_i801
[root@xenserver ~]#
2、通过运行nvidia-smi命令,验证NVIDIA内核驱动程序是否能够成功与系统中的NVIDIA物理GPU进行通信。
nvidia-smi命令的详细信息在NVIDIA系统管理接口nvidia-smi中进行了描述。运行nvidia-smi命令应生成您平台中GPU的列表。
[root@xenserver ~]# nvidia-smi
Fri Jul 14 18:46:50 2023
+------------------------------------------------------+
| NVIDIA-SMI 525.125.03 Driver Version: 525.125.03 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla M60 On | 00000000:05:00.0 Off | Off |
| N/A 25C P8 24W / 150W | 13MiB / 8191MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla M60 On | 00000000:06:00.0 Off | Off |
| N/A 24C P8 24W / 150W | 13MiB / 8191MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla M60 On | 00000000:86:00.0 Off | Off |
| N/A 25C P8 25W / 150W | 13MiB / 8191MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla M60 On | 00000000:87:00.0 Off | Off |
| N/A 28C P8 24W / 150W | 13MiB / 8191MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
[root@xenserver ~]#
2.5.2 配置带有虚拟GPU的Citrix Hypervisor虚拟机
为了支持计算或图形密集型的应用程序和工作负载,您可以向单个虚拟机添加多个vGPU。
有关哪些Citrix Hypervisor版本和NVIDIA vGPU支持将多个vGPU分配给虚拟机的详细信息,请参阅Citrix Hypervisor的虚拟GPU软件发布说明。
Citrix Hypervisor支持使用XenCenter或在Citrix Hypervisor dom0 shell中运行的xe命令行工具配置和管理虚拟GPU。使用XenCenter的基本配置在以下部分中进行了描述。使用xe进行命令行管理的详细信息请参阅Citrix Hypervisor vGPU管理。
注意:如果您使用的是Citrix Hypervisor 8.1或更高版本,并且需要分配插件配置参数,请按照创建vGPU使用xe中的说明使用xe命令创建vGPU。
- 确保虚拟机已关闭电源。
- 在XenCenter中右键单击虚拟机,选择属性以打开虚拟机的属性,然后选择GPU属性。
可用的GPU类型列在GPU类型下拉列表中:
Using Citrix XenCenter to configure a VM with a vGPU
在配置了带有vGPU的Citrix Hypervisor虚拟机之后,可以从XenCenter启动虚拟机,也可以在dom0 shell中使用xe vm-start命令启动虚拟机。您可以在XenCenter中查看虚拟机的控制台。
虚拟机启动后,按照《安装NVIDIA vGPU软件图形驱动程序》中的说明安装NVIDIA vGPU软件图形驱动程序。
2.5.3 在Citrix Hypervisor上设置vGPU插件参数
vGPU的插件参数控制vGPU的行为,例如每秒帧数限制器(FRL)配置或是否启用vGPU的控制台虚拟网络计算(VNC)。分配了vGPU的虚拟机将使用这些参数启动。如果为分配给同一虚拟机的多个vGPU设置了参数,则该虚拟机将使用分配给每个vGPU的参数启动。
对于要设置插件参数的每个vGPU,请在Citrix Hypervisor dom0域中的命令shell中执行以下任务。
获取宿主机上所有虚拟机的UUID,并使用命令的输出来识别分配了vGPU的虚拟机。
[root@xenserver ~] xe vm-list
...
uuid ( RO) : 7f6c855d-5635-2d57-9fbc-b1200172162f
name-label ( RW): RHEL8.3
power-state ( RO): running
获取宿主机上所有vGPU的UUID,并根据分配了vGPU的虚拟机的UUID确定vGPU的UUID。
[root@xenserver ~] xe vgpu-list
...
uuid ( RO) : d15083f8-5c59-7474-d0cb-fbc3f7284f1b
vm-uuid ( RO): 7f6c855d-5635-2d57-9fbc-b1200172162f
device ( RO): 0
gpu-group-uuid ( RO): 3a2fbc36-827d-a078-0b2f-9e869ae6fd93
使用xe命令设置您想要设置的每个vGPU插件参数。
xe vgpu-param-set uuid=vgpu-uuid extra_args='parameter=value'
vgpu-uuid:您在上一步中获取的vGPU的UUID。
parameter:您要设置的vGPU插件参数的名称。
value:您要将vGPU插件参数设置为的值。
例如,将enable_uvm vGPU插件参数设置为1,用于具有UUID d15083f8-5c59-7474-d0cb-fbc3f7284f1b的vGPU。此参数设置启用了vGPU的统一内存。
2.6 在Linux KVM上安装NVIDIA vGPU 管理软件包
NVIDIA vGPU软件适用于基于Linux内核的虚拟机(KVM)(Linux KVM),仅可与支持的Linux KVM虚拟化程序版本一起使用。有关支持的Linux KVM虚拟化程序版本的详细信息,请参阅适用于通用Linux与KVM的虚拟GPU软件发布说明。
注意:如果您正在使用Red Hat Enterprise Linux KVM,请按照《为Red Hat Enterprise Linux KVM或RHV安装和配置NVIDIA虚拟GPU管理器》中的说明操作。
在安装Linux KVM的虚拟GPU管理器软件包之前,请确保满足以下先决条件:在Linux KVM服务器上安装了以下软件包:GNU编译器集合(GCC)的x86_64版本、Linux内核头文件、将软件包文件复制到Linux KVM服务器文件系统中的目录。如果存在用于NVIDIA显卡的Nouveau驱动程序,请在安装软件包之前将其禁用。
1、上传软件包到KVM服务器上,执行以下命令进行安装
# cd package-file-directory
# chmod +x NVIDIA-Linux-x86_64-390.42-vgpu-kvm.run
# sudo sh./NVIDIA-Linux-x86_64-390.42-vgpu-kvm.run
# systemctl reboot
2.7 在Ubuntu上安装配置NVIDIA vGPU管理软件包
警告:运行vGPU的虚拟机(VMs)无法获取VM控制台的输出。在配置vGPU之前,请确保您已安装了替代访问VM的方法(例如VNC服务器)。
完成该过程后,您可以为宿主操作系统安装图形驱动程序,并为您使用的任何NVIDIA vGPU软件许可产品进行许可。
2.7.1 在Ubuntu上安装NVIDIA vGPU管理软件包
NVIDIA为Ubuntu提供的NVIDIA虚拟GPU管理器是一个Debian软件包(.deb文件)。
注意:NVIDIA虚拟GPU管理器和虚拟机驱动程序必须兼容。如果您将vGPU管理器更新到与虚拟机驱动程序不兼容的版本,虚拟机将以禁用vGPU的状态启动,直到它们的虚拟机vGPU驱动程序更新到兼容的版本为止。请参阅适用于Ubuntu的虚拟GPU软件发布说明以获取更多详细信息
1、上传软件并使用以下命令进行安装后,重启服务器
# apt install ./nvidia-vgpu-ubuntu-525.125.03_amd64.deb
# systemctl reboot
2、验证
# lsmod | grep vfio
nvidia_vgpu_vfio 27099 0
nvidia 12316924 1 nvidia_vgpu_vfio
vfio_mdev 12841 0
mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
vfio_iommu_type1 22342 0
vfio 32331 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
#
3、确认libvirtd service服务是否运行
# service libvirtd status
4、使用nvidia-smi验证内核驱动程序是否可以与GPU正常通信
# nvidia-smi
Fri Jul 14 18:46:50 2023
+------------------------------------------------------+
| NVIDIA-SMI 525.125.03 Driver Version: 525.125.03 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla M60 On | 0000:85:00.0 Off | Off |
| N/A 23C P8 23W / 150W | 13MiB / 8191MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla M60 On | 0000:86:00.0 Off | Off |
| N/A 29C P8 23W / 150W | 13MiB / 8191MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P40 On | 0000:87:00.0 Off | Off |
| N/A 21C P8 18W / 250W | 53MiB / 24575MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
#
2.8 在VMware vSphere上安装配置NVIDIA vGPU管理软件包
您可以使用NVIDIA虚拟GPU管理器为VMware vSphere设置VMware vSphere虚拟机,以使用NVIDIA vGPU或VMware vSGA。vGPU管理器vSphere软件组件在一个组件中提供vSGA和vGPU功能。
注意:某些服务器,例如Dell R740,如果服务器上的SR-IOV SBIOS设置被禁用,则不会配置SR-IOV功能。如果您在这样的服务器上使用Tesla T4 GPU与VMware vSphere,则必须确保服务器上的SR-IOV SBIOS设置已启用。
然而,在任何服务器硬件上,请勿在VMware vCenter Server中为Tesla T4 GPU启用SR-IOV。如果在VMware vCenter Server中为T4启用了SR-IOV,VMware vCenter Server会将GPU的状态列为需要重启。您可以忽略此状态消息。
2.8.1 在VMware vSphere上安装NVIDIA vGPU管理软件包
NVIDIA虚拟GPU管理器运行在ESXi主机上。它以ZIP压缩包的形式分发多个软件组件。
NVIDIA虚拟GPU管理器的软件组件如下:
‣ NVIDIA vGPU虚拟化程序主机驱动程序的软件组件
‣ NVIDIA GPU管理守护进程的软件组件
您可以通过以下方式之一安装这些软件组件:
‣ 将软件组件复制到ESXi主机,然后按照《在VMware vSphere上安装NVIDIA虚拟GPU管理器》的说明进行安装 ‣ 按照VMware vSphere文档中的《手动导入补丁》的说明手动导入软件组件
注意:NVIDIA虚拟GPU管理器和虚拟机驱动程序必须兼容。如果您将vGPU管理器更新到与虚拟机驱动程序不兼容的版本,虚拟机将以禁用vGPU的状态启动,直到它们的虚拟机vGPU驱动程序更新到兼容的版本为止。请参阅适用于VMware vSphere的虚拟GPU软件发布说明以获取更多详细信息。
1、上传软件包到exsi主机
2、设置exsi主机为维护模式
$ esxcli system maintenanceMode set –-enable true
3、安装驱动程序
$ esxcli software vib install -d /vmfs/volumes/datastore/host-driver-component.zip
4、安装vGPU管理软件
$ esxcli software vib install -d /vmfs/volumes/datastore/gpu-management-daemoncomponent.
zip
host-driver-component
包含NVIDIA vGPU虚拟化程序主机驱动程序的软件组件文件的名称。确保指定从下载的ZIP压缩包中提取的文件。例如,对于VMware vSphere 7.0.2,host-driver-component是NVD-VMware-x86_64-525.125.03-1OEM.702.0.0.17630552-bundle-build-number。
gpu-management-daemon-component
包含NVIDIA GPU管理守护进程的软件组件文件的名称。确保指定从下载的ZIP压缩包中提取的文件。例如,对于VMware vSphere 7.0.2,gpu-management-daemon-component是VMW-esx-7.0.2-nvd-gpu-mgmt-daemon-1.0-0.0.0001。
5、退出维护模式
$ esxcli system maintenanceMode set –-enable false
6、重启exsi主机
$ reboot
2.8.2 在VMware vSphere上更新NVIDIA vGPU管理软件包
如果您想在已经安装了现有版本的系统上安装新版本的NVIDIA虚拟GPU管理器,请更新NVIDIA虚拟GPU管理器。要更新vGPU管理器VIB,您需要通过ESXi Shell或SSH访问ESXi主机。有关如何为ESXi主机启用ESXi Shell或SSH的说明,请参考VMware的文档。
注意:在进行vGPU管理器更新之前,请确保所有虚拟机已关闭,并且将ESXi主机置于维护模式。有关如何将ESXi主机置于维护模式的说明,请参考VMware的文档。
1、停止NVIDIA GPU管理进程
$ /etc/init.d/nvdGpuMgmtDaemon stop
2、更新exsi主机驱动
$ esxcli software vib update -d /vmfs/volumes/datastore/host-driver-component.zip
3、更新GPU管理软件
$ esxcli software vib update -d /vmfs/volumes/datastore/gpu-management-daemoncomponent.
zip
4、退出维护模式并重启exsi主机
2.8.3 验证安装是否成功
exsi主机重启之后,需要验证vGPU管理软件是否成功安装
1、检查内核驱动是否正常加载
[root@esxi:~] vmkload_mod -l | grep nvidia
nvidia 5 8420
2、如果驱动列表没有输出或加载错误,检查dmesg是否有驱动加载错误的报告或日志
3、确认vGPU管理进程是否启动
$ /etc/init.d/nvdGpuMgmtDaemon status
4、使用nvidia-smi查看系统中所有GPU卡
[root@esxi:~] nvidia-smi
2.8.4 在VMware vSphere上管理vGPU软件进程
1、启动vGPU管理进程
$ /etc/init.d/nvdGpuMgmtDaemon start
2、停止vGPU管理进程
$ /etc/init.d/nvdGpuMgmtDaemon stop
3、查看vGPU管理进程状态
$ /etc/init.d/nvdGpuMgmtDaemon status
2.8.5 在VMware vSphere中配置带vGPU的VMware vMotion
NVIDIA vGPU软件支持vGPU迁移,包括VMware vMotion和挂起-恢复,适用于配置了vGPU的虚拟机。要启用带vGPU的VMware vMotion,必须启用一个高级的vCenter Server设置。然而,配置了vGPU的虚拟机的挂起-恢复功能默认是启用的。
有关支持vGPU迁移的VMware vSphere版本、NVIDIA GPU和客户操作系统版本的详细信息,请参阅适用于VMware vSphere的虚拟GPU软件发布说明。
在为ESXi主机配置带vGPU的VMware vMotion之前,请确保在主机上安装了当前的NVIDIA虚拟GPU管理器用于VMware vSphere软件包。
- 使用vSphere Web Client登录到vCenter Server。
- 在主机和集群视图中,选择vCenter Server实例。
注意:确保选择的是vCenter Server实例,而不是vCenter Server虚拟机。 - 点击“配置”选项卡。
- 在“设置”部分,选择“高级设置”,然后点击“编辑”。
- 在打开的“编辑高级vCenter Server设置”窗口中,在搜索字段中输入“vGPU”。
- 当出现vgpu.hotmigrate.enabled设置时,选择“启用”选项,然后点击“确定”。
2.8.6 在VMware vSphere中更改默认图形类型
VMware vSphere的vGPU管理器VIB在一个VIB中提供了vSGA和vGPU功能。安装此VIB后,默认图形类型为“共享”,这提供了vSGA功能。要为VMware vSphere中的虚拟机启用vGPU支持,您必须将默认图形类型更改为“共享直接”。
如果不更改默认图形类型,分配了vGPU的虚拟机将无法启动,并显示以下错误消息:
“父资源池中可用的图形资源量不足以进行操作。”
注意:在配置vGPU之前,请更改默认图形类型。对于运行vGPU的虚拟机,VMware vSphere Web Client中的VM控制台输出不可用。在更改默认图形类型之前,请确保ESXi主机正在运行,并且主机上的所有虚拟机已关闭。
1、使用vSphere Web Client登录到vCenter Server。
2、在导航树中,选择您的ESXi主机,然后点击“配置”选项卡。
3、从菜单中选择“图形”,然后点击“主机图形”选项卡。
4、在“主机图形”选项卡上,点击“编辑”。
共享默认图形类型
5、在打开的“编辑主机图形设置”对话框中,选择“共享直接”,然后点击“确定”。
注意:在此对话框中,您还可以更改启用vGPU的虚拟机的分配方案。有关更多信息,请参阅《在VMware vSphere上修改GPU分配策略》。
点击“确定”后,默认图形类型将更改为“共享直接”。
6、点击“图形设备”选项卡,以验证您希望配置vGPU的每个物理GPU的配置类型。
每个物理GPU的配置类型必须为“共享直接”。对于任何配置类型为“共享”的物理GPU,请按以下步骤更改配置类型:
a). 在“图形设备”选项卡上,选择物理GPU,然后点击“编辑”图标。
b). 在打开的“编辑图形设备设置”对话框中,选择“共享直接”,然后点击“确定”。
7、 如果需要,重启ESXi主机或停止并重启ESXi主机上的Xorg服务和nvhostengine。要停止并重启Xorg服务和nv-hostengine,请执行以下步骤:
a). 仅适用于VMware vSphere 7.0 Update 1之前的版本:停止Xorg服务。Xorg服务在NVIDIA vGPU模式下的图形设备中不是必需的。
b). 停止nv-hostengine。
[root@esxi:~] nv-hostengine -t
c). 等待1秒以允许nv-hostengine停止。
d). 启动nv-hostengine。
[root@esxi:~] nv-hostengine -d
e). 仅适用于VMware vSphere 7.0 Update 1之前的版本:启动Xorg服务。Xorg服务在NVIDIA vGPU模式下的图形设备中不是必需的。
[root@esxi:~] /etc/init.d/xorg start
8、在VMware vCenter Web UI的“图形设备”选项卡中,确认每个物理GPU的活动类型和配置类型均为“Shared Direct”。
2.8.7 在VMware vSphere 虚拟机VM上 vGPU
为了支持计算或图形密集型的应用程序和工作负载,您可以向单个虚拟机添加多个vGPU。
有关哪些VMware vSphere版本和NVIDIA vGPU支持将多个vGPU分配给虚拟机的详细信息,请参阅VMware vSphere发行说明中的虚拟GPU软件。
注意:在运行vGPU的虚拟机中,VMware vSphere Web客户端中的VM控制台输出不可用。在配置vGPU之前,请确保您已安装了替代访问虚拟机的方法(例如VMware Horizon或VNC服务器)。一旦从虚拟机配置中删除了vGPU参数,vSphere Web客户端中的VM控制台将再次变为活动状态。
注意:如果您正在配置一个使用VMware vSGA的虚拟机,请忽略此任务。
如何配置具有vGPU的vSphere虚拟机取决于您的VMware vSphere版本,如以下主题所述:
- 配置具有NVIDIA vGPU的vSphere 8虚拟机
- 配置具有NVIDIA vGPU的vSphere 7虚拟机
配置了具有vGPU的vSphere虚拟机后,启动该虚拟机。在此vGPU版本中,vSphere Web客户端中的VM控制台不受支持。因此,请使用VMware Horizon或VNC来访问虚拟机的桌面。
虚拟机启动后,按照《安装NVIDIA vGPU软件图形驱动程序》中的说明安装NVIDIA vGPU软件图形驱动程序。
2.8.7.1 配置具有NVIDIA vGPU的vSphere 8虚拟机
1. 打开vCenter的Web界面。
2. 在vCenter的Web界面中,右键单击虚拟机,选择“Edit Settings”。
3. 在弹出的“Edit Settings”窗口中,配置需要添加的vgpu VM。将需要添加的vGPU添加到虚拟机中。
a).在“ADD NEW DEVICE”菜单中选择“PCI DEVICE”。
b).在打开的“Device Selection”窗口中选择需要的vGPU类型配置并单击SELECT。
注:NVIDIA vGPU软件不支持VMware vSphere上的vCS。因此,在“设备选择”窗口中不支持选择c系列vGPU类型。
4. 回到Edit Settings窗口,单击OK。
2.8.7.2 配置具有NVIDIA vGPU的vSphere 7虚拟机
如果要向单个虚拟机添加多个vGPU,请为要添加到虚拟机的每个vGPU执行此任务。
1. 打开vCenter的Web界面。
2. 在vCenter的Web界面中,右键单击虚拟机,选择“Edit Settings”。
3. 选择“虚拟硬件”页签。
4. 2 .在“新建设备”列表中选择“共享PCI设备”,单击“添加”。
PCI设备字段应该自动填充NVIDIA GRID vGPU。
5. 在“GPU配置文件”下拉菜单中选择需要使用的vGPU类型配置并单击OK。
注:NVIDIA vGPU软件不支持VMware vSphere上的vCS。因此,“GPU配置文件”下拉菜单中不支持选择c系列vGPU的类型菜单。
6. 请确保运行vGPU的虚拟机的内存已预留。
a).在vCenter的Web界面上选择“编辑虚拟机设置”。
b).展开“Memory”区域,单击“Reserve all guest Memory (all locked)”。
2.8.8 在VMware vSphere上设置vGPU插件参数
vGPU的插件参数控制vGPU的行为,例如每秒帧速率限制器(FRL)配置或是否启用vGPU的虚拟网络控制台(VNC)。分配了vGPU的虚拟机将使用这些参数启动。如果为分配给同一虚拟机的多个vGPU设置了参数,则该虚拟机将使用分配给每个vGPU的参数启动。
确保已关闭分配了vGPU的虚拟机。
对于要设置插件参数的每个vGPU,请在vSphere Client中执行以下任务。vGPU插件参数是高级VM属性中的PCI直通配置参数。
- 在vSphere Client中,浏览到已分配vGPU的虚拟机。
- 右键单击虚拟机,选择“编辑设置”。
- 在“编辑设置”窗口中,点击“VM选项”选项卡。
- 从高级下拉列表中,选择“编辑配置”。
- 在“配置参数”对话框中,点击“添加行”。
- 在“名称”字段中,输入参数名称
pciPassthruvgpu-id.cfg.parameter
,在“值”字段中输入参数值,然后点击“确定”。vgpu-id
标识分配给虚拟机的vGPU的正整数。对于分配给虚拟机的第一个vGPU,vgpu-id
为0。例如,如果为分配给虚拟机的两个vGPUs设置插件参数,则设置以下参数:
pciPassthru0.cfg.parameter
pciPassthru1.cfg.parameter
parameter
您要设置的vGPU插件参数的名称。例如,启用统一内存的vGPU插件参数的名称为enable_uvm
。要为分配给虚拟机的两个vGPUs启用统一内存,将pciPassthru0.cfg.enable_uvm
和pciPassthru1.cfg.enable_uvm
设置为1。
2.9 配置Linux与KVM Hypervisor的vGPU管理器
NVIDIA vGPU软件支持以下带有KVM hypervisor的Linux系统:Red Hat Enterprise Linux与KVM以及Ubuntu。
2.9.1 在具有KVM Hypervisor的Linux系统上获取GPU的BDF和域
有时,在将物理GPU配置为与NVIDIA vGPU软件一起使用时,您必须找出sysfs文件系统中表示GPU的目录。该目录由GPU的域、总线、插槽和功能标识。
1. 获取物理GPU的PCI BDF (device bus/device/function)。
# lspci | grep NVIDIA
06:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M10] (rev
a1)
07:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M10] (rev
a1)
2. 从GPU的PCI设备BDF中获取GPU的完整标识符。
# virsh nodedev-list --cap pci| grep transformed-bdf
transformed-bdf
图形处理器的PCI设备BDF,冒号和句号替换为下划线,例如“06_00_0”。
本例获取PCI设备为BDF 06:00.0的GPU的完整标识符。
# virsh nodedev-list --cap pci| grep 06_00_0
pci_0000_06_00_0
3. 从GPU的完整标识符中获取GPU的域、总线、插槽和功能。
virsh nodedev-dumpxml full-identifier| egrep 'domain|bus|slot|function'
完整标识符
您在上一步中获取的GPU的完整标识符,例如pci_0000_06_00_0
。
此示例获取具有PCI设备BDF 06:00.0的GPU的域、总线、插槽和功能。
示例
# virsh nodedev-dumpxml pci_0000_06_00_0| egrep 'domain|bus|slot|function'
<domain>0x0000</domain>
<bus>0x06</bus>
<slot>0x00</slot>
<function>0x0</function>
<address domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
2.9.2 在Linux KVM Hypervisor上创建vGPU
2.9.2.1 在Linux KVM管理程序上创建传统Legacy的NVIDIA vGPU
Legacy的NVIDIA vGPU不支持SR-IOV.
1. 进入物理GPU的“mdev_supported_types”目录。
cd /sys/class/mdev_bus/domain\:bus\:slot.function/mdev_supported_types/
示例
# cd /sys/bus/pci/devices/0000\:06\:00.0/mdev_supported_types/
2. 找出mdev_supported_types的哪个子目录包含注册创建的vGPU类型的信息。
# grep -l "vgpu-type" nvidia-*/name
示例
# grep -l "M10-2Q" nvidia-*/name
nvidia-41/name
3. 确认可以在物理GPU上创建vGPU类型的实例。
# cat subdirectory/available_instances
示例
# cat nvidia-41/available_instances
4
4.生成一个格式正确的通用唯一标识符(UUID)用于vGPU
# uuidgen
aa618089-8b16-4d01-a136-25a0f3c73123
5.将您在上一步中获得的UUID写入中的create文件要创建的vGPU类型的注册信息目录
# echo "uuid"> subdirectory/create
此示例创建了一个具有UUID的M10-2Q vGPU类型的实例
aa618089-8b16-4d01-a136-25a0f3c73123.
# echo "aa618089-8b16-4d01-a136-25a0f3c73123" > nvidia-41/create
6.使您创建的代表vGPU的mdev设备文件持久化
# mdevctl define --auto --uuid uuid
7.确认vGPU已创建。
a)确认/sys/bus/mdev/devices/目录包含mdev设备文件对于vGPU。
# ls -l /sys/bus/mdev/devices/
total 0
lrwxrwxrwx. 1 root root 0 Nov 24 13:33 aa618089-8b16-4d01-a136-25a0f3c73123 -
> ../../../devices/
pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:09.0/0000:06:00.0/
aa618089-8b16-4d01-a136-25a0f3c73123
b)如果您的版本包含mdevctl命令,请在上列出活动的中介设备管理程序主机。
# mdevctl list
aa618089-8b16-4d01-a136-25a0f3c73123 0000:06:00.0 nvidia-41
2.9.2.2 在带有KVM Hypervisor的Linux上创建支持SR-IOV的NVIDIA vGPU
支持SR-IOV的NVIDIA vGPU驻留在支持SR-I0V的物理GPU上,
例如基于NVIDIA Ampere架构的GPU。
1.在sysfs文件系统中启用物理GPU的虚拟功能。
注:
在执行此步骤之前,请确保GPU未被任何其他人使用进程,如CUDA应用程序、监视应用程序或nvidia-smi命令 sysfs文件系统中物理GPU的虚拟功能已禁用在管理程序主机重新启动后,或者如果驱动程序被重新加载或升级。
仅使用NVIDIA vGPU软件为此提供的自定义脚本sriov管理目的。不要试图通过任何其他方式启用GPU的虚拟功能。
# /usr/lib/nvidia/sriov-manage -e domain:bus:slot.function
该示例启用了具有域00、总线41和总线42的GPU的虚拟功能,插槽0000和函数0。
# /usr/lib/nvidia/sriov-manage -e 00:41:0000.0
获取域、总线、插槽和上可用虚拟函数的功能GPU。
# ls -l /sys/bus/pci/devices/domain\:bus\:slot.function/ | grep virtfn
GPU的域、总线、插槽和功能,不带0x前缀。此示例显示了具有插槽00、总线的物理GPU的此命令的输出41、域0000和函数0。
ls -l /sys/bus/pci/devices/0000:41:00.0/ | grep virtfn
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn0 -> ../0000:41:00.4
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn1 -> ../0000:41:00.5
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn10 -> ../0000:41:01.6
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn11 -> ../0000:41:01.7
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn12 -> ../0000:41:02.0
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn13 -> ../0000:41:02.1
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn14 -> ../0000:41:02.2
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn15 -> ../0000:41:02.3
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn16 -> ../0000:41:02.4
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn17 -> ../0000:41:02.5
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn18 -> ../0000:41:02.6
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn19 -> ../0000:41:02.7
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn2 -> ../0000:41:00.6
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn20 -> ../0000:41:03.0
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn21 -> ../0000:41:03.1
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn22 -> ../0000:41:03.2
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn23 -> ../0000:41:03.3
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn24 -> ../0000:41:03.4
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn25 -> ../0000:41:03.5
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn26 -> ../0000:41:03.6
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn27 -> ../0000:41:03.7
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn28 -> ../0000:41:04.0
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn29 -> ../0000:41:04.1
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn3 -> ../0000:41:00.7
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn30 -> ../0000:41:04.2
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn31 -> ../0000:41:04.3
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn4 -> ../0000:41:01.0
lrwxrwxrwx. 1 root root 0 Jul 16 04:42 virtfn5 -> ../0000:41:01.1
3.选择要在其上创建vGPU的可用虚拟函数,并注意它的域、总线、插槽和功能。
4. 切换到 mdev_supported_types 目录,以获取您要使用的虚拟功能创建vGPU。
# cd /sys/class/mdev_bus/domain\:bus\:vf-slot.v-function/mdev_supported_types/
此示例将第一个虚拟机的 mdev_supported_types 目录更改为域为0000、总线为41的GPU的函数(virtfn0)。第一个虚拟函数 (virtfn0) 具有插槽 00 和函数 4。
# cd /sys/class/mdev_bus/0000\:41\:00.4/mdev_supported_types
5. 找出 mdev_supported_types 的哪个子目录包含注册要创建的 vGPU 类型的信息。
# grep -l "vgpu-type" nvidia-*/name
此示例显示,A40-2Q vGPU类型的注册信息包含在mdev_supported_types的nvidia-558子目录中
# grep -l "A40-2Q" nvidia-*/name
nvidia-558/name
6. 请确认是否可以在virtual功能上创建vGPU类型的实例。
# cat subdirectory/available_instances
示例说明在虚拟机上创建虚拟gpu类型为A40-2Q的实例虚拟函数。
# cat nvidia-558/available_instances
1
7. 为vGPU生成格式正确的UUID (universally unique identifier)。
# uuidgen
aa618089-8b16-4d01-a136-25a0f3c73123
8.将您在上一步获得的UUID写入您想要创建的vGPU类型的注册信息目录中的create文件。
# echo "uuid"> subdirectory/create
本例使用UUID创建A40-2Q vGPU类型的实例aa618089-8b16-4d01-a136-25a0f3c73123。
# echo "aa618089-8b16-4d01-a136-25a0f3c73123" > nvidia-558/create
9. 仅使用分时片vgpu:使用您创建的mdev设备文件来表示vGPU持久的。
# mdevctl define --auto --uuid uuid
注意:
- 如果您使用的是支持SR-IOV的GPU,则只有在重新启动任何配置有vGPU的虚拟机之前执行步骤1,mdev设备文件才能在主机重启后保留。
- 您无法使用mdevctl命令使MIG支持的vGPU的mdev设备文件保持持久性。因为在主机重启后,MIG实例将不再可用,所以MIG支持的vGPU的mdev设备文件不会被保留。
- 并非所有带有KVM Hypervisor的Linux发行版都包含mdevctl命令。如果您的发行版不包含mdevctl命令,您可以使用操作系统的标准功能在主机启动时自动重新创建该设备文件。例如,您可以编写一个在主机重启时执行的自定义脚本。
确认vGPU已创建。
a). 确认/sys/bus/mdev/devices/目录中包含指向mdev设备文件的符号链接。
# ls -l /sys/bus/mdev/devices/
total 0
lrwxrwxrwx. 1 root root 0 Jul 16 05:57 aa618089-8b16-4d01-a136-25a0f3c73123
-> ../../../devices/pci0000:40/0000:40:01.1/0000:41:00.4/aa618089-8b16-4d01-
a136-25a0f3c73123
b). 如果您的发行版包含mdevctl命令,请列出虚拟化主机上的活动介导设备。
#mdevctl list
aa618089-8b16-4d01-a136-25a0f3c73123 0000:06:00.0 nvidia-558
2.9.3 为Linux KVM虚拟机添加一个或多个vGPU
为了支持计算或图形密集型的应用程序和工作负载,您可以向单个虚拟机添加多个vGPU。有关哪些虚拟化管理程序版本和NVIDIA vGPU支持将多个vGPU分配给虚拟机的详细信息,请参阅《带有KVM的Red Hat Enterprise Linux虚拟GPU软件发布说明》和《Ubuntu虚拟GPU软件发布说明》。
确保满足以下先决条件:
- 您要添加vGPU的虚拟机已关闭。
- 您要添加的vGPU已按照《在Linux上使用KVM Hypervisor创建NVIDIA vGPU》中所述创建。
您可以使用以下任一工具向带有KVM Hypervisor的Linux虚拟机添加vGPU:
- virsh命令
- QEMU命令行
向带有KVM Hypervisor的Linux虚拟机添加vGPU后,启动虚拟机。
# virsh start vm-name
2.9.3.1 使用virsh命令为Linux KVM虚机添加一个或多个vGPU
1. 在“virsh”中打开待添加vGPU的虚拟机XML文件。
# virsh edit vm-name
2. 对于每个需要添加到虚拟机中的vGPU,需要添加一个设备表项,表项的形式为“。”在source元素中的address元素中添加vGPU到来宾虚拟机。
<device>
...
<hostdev mode='subsystem' type='mdev' model='vfio-pci'>
<source>
<address uuid='uuid'/>
</source>
</hostdev>
</device>
uuid
创建vGPU时分配给vGPU的UUID。本例为虚拟gpu添加一条UUID为a618089-8b16-4d01-的设备表项a136-25a0f3c73123。
<device>
...
<hostdev mode='subsystem' type='mdev' model='vfio-pci'>
<source>
<address uuid='a618089-8b16-4d01-a136-25a0f3c73123'/>
</source>
</hostdev>
</device>
本例为两个vgpu添加设备表项,uuid如下:
‣ c73f1fa6-489e-4834-9476-d70dabd98c40
‣ 3b356d38-854e-48be-b376-00c72c7d119c
<device>
...
<hostdev mode='subsystem' type='mdev' model='vfio-pci'>
<source>
<address uuid='c73f1fa6-489e-4834-9476-d70dabd98c40'/>
</source>
</hostdev>
<hostdev mode='subsystem' type='mdev' model='vfio-pci'>
<source>
<address uuid='3b356d38-854e-48be-b376-00c72c7d119c'/>
</source>
</hostdev>
</device>
3. 可选:添加一个video元素,该元素包含一个model元素,其中的类型属性设置为none。
<video>
<model type='none'/>
</video>
添加这个video元素可以防止libvirt添加的默认视频设备正在加载虚拟机。如果不添加此视频元素,则必须配置Xorg服务器或您的远程处理解决方案只加载您添加的vGPU设备不是默认的视频设备。
2.9.3.2 使用QEMU命令行为Linux KVM虚拟机添加一个或多个vGPU
对于每个添加到虚拟机的vGPU,需要在“-device”选项中添加一个
以下格式:
-device vfio-pci,sysfsdev=/sys/bus/mdev/devices/vgpu-uuid
通过-uuid选项指定虚拟机,具体操作如下:
-uuid vm-uuid
本节以添加UUID为“aa618089-8b16-4d01-a136-25a0f3c73123”的vGPU为例
UUID为ebb10a6e-7ac9-49aa-af92-f56bb8c65893的虚拟机。
-device vfio-pci,sysfsdev=/sys/bus/mdev/devices/aa618089-8b16-4d01-
a136-25a0f3c73123 \
-uuid ebb10a6e-7ac9-49aa-af92-f56bb8c65893
本例为添加两个vgpu设备表项,uuid如下:
‣ 676428a0-2445-499f-9bfd-65cd4a9bd18f
‣ 6c5954b8-5bc1-4769-b820-8099fe50aaba
将表项添加到UUID为“ec5e8ee0-657c-4db6-8775-da70e332c67e”的虚拟机上。
-device vfio-pci,sysfsdev=/sys/bus/mdev/
devices/676428a0-2445-499f-9bfd-65cd4a9bd18f \
-device vfio-pci,sysfsdev=/sys/bus/mdev/devices/6c5954b8-5bc1-4769-
b820-8099fe50aaba \
-uuid ec5e8ee0-657c-4db6-8775-da70e332c67e
2.9.4 在Linux KVM虚拟机上设置vGPU插件参数
vGPU的插件参数控制vGPU的行为,例如帧率限制器(FRL)的配置(以每秒帧数为单位)或是否启用vGPU的控制台虚拟网络计算(VNC)。分配给vGPU的虚拟机使用这些参数启动。如果为分配给同一虚拟机的多个vGPU设置了参数,则虚拟机将使用分配给每个vGPU的参数启动。
对于每个您想要设置插件参数的vGPU,请在带有KVM Hypervisor的Linux主机上使用Linux命令行执行此任务。
1. 切换到mdev设备目录的nvidia子目录,该目录表示vGPU。
# cd /sys/bus/mdev/devices/uuid/nvidia
2. 在上一步中进到的目录,将想要设置的插件参数写入vgpu_params文件。
# echo "plugin-config-params" > vgpu_params
plugin-config-params
参数值对的逗号分隔列表,其中每个参数值对的格式为,参数名称=值。
此示例禁用vGPU的帧率限制和控制台VNC。
# echo "frame_rate_limiter=0, disable_vnc=1" > vgpu_params
此示例为vGPU启用统一内存。
# echo "enable_uvm=1" > vgpu_params
此示例为vGPU启用NVIDIA CUDA Toolkit调试工具。
# echo "enable_debugging=1" > vgpu_params
此示例为vGPU启用NVIDIA CUDA Toolkit性能分析工具。
# echo "enable_profiling=1" > vgpu_params
要清除之前设置的任何vGPU插件参数,请在vGPU的vgpu_params文件中写入一个空格。
# echo " " > vgpu_params
2.9.5 在Linux KVM虚拟机上删除vGPU
对于每个您想要删除的vGPU,请在带有KVM Hypervisor的Linux主机上使用Linux命令行执行以下任务。在开始之前,请确保满足以下先决条件:
- 您知道包含要删除的vGPU的GPU的域、总线、插槽和功能。有关说明,请参见《在带有KVM Hypervisor的Linux上获取GPU的BDF和域》。
- 分配给vGPU的虚拟机已关闭。
1. 切换到物理GPU的mdev_supported_types目录。
# cd /sys/class/mdev_bus/domain\:bus\:slot.function/mdev_supported_types/
其中,domain、bus、slot和function是GPU的域、总线、插槽和功能,没有0x前缀。
此示例切换到具有PCI设备BDF 06:00.0的GPU的mdev_supported_types目录。
# cd /sys/bus/pci/devices/0000\:06\:00.0/mdev_supported_types/
2. 切换到包含vGPU注册信息的mdev_supported_types子目录。
# cd `find . -type d -name uuid`
其中,uuid是vGPU的UUID,例如,aa618089-8b16-4d01-a136-25a0f3c73123。
3. 在要删除的vGPU的注册信息目录中的remove文件中写入值1。
# echo "1" > remove
注意:在Red Hat虚拟化(RHV)内核上,如果您在虚拟机运行时尝试删除vGPU设备,即使remove文件已成功写入,vGPU设备可能仍不会被删除。要确认vGPU设备已被移除,请确保在sysfs文件系统中找不到该vGPU的UUID。
2.10 为使用vGPU准备配置为直通模式的GPU
物理GPU的使用模式决定了其绑定的Linux内核模块。如果您想切换GPU的使用模式,必须将GPU从当前内核模块中解绑,并将其绑定到新模式的内核模块。将GPU绑定到正确的内核模块后,您可以将其配置为vGPU。
传递给虚拟机的物理GPU绑定到vfio-pci内核模块。绑定到vfio-pci内核模块的物理GPU只能用于直通模式。要使GPU能够用于vGPU,必须将其从vfio-pci内核模块解绑,并绑定到nvidia内核模块。
在开始之前,请确保您知道要为vGPU准备的GPU的域、总线、插槽和功能。有关说明,请参见《在带有KVM Hypervisor的Linux上获取GPU的BDF和域》。
1、通过在主机上的NVIDIA GPU上运行带有-k选项的lspci命令,确定GPU绑定的内核模块。
# lspci -d 10de: -k
“正在使用的内核驱动程序”字段指示GPU绑定的内核模块。以下示例显示,BDF为06:00.0的NVIDIA Tesla M60 GPU绑定到vfio-pci内核模块,并用于GPU直通。
06:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M60] (rev a1)
Subsystem: NVIDIA Corporation Device 115e
Kernel driver in use: vfio-pci
将GPU从vfio-pci内核模块解绑。 a). 切换到表示vfio-pci内核模块的sysfs目录。
# cd /sys/bus/pci/drivers/vfio-pci
b). 将GPU的域、总线、插槽和功能写入该目录中的unbind文件。
# echo domain:bus:slot.function > unbind
其中,domain、bus、slot和function是GPU的域、总线、插槽和功能,没有0x前缀。
此示例将域0000和PCI设备BDF 06:00.0的域、总线、插槽和功能写入unbind文件。
# echo 0000:06:00.0 > unbind
将GPU绑定到nvidia内核模块。 a). 切换到包含物理GPU的PCI设备信息的sysfs目录。
# cd /sys/bus/pci/devices/domain\:bus\:slot.function
其中,domain、bus、slot和function是GPU的域、总线、插槽和功能,没有0x前缀。
此示例切换到包含域0000和PCI设备BDF 06:00.0的GPU的PCI设备信息的sysfs目录。
# cd /sys/bus/pci/devices/0000\:06\:00.0
b). 将内核模块名称nvidia写入该目录中的driver_override文件。
# echo nvidia > driver_override
c). 切换到表示nvidia内核模块的sysfs目录。
# cd /sys/bus/pci/drivers/nvidia
d). 将GPU的域、总线、插槽和功能写入该目录中的bind文件。
# echo domain:bus:slot.function > bind
其中,domain、bus、slot和function是GPU的域、总线、插槽和功能,没有0x前缀。
此示例将域0000和PCI设备BDF 06:00.0的域、总线、插槽和功能写入bind文件。
# echo 0000:06:00.0 > bind
现在,您可以按照《为Red Hat Enterprise Linux KVM或RHV安装和配置NVIDIA虚拟GPU管理器》中所述配置GPU以使用vGPU。
2.11 sysfs文件中的NVIDIA vGPU信息
在sysfs文件系统中存储有关Linux带有KVM虚拟化主机中每个物理GPU支持的NVIDIA vGPU类型的信息。
主机上的所有物理GPU都已注册到mdev内核模块。有关物理GPU和可以在每个物理GPU上创建的vGPU类型的信息存储在/sys/class/mdev_bus/目录下的目录和文件中。
每个物理GPU的sysfs目录位于以下位置:
- /sys/bus/pci/devices/
- /sys/class/mdev_bus/
这两个目录都是指向sysfs文件系统中PCI设备实际目录的符号链接。
每个物理GPU的sysfs目录组织如下:
/sys/class/mdev_bus/
|-parent-physical-device
|-mdev_supported_types
|-nvidia-vgputype-id
|-available_instances
|-create
|-description
|-device_api
|-devices
|-name
parent-physical-device 主机上的每个物理GPU由/sys/class/mdev_bus/目录的子目录表示。
每个子目录的名称如下:
domain:bus:slot.function 其中,domain、bus、slot和function是GPU的域、总线、插槽和功能,例如,0000:06:00.0。
每个目录都是指向sysfs文件系统中PCI设备实际目录的符号链接。
# ll /sys/class/mdev_bus/
total 0
lrwxrwxrwx. 1 root root 0 Dec 12 03:20 0000:05:00.0 -> ../../devices/
pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:08.0/0000:05:00.0
lrwxrwxrwx. 1 root root 0 Dec 12 03:20 0000:06:00.0 -> ../../devices/
pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:09.0/0000:06:00.0
lrwxrwxrwx. 1 root root 0 Dec 12 03:20 0000:07:00.0 -> ../../devices/
pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:10.0/0000:07:00.0
lrwxrwxrwx. 1 root root 0 Dec 12 03:20 0000:08:00.0 -> ../../devices/
pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:11.0/0000:08:00.0
mdev_supported_types 在每个将配置为使用NVIDIA vGPU的物理GPU的sysfs目录下都需要一个名为mdev_supported_types的目录。如何为GPU创建此目录取决于GPU是否支持SR-IOV。
- 对于不支持SR-IOV的GPU,在主机上安装虚拟GPU管理器并重新启动主机后,此目录将自动创建。
- 对于支持SR-IOV的GPU,例如基于NVIDIA Ampere架构的GPU,您必须通过启用GPU的虚拟功能来创建此目录,具体操作请参考《在带有KVM虚拟化的Linux上创建NVIDIA vGPU》。mdev_supported_types目录本身在物理功能上永远不可见。 mdev_supported_types目录包含物理GPU支持的每种vGPU类型的子目录。每个子目录的名称为nvidia-vgputype-id,其中vgputype-id是无符号整数序列号。例如:
ll mdev_supported_types/
total 0
drwxr-xr-x 3 root root 0 Dec 6 01:37 nvidia-35
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-36
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-37
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-38
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-39
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-40
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-41
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-42
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-43
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-44
drwxr-xr-x 3 root root 0 Dec 5 10:43 nvidia-45
nvidia-vgputype-id 每个目录代表一个独立的vGPU类型,并包含以下文件和目录: available_instances 此文件包含仍可创建的此vGPU类型实例数。每当在物理GPU上创建或删除此类型的vGPU时,此文件都会更新。
注意:创建时间切片vGPU时,所有其他时间切片vGPU类型的available_instances内容都将设置为0。此行为强制要求物理GPU上的所有时间切片vGPU必须是相同类型。但是,此要求不适用于MIG支持的vGPU。因此,当创建MIG支持的vGPU时,物理GPU上所有其他MIG支持的vGPU类型的available_instances不会设置为0。
create 此文件用于创建vGPU实例。通过将vGPU的UUID写入此文件来创建vGPU实例。该文件只能写入。
description 此文件包含以下vGPU类型的详细信息:
- vGPU类型支持的最大虚拟显示头数
- 每秒帧速率限制器(FRL)配置(以每秒帧数为单位)
- 帧缓冲区大小(以M字节为单位)
- 每个显示头的最大分辨率
- 每个物理GPU支持的最大vGPU实例数
- 例如:
# cat description
num_heads=4, frl_config=60, framebuffer=2048M, max_resolution=4096x2160,
max_instance=4
device_api 此文件包含字符串vfio_pci,表示vGPU是一个PCI设备。
devices 此目录包含为vGPU类型创建的所有mdev设备。
例如:
# ll devices
total 0
lrwxrwxrwx 1 root root 0 Dec 6 01:52 aa618089-8b16-4d01-a136-25a0f3c73123 -
> ../../../aa618089-8b16-4d01-a136-25a0f3c73123
name
该文件包含vGPU类型的名称。例如:
# cat name
GRID M10-2Q
2.12 为支持MIG模式的GPU配置vGPU
为了支持具有NVIDIA vGPU的GPU实例,必须配置启用了MIG模式的GPU,并在物理GPU上创建和配置GPU实例。可选地,您可以在GPU实例内创建计算实例。如果您不在GPU实例内创建计算实例,稍后可以从客户VM中为单个vGPU添加它们。
确保满足以下先决条件:
- 在hypervisor主机上安装了NVIDIA虚拟GPU管理器。
- 您在hypervisor主机机器上拥有root用户权限。
- 您已确定哪些GPU实例对应于您将创建的MIG支持的vGPUs的vGPU类型。 要获取此信息,请参阅支持GPU的虚拟GPU类型中的MIG支持的vGPUs表。
- GPU未被任何其他进程使用,例如CUDA应用程序、监控应用程序或nvidia-smi命令。
要为MIG支持的vGPUs配置GPU,请按照以下说明操作:
- 为GPU启用MIG模式 注意:对于VMware vSphere,只需要启用MIG模式,因为VMware vSphere会创建GPU实例,并在VM引导并安装了客户驱动程序后,会自动在VM中创建一个计算实例。
- 在启用了MIG的GPU上创建GPU实例
- 可选:在GPU实例中创建计算实例 在为MIG支持的vGPUs配置GPU之后,创建所需的vGPUs并将它们添加到其VM中。
配置了支持MIG的GPU后,创建您需要的vGPUs并将它们添加到它们的虚拟机中。
2.12.1 GPU启用 MIG模式
在您的hypervisor命令shell中执行此任务。
1、在hypervisor主机机器上以root用户身份打开命令shell。 在所有支持的hypervisors上,您可以使用安全外壳(SSH)来执行此操作。 各个hypervisors可能提供其他登录方式。有关详细信息,请参考您的hypervisor文档。
2、确定MIG模式是否已启用。 使用nvidia-smi命令进行此操作。默认情况下,MIG模式是禁用的。 以下示例显示GPU 0上MIG模式已禁用。 注意:在nvidia-smi的输出中,NVIDIA A100 HGX 40GB GPU被称为A100-SXM4-40GB。
$ nvidia-smi -i 0
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.03 Driver Version: 525.125.03 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| 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 A100-SXM4-40GB On | 00000000:36:00.0 Off | 0 |
| N/A 29C P0 62W / 400W | 0MiB / 40537MiB | 6% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
3、如果MIG模式已禁用,手动开启它
$ nvidia-smi -i [gpu-ids] -mig 1
gpu-ids 一个逗号分隔的GPU索引、PCI总线ID或UUID列表,用于指定要在其上启用MIG模式的GPU。如果省略gpu-ids,则系统中的所有GPU都将启用MIG模式。 此示例在GPU 0上启用了MIG模式。
$ nvidia-smi -i 0 -mig 1
Enabled MIG Mode for GPU 00000000:36:00.0
All done.
注意:如果GPU正在被另一个进程使用,此命令将失败并显示警告消息,指出GPU的MIG模式处于待启用状态。在这种情况下,请停止所有正在使用GPU的进程,然后重试该命令。
4、仅适用于VMware vSphere ESXi:重新启动hypervisor主机。
5、查询已启用MIG模式的GPU,以确认MIG模式已启用。
此示例以逗号分隔值(CSV)格式查询GPU 0的PCI总线ID和MIG模式。
$ nvidia-smi -i 0 --query-gpu=pci.bus_id,mig.mode.current --format=csv
pci.bus_id, mig.mode.current
00000000:36:00.0, Enabled
2.12.2 在MIG模式的GPU上创建GPU实例
注意:如果您正在使用VMware vSphere,请忽略此任务。VMware vSphere会自动创建GPU实例。 在您的hypervisor命令shell中执行此任务。
1、如有必要,在hypervisor主机机器上以root用户身份打开命令shell。
2、列出您的GPU上可用的GPU实例配置文件。 在创建它们时,您需要通过它们的ID而不是名称来指定这些配置文件。
$ nvidia-smi mig -lgip
+--------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|==========================================================================|
| 0 MIG 1g.5gb 19 7/7 4.95 No 14 0 0 |
| 1 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 2g.10gb 14 3/3 9.90 No 28 1 0 |
| 2 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 3g.20gb 9 2/2 19.79 No 42 2 0 |
| 3 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 4g.20gb 5 1/1 19.79 No 56 2 0 |
| 4 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 7g.40gb 0 1/1 39.59 No 98 5 0 |
| 7 1 1 |
+--------------------------------------------------------------------------+
3、创建与您将创建的MIG支持的vGPUs的vGPU类型相对应的GPU实例。
$ nvidia-smi mig -cgi gpu-instance-profile-ids
gpu-instance-profile-ids 一个逗号分隔的GPU实例配置文件ID列表,用于指定要创建的GPU实例。 此示例创建了两个类型为2g.10gb的GPU实例,其配置文件ID为14。
$ nvidia-smi mig -cgi 14,14
Successfully created GPU instance ID 5 on GPU 2 using profile MIG 2g.10gb (ID
14)
Successfully created GPU instance ID 3 on GPU 2 using profile MIG 2g.10gb (ID
14)
2.12.3 在 GPU 实例中创建计算实例(可选)
在 GPU 实例中创建计算实例是可选的。如果您不在 GPU 实例中创建计算实例,可以稍后为每个虚拟 GPU 从虚拟机内部添加计算实例。
注意:如果您正在使用 VMware vSphere,则可以跳过此任务。在虚拟机启动并安装了客户端驱动程序后,将自动在虚拟机中创建一个计算实例。请在您的虚拟化管理程序命令行中执行此任务。
1、如有必要,在您的虚拟化管理程序主机机器上以 root 用户身份打开命令行。
2、列出可用的 GPU 实例。
$ nvidia-smi mig -lgi
+----------------------------------------------------+
| GPU instances: |
| GPU Name Profile Instance Placement |
| ID ID Start:Size |
|====================================================|
| 2 MIG 2g.10gb 14 3 0:2 |
+----------------------------------------------------+
| 2 MIG 2g.10gb 14 5 4:2 |
+----------------------------------------------------+
3、在每个 GPU 实例内创建所需的计算实例。
$ nvidia-smi mig -cci -gi gpu-instance-ids
gpu-instance-ids GPU 实例 ID 的逗号分隔列表,指定您希望在其中创建计算实例的 GPU 实例。
注意:为避免虚拟机客户端和虚拟化管理程序主机之间的不一致状态,请勿在运行活动虚拟机的 GPU 实例上从虚拟化管理程序主机创建计算实例。相反,请按照《修改 MIG 支持的虚拟 GPU 配置》中所述,在虚拟机内部创建计算实例。
此示例在 GPU 实例 3 和 5 上各创建一个计算实例。
$ nvidia-smi mig -cci -gi 3,5
Successfully created compute instance on GPU 0 GPU instance ID 1 using profile
ID 2
Successfully created compute instance on GPU 0 GPU instance ID 2 using profile
ID 2
4、验证已在每个 GPU 实例内创建计算实例。
$ nvidia-smi
+-----------------------------------------------------------------------------+
| MIG devices: |
+------------------+----------------------+-----------+-----------------------+
| GPU GI CI MIG | Memory-Usage | Vol| Shared |
| ID ID Dev | BAR1-Usage | SM Unc| CE ENC DEC OFA JPG|
| | | ECC| |
|==================+======================+===========+=======================|
| 2 3 0 0 | 0MiB / 9984MiB | 28 0 | 2 0 1 0 0 |
| | 0MiB / 16383MiB | | |
+------------------+----------------------+-----------+-----------------------+
| 2 5 0 1 | 0MiB / 9984MiB | 28 0 | 2 0 1 0 0 |
| | 0MiB / 16383MiB | | |
+------------------+----------------------+-----------+-----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
注意:在虚拟机中创建的额外计算实例在虚拟机关闭或重新启动时会被销毁。在关闭或重新启动后,虚拟机中仅保留一个计算实例。此计算实例在安装 NVIDIA vGPU 软件图形驱动程序后会自动创建。
2.13 为一个或多个GPU禁用MIG模式
如果您想用于时间切片的虚拟 GPU(vGPUs)或 GPU 直通的 GPU 之前已配置为支持 MIG 的虚拟 GPU,请禁用该 GPU 的 MIG 模式。确保满足以下前提条件:
- NVIDIA 虚拟 GPU 管理器已安装在虚拟化管理程序主机上。
- 您在虚拟化管理程序主机上具有 root 用户权限。
- 该 GPU 未被任何其他进程使用,例如 CUDA 应用程序、监控应用程序或 nvidia-smi 命令。
请在您的虚拟化管理程序命令行中执行此任务。
1、在您的虚拟化管理程序主机上以 root 用户身份打开命令行。您可以使用安全外壳(SSH)来完成此操作。
2、确定 MIG 模式是否已禁用。
使用 nvidia-smi 命令来检查此状态。默认情况下,MIG 模式是禁用的,但可能之前已启用。
此示例显示 GPU 0 上启用了 MIG 模式。
注意:在 nvidia-smi 的输出中,NVIDIA A100 HGX 40GB GPU 被称为 A100-SXM4-40GB。
$ nvidia-smi -i 0
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.03 Driver Version: 525.125.03 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| 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 A100-SXM4-40GB Off | 00000000:36:00.0 Off | 0 |
| N/A 29C P0 62W / 400W | 0MiB / 40537MiB | 6% Default |
| | | Enabled |
3、如果 MIG 模式已启用,请将其禁用。
$ nvidia-smi -i [gpu-ids] -mig 0
gpu-ids
逗号分隔的 GPU 索引、PCI 总线 ID 或 UUID 列表,指定您希望禁用 MIG 模式的 GPU。如果省略 gpu-ids,则系统上所有 GPU 的 MIG 模式将被禁用。
此示例禁用 GPU 0 上的 MIG 模式。
$ sudo nvidia-smi -i 0 -mig 0
Disabled MIG Mode for GPU 00000000:36:00.0
All done.
4、确认 MIG 模式已被禁用。
使用 nvidia-smi 命令来检查此状态。
此示例显示 GPU 0 上的 MIG 模式已被禁用。
$ nvidia-smi -i 0
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.03 Driver Version: 525.125.03 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| 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 A100-SXM4-40GB Off | 00000000:36:00.0 Off | 0 |
| N/A 29C P0 62W / 400W | 0MiB / 40537MiB | 6% Default |
| | | Disabled |
2.14 禁用&启用ECC内存
一些支持 NVIDIA vGPU 软件的 GPU 支持带有错误纠正码(ECC)内存的 NVIDIA vGPU。ECC 内存通过检测和处理双位错误来提高数据完整性。然而,并非所有 GPU、vGPU 类型和虚拟化管理程序软件版本都支持与 NVIDIA vGPU 一起使用的 ECC 内存。
在支持与 NVIDIA vGPU 一起使用的 ECC 内存的 GPU 上,ECC 内存与 C 系列和 Q 系列 vGPU 兼容,但不与 A 系列和 B 系列 vGPU 兼容。尽管 A 系列和 B 系列 vGPU 可以在启用 ECC 内存的物理 GPU 上启动,但在不支持 ECC 的 vGPU 上启用 ECC 可能会产生一些成本。
在没有 HBM2 内存的物理 GPU 上,vGPU 可用的帧缓冲区数量会减少。所有类型的 vGPU 都会受到影响,而不仅仅是支持 ECC 内存的 vGPU。
启用物理 GPU 上 ECC 内存的效果如下:
- ECC 内存作为特性在物理 GPU 上的所有受支持 vGPU 中暴露。
- 在支持 ECC 内存的虚拟机中,ECC 内存被启用,并可以选择在虚拟机中禁用 ECC。
- ECC 内存可以为单个虚拟机启用或禁用。在虚拟机中启用或禁用 ECC 内存不会影响 vGPU 可用的帧缓冲区数量。
基于 Pascal GPU 架构及之后的 GPU 架构支持与 NVIDIA vGPU 一起使用的 ECC 内存。要确定某个 GPU 是否启用了 ECC 内存,可以运行 nvidia-smi -q 命令。
Tesla M60 和 M6 GPU 在未使用 GPU 虚拟化时支持 ECC 内存,但 NVIDIA vGPU 不支持这些 GPU 的 ECC 内存。在图形模式下,这些 GPU 默认情况下禁用 ECC 内存。
某些虚拟化管理程序软件版本不支持与 NVIDIA vGPU 一起使用的 ECC 内存。如果您使用的虚拟化管理程序软件版本或 GPU 不支持与 NVIDIA vGPU 一起使用的 ECC 内存,并且 ECC 内存已启用,则 NVIDIA vGPU 将无法启动。在这种情况下,您必须确保在使用 NVIDIA vGPU 时所有 GPU 上的 ECC 内存都被禁用。
2.14.1 禁用ECC内存
如果 ECC 内存不适合您的工作负载但已在您的 GPU 上启用,请禁用它。如果您使用的是不支持与 NVIDIA vGPU 一起使用的 ECC 内存的虚拟化管理程序软件版本或 GPU,还必须确保所有 GPU 上的 ECC 内存都被禁用。如果您的虚拟化管理程序软件版本或 GPU 不支持 ECC 内存且 ECC 内存已启用,则 NVIDIA vGPU 将无法启动。
执行此任务的位置取决于您是为物理 GPU 还是 vGPU 更改 ECC 内存设置。
- 对于物理 GPU,请从虚拟化管理程序主机执行此任务。
- 对于 vGPU,请从分配给 vGPU 的虚拟机中执行此任务。
注意:ECC 内存必须在 vGPU 所在的物理 GPU 上启用。在开始之前,请确保 NVIDIA 虚拟 GPU 管理器已安装在您的虚拟化管理程序上。如果您正在为 vGPU 更改 ECC 内存设置,还需确保在分配给 vGPU 的虚拟机中安装了 NVIDIA vGPU 软件图形驱动程序。
1、使用 nvidia-smi 列出所有物理 GPU 或 vGPU 的状态,并检查 ECC 是否被标记为启用。
# nvidia-smi -q
==============NVSMI LOG==============
Timestamp : Mon Jul 17 18:36:45 2023
Driver Version : 525.125.03
Attached GPUs : 1
GPU 0000:02:00.0
[...]
Ecc Mode
Current : Enabled
Pending : Enabled
[...]
2、将 ECC 状态更改为关闭,对于每个启用了 ECC 的 GPU。
- 如果您想将主机上所有 GPU 或分配给虚拟机的 vGPU 的 ECC 状态更改为关闭,请运行此命令:
# nvidia-smi -e 0
- 如果您想将特定 GPU 或 vGPU 的 ECC 状态更改为关闭,请运行此命令:
# nvidia-smi -i id -e 0
- id 是 nvidia-smi 报告的 GPU 或 vGPU 的索引。此示例禁用索引为 0000:02:00.0 的 GPU 的 ECC。
# nvidia-smi -i 0000:02:00.0 -e 0
3、重新启动主机或重启虚拟机。
4、确认现在 GPU 或 vGPU 的 ECC 已被禁用。
# nvidia—smi —q
==============NVSMI LOG==============
Timestamp : Mon Jul 17 18:37:53 2023
Driver Version : 525.125.03
Attached GPUs : 1
GPU 0000:02:00.0
[...]
Ecc Mode
Current : Disabled
Pending : Disabled
如果您稍后需要在 GPU 或 vGPU 上启用 ECC,请按照《启用 ECC 内存》中的说明进行操作。
2.14.2 启用ECC内存
如果 ECC 内存适合您的工作负载,并且您的虚拟化管理程序软件和 GPU 支持它,但在您的 GPU 或 vGPU 上被禁用,请启用它。执行此任务的位置取决于您是为物理 GPU 还是 vGPU 更改 ECC 内存设置。
- 对于物理 GPU,请从虚拟化管理程序主机执行此任务。
- 对于 vGPU,请从分配给 vGPU 的虚拟机中执行此任务。
注意:ECC 内存必须在 vGPU 所在的物理 GPU 上启用。在开始之前,请确保 NVIDIA 虚拟 GPU 管理器已安装在您的虚拟化管理程序上。如果您正在为 vGPU 更改 ECC 内存设置,还需确保在分配给 vGPU 的虚拟机中安装了 NVIDIA vGPU 软件图形驱动程序。
1、使用 nvidia-smi 列出所有物理 GPU 或 vGPU 的状态,并检查 ECC 是否被标记为禁用。
# nvidia-smi -q
==============NVSMI LOG==============
Timestamp : Mon Jul 17 18:36:45 2023
Driver Version : 525.125.03
Attached GPUs : 1
GPU 0000:02:00.0
[...]
Ecc Mode
Current : Disabled
Pending : Disabled
[...]
2、将 ECC 状态更改为启用,对于每个禁用 ECC 的 GPU 或 vGPU。
- 如果您想将主机上所有 GPU 或分配给虚拟机的 vGPU 的 ECC 状态更改为启用,请运行此命令:
# nvidia-smi -e 1
- 如果您想将特定 GPU 或 vGPU 的 ECC 状态更改为启用,请运行此命令:
# nvidia-smi -i id -e 1
- id 是 nvidia-smi 报告的 GPU 或 vGPU 的索引。此示例启用索引为 0000:02:00.0 的 GPU 的 ECC。
# nvidia-smi -i 0000:02:00.0 -e 1
3、重新启动主机或重启虚拟机。
4、确认现在 GPU 或 vGPU 的 ECC 已被启用。
# nvidia—smi —q
==============NVSMI LOG==============
Timestamp : Mon Jul 17 18:37:53 2023
Driver Version : 525.125.03
Attached GPUs : 1
GPU 0000:02:00.0
[...]
Ecc Mode
Current : Enabled
Pending : Enabled
[...]
如果您稍后需要在 GPU 或 vGPU 上禁用 ECC,请按照《禁用 ECC 内存》中的说明进行操作。
2.15 配置 vGPU 虚拟机以使用 NVIDIA GPUDirect 存储技术
要使用 NVIDIA® GPUDirect Storage® 技术与 NVIDIA vGPU,您必须在配置了 NVIDIA vGPU 的虚拟机中安装所有所需软件。 确保满足《使用 NVIDIA vGPU 的先决条件》中的先决条件。
- 安装并配置 NVIDIA 虚拟 GPU 管理器,如《为 Red Hat Enterprise Linux KVM 或 RHV 安装和配置 NVIDIA 虚拟 GPU 管理器》中所述。
- 以 root 身份登录到您在上一步中配置了 NVIDIA vGPU 的虚拟机中。
- 安装 Mellanox OpenFabrics Enterprise Distribution for Linux (MLNX_OFED),如《安装 Mellanox OFED 中的安装过程》中所述。 在运行安装脚本的命令中,指定以下选项: ‣ --with-nvmf ‣ --with-nfsrdma ‣ --enable-gds ‣ --add-kernel-support
- 在虚拟机中从特定于发行版的软件包安装 Linux 的 NVIDIA vGPU 软件图形驱动程序。 注意:GPUDirect Storage 技术不支持从 .run 文件安装 Linux 的 NVIDIA vGPU 软件图形驱动程序。 按照安装在虚拟机中的 Linux 发行版的说明进行操作: ‣ 从 Debian 软件包在 Ubuntu 上安装 NVIDIA vGPU 软件图形驱动程序 ‣ 从 RPM 软件包在 Red Hat 发行版上安装 NVIDIA vGPU 软件图形驱动程序
- 从 .run 文件安装 NVIDIA CUDA Toolkit,在选择要安装的 CUDA 组件时取消选择 CUDA 驱动程序。 注意:为了避免覆盖您在上一步中安装的 NVIDIA vGPU 软件图形驱动程序,请勿从特定于发行版的软件包安装 NVIDIA CUDA Toolkit。 有关说明,请参阅 Linux 的 NVIDIA CUDA 安装指南中的 Runfile 安装。
- 使用安装在虚拟机中的 Linux 发行版的软件包管理器安装 GPUDirect Storage 技术软件包,省略安装 NVIDIA CUDA Toolkit 软件包。 按照安装在虚拟机中的 Linux 发行版的 NVIDIA CUDA 安装指南中的说明进行操作:
RHEL8/CentOS8 在安装 CUDA 的步骤中,仅执行包含所有 GPUDirect Storage 技术软件包的命令:
sudo dnf install nvidia-gds
Ubuntu 在安装 CUDA 的步骤中,仅执行包含所有 GPUDirect Storage 技术软件包的命令:
sudo apt-get install nvidia-gds
配置了用于 NVIDIA GPUDirect Storage 技术的 vGPU 虚拟机后,您可以为正在使用的 NVIDIA vGPU 软件许可产品授权。有关说明,请参阅《虚拟 GPU 客户端许可用户指南》。