GPU 分区 (GPU Partitioning),通常缩写为 GPU-P,是 Microsoft Hyper-V 虚拟化平台中的一项先进技术。它允许系统管理员将单个物理图形处理单元 (GPU) 的计算资源分割成多个独立的虚拟分区。这些分区随后可以分配给在 Hyper-V 主机上运行的各个虚拟机 (VMs)。通过这种方式,多个虚拟机可以同时共享同一块物理 GPU 的硬件加速能力,从而显著提升图形密集型应用程序、虚拟桌面基础架构 (VDI) 环境、人工智能 (AI) 和机器学习 (ML) 推理等工作负载的性能和效率。与早期已被弃用的 RemoteFX vGPU 技术不同,GPU-P 提供了更直接的 GPU 访问路径,带来了更好的性能和更广泛的应用程序兼容性。这项技术旨在优化硬件资源利用率,降低基础设施的总拥有成本,并为虚拟化环境中的 GPU 加速需求提供灵活的解决方案。
跨多个虚拟机进行 GPU 分区示意图
在开始配置 Hyper-V GPU 分区之前,请确保您的系统环境满足以下关键要求,这些是成功部署的基础。
您的物理 GPU 必须明确支持分区功能。这通常包括来自 NVIDIA(例如部分 Quadro、Tesla 以及较新的 GeForce 系列)和 AMD(例如部分 Radeon Pro 和较新的 Radeon RX 系列)的现代 GPU。最关键的一步是在 Hyper-V 主机上通过 PowerShell 命令 Get-VMPartitionableGpu 来验证 GPU 的兼容性。某些企业级 GPU 可能还需要特定的驱动程序或固件版本,甚至额外的许可才能启用虚拟化功能。
Hyper-V 主机系统的 CPU 和主板芯片组必须支持输入/输出内存管理单元 (IOMMU) 虚拟化技术。对于 Intel 平台,这对应的是 Intel VT-d (Virtualization Technology for Directed I/O);对于 AMD 平台,则是 AMD-Vi (AMD I/O Virtualization Technology)。此功能对于实现正确的设备隔离至关重要,并且对于计划使用带有分区 GPU 的虚拟机的实时迁移等高级功能尤为重要。请务必在系统的 BIOS/UEFI 设置中检查并启用此项功能。
GPU 分区功能对操作系统版本有特定要求。对于 Hyper-V 主机系统,支持此功能的包括 Windows 10/11 专业版或企业版(通常是内部版本号 1903 及更新版本)以及 Windows Server(例如 Windows Server 2019、Windows Server 2022 及 Windows Server 2025)。客户机虚拟机通常也需要运行兼容的 Windows 操作系统版本才能充分利用分配到的 GPU 资源。
Hyper-V 角色必须在主机操作系统上完全安装并启用。这不仅包括核心的 Hyper-V 虚拟机监控程序,还应包含 Hyper-V 管理工具,以便进行后续的配置和管理操作。
在 Hyper-V 主机上安装 GPU 制造商(NVIDIA、AMD 或 Intel)提供的最新官方驱动程序至关重要。不应仅依赖通过 Windows Update 获取的驱动程序,因为制造商的驱动程序包通常包含支持虚拟化特性所必需的特定组件和优化。配置完成后,相应的兼容驱动程序也需要在客户机虚拟机内部安装。
以下步骤将指导您完成 Hyper-V 中 GPU 分区的配置过程。建议在执行任何重大系统更改前备份您的数据。
在进行任何配置之前,首先需要确认您的 Hyper-V 主机上的物理 GPU 是否支持并能够被分区。在 Hyper-V 主机上以管理员身份打开 PowerShell,然后执行以下命令:
Get-VMPartitionableGpu
如果您的 GPU 兼容,此命令将列出其详细信息,包括 GPU 名称、ID、可用的总显存以及当前可用于分区的资源。如果没有返回任何信息,或者出现错误,则表示您的 GPU 可能不支持分区,或者所需的驱动程序未正确安装或不兼容。
您可以通过 PowerShell 或 Windows Admin Center 两种主要方式来配置 GPU 分区。PowerShell 提供了更精细的控制和脚本化能力,而 Windows Admin Center 则提供了图形化界面。
PowerShell 允许对 GPU 分区设置进行细致的调整。以下是一些关键命令:
# 示例:为名为 "MyVM" 的虚拟机添加 GPU 分区适配器
Add-VMGpuPartitionAdapter -VMName "MyVM"
# 示例:为 "MyVM" 的 GPU 分区适配器设置资源参数
# 注意:具体的参数如 -MinPartitionVRAMBytes 等可能因 PowerShell 版本或特定模块而异,
# 实际使用时请参考 <code>Get-Help Set-VMGpuPartitionAdapter -Full 获取最新参数。
# 以下为概念性示例,展示可配置的资源类型:
Set-VMGpuPartitionAdapter -VMName "MyVM" -MinimumPartitionVRAM "512MB" -MaximumPartitionVRAM "2GB" -OptimalPartitionVRAM "1GB" -MinimumPartitionEncodeRate 100 -MaximumPartitionEncodeRate 500 -OptimalPartitionEncodeRate 200
# 或者,更常见的参数可能是直接设置分配的 VRAM 大小
# Set-VMGpuPartitionAdapter -VMName "MyVM" -PartitionVRAMBytes 1073741824 # 分配 1GB VRAM
# Set-VMGpuPartitionAdapter -VMName "MyVM" -PartitionCount 1 # 如果 GPU 支持多分区实例到单个 VM
# 实际命令和参数会依赖于具体的 Windows 版本和 GPU 驱动程序。
# 核心思想是指定分配给虚拟机的 VRAM 大小以及可能的计算、编码/解码单元的百分比。
# 例如,-MinPartitionEncodeRate 等参数值通常代表 GPU 资源的百分之几百(例如100代表1%)。
# 您可以创建的分区数量和每个分区可分配的资源量取决于物理 GPU 的总能力。
请查阅 Microsoft官方文档 或使用 Get-Help Set-VMGpuPartitionAdapter -Examples 获取针对您环境的具体参数和用法。参数如 -MinPartitionVRAMBytes, -MaxPartitionVRAMBytes, 和 -OptimalPartitionVRAMBytes (或类似名称) 用于控制分配给虚拟机的显存。其他参数可能允许分配特定比例的 GPU 编码、解码和计算资源。
通过 Windows Admin Center 进行 GPU 分区配置
对于偏好图形化操作的用户,尤其是在 Windows Server 环境下,Windows Admin Center (WAC) 提供了便捷的管理方式:
Windows Admin Center 的具体操作步骤和界面布局可能会随着版本更新和 GPU 扩展的迭代而略有变化。
当您通过 Add-VMGpuPartitionAdapter 和 Set-VMGpuPartitionAdapter(或其他等效 PowerShell 命令或 WAC 操作)为特定虚拟机配置 GPU 分区时,分配过程实际上已经完成。您可以在 Hyper-V 管理器中验证这一点:打开目标虚拟机的 “设置”,在硬件列表中应该能看到一个 “GPU 分区” 或类似的条目,表明 GPU 资源已成功关联到该虚拟机。下图展示了 Hyper-V 管理器中 GPU 分区选项卡的一个示例,这里可以查看和管理已分配给虚拟机的 GPU 分区。
Hyper-V 管理器中的 GPU 分区选项卡显示已分配的分区
C:\Windows\System32\DriverStore\FileRepository\ 目录下找到对应 GPU 的驱动文件夹)中复制相关的驱动程序安装文件到客户机虚拟机中。
虚拟机设备管理器中成功识别的 GPU 适配器
以下表格汇总了在配置 Hyper-V GPU 分区过程中常用的一些核心 PowerShell 命令及其主要功能,帮助您更好地理解和运用这些工具进行管理:
| 命令 (Cmdlet) | 描述 | 常见用途 |
|---|---|---|
Get-VMPartitionableGpu |
列出 Hyper-V 主机上所有可用于分区的物理 GPU 及其属性。 | 检查硬件兼容性,获取 GPU 的实例路径或名称以供其他命令使用。 |
Add-VMGpuPartitionAdapter |
为指定的虚拟机添加一个 GPU 分区适配器,使其能够使用 GPU 分区资源。 | 为目标虚拟机启用 GPU 分区功能。 |
Set-VMGpuPartitionAdapter |
配置已添加到虚拟机的 GPU 分区适配器的各项参数,如分配的 VRAM 大小、计算资源、编码/解码单元比例等。 | 精确调整分配给虚拟机的 GPU 资源量和类型。 |
Remove-VMGpuPartitionAdapter |
从指定的虚拟机中移除 GPU 分区适配器,释放其占用的 GPU 分区资源。 | 取消虚拟机的 GPU 分区配置。 |
Get-VMGpuPartitionAdapter |
获取指定虚拟机上已配置的 GPU 分区适配器的信息和当前设置。 | 查看和验证特定虚拟机的 GPU 分区配置状态。 |
Set-PartitionableGpu |
(针对主机物理 GPU) 此命令用于在主机级别设置物理 GPU 的可分区数量或模式。在某些高级配置场景或特定 GPU 型号下可能会用到。 | 在主机层面定义一个物理 GPU 能被划分为多少个独立的分区,或调整其分区策略。 |
为了更好地理解 GPU 分区 (GPU-P) 的定位,以下雷达图比较了 GPU-P 与另一种常见的 GPU 虚拟化技术——离散设备分配 (DDA) 在不同方面的特性。请注意,这些评估是基于一般场景的相对比较,具体表现可能因硬件、工作负载和配置而异。
图表解读:
下图通过思维导图的形式,清晰地展示了 Hyper-V 中配置 GPU 分区的核心流程和关键环节,帮助您快速掌握整体脉络。
手动配置 Hyper-V GPU 分区,特别是涉及驱动程序的复制和安装过程,可能既耗时又容易出错。为了简化这一过程,社区中涌现了一些优秀的自动化工具和 PowerShell 脚本。例如,“Easy-GPU-PV” 及其派生项目 “Enhanced-GPU-PV”(通常托管在 GitHub 等代码平台上)提供了强大的脚本,能够自动化大部分配置步骤。这些脚本通常可以处理虚拟机的创建、GPU 分区的设置、从主机提取所需驱动文件、将驱动文件注入到虚拟机内部,以及在虚拟机中自动安装驱动程序等任务。“Enhanced-GPU-PV” 等项目还可能额外集成了对虚拟显示驱动程序和 Sunshine(一种开源的游戏串流主机软件)的支持,进一步提升了易用性和功能性。使用这些经过社区验证的自动化脚本,可以显著减少手动操作,降低配置错误风险,并加快部署速度。
虽然标准的远程桌面协议 (RDP) 可以用于连接到配置了 GPU 分区的虚拟机,但其在图形性能方面的表现,尤其是在帧率上,通常会受到限制(例如,可能被限制在 30 FPS 左右)。这对于运行图形密集型应用、视频编辑或游戏等场景可能不够理想。为了获得更流畅、更高性能的远程访问体验(例如,追求 4K 分辨率下 60 FPS 的流畅度),建议考虑使用专为低延迟、高保真度远程访问设计的替代软件。例如,Parsec 和 Moonlight (后者通常与 NVIDIA GPU 上的 Sunshine 配合使用) 等工具,它们更擅长利用虚拟机内部 GPU 的硬件加速能力,提供接近本机的操作感受,尤其适合对图形性能要求较高的用户。
Hyper-V 支持对配置了 GPU 分区的虚拟机进行实时迁移 (Live Migration)。这意味着您可以在 Hyper-V 集群中的不同主机之间移动正在运行的此类虚拟机,而服务中断时间极短。这对于维护、负载均衡和故障切换等场景非常重要。
然而,在进行涉及 GPU 分区虚拟机的实时迁移时,有以下几点需要特别注意:
Hyper-V GPU 分区技术因其能够经济高效地为虚拟机提供硬件图形加速而适用于多种场景:
以下视频来自 Microsoft,深入探讨了 Windows Server 和 Azure Stack HCI 中的 GPU 新特性,包括 GPU 分区 (GPU-P) 和 GPU 故障转移集群。这有助于您更直观地理解 GPU 虚拟化在现代数据中心的应用和优势。
该视频详细介绍了 GPU 分区如何帮助数据中心更有效地利用 GPU 资源,支持各种 GPU 加速的工作负载,并演示了相关的管理操作。虽然视频中可能提及 Azure Stack HCI,但其关于 GPU-P 的核心概念和优势同样适用于独立的 Hyper-V 环境。