1、概述
Windows 要实现GPU虚拟化可以有两种实现方式,第一种是通过Hyper-V创建虚拟机实现GPU虚拟化,另一种是则是通过docker容器进行GPU虚拟化(加速)。本文主要讲解第一种方式,即通过 Hyper-V 虚拟机实现GUP虚拟化。而在Hyper-V里又可以使用以下两种方式(技术)实现GPU虚拟化:
- GPU直通(Discrete Device Assignment, 简写:DDA),
- GPU分区(GPU-P)
但是不能将一个物理 GPU 同时以DDA和GPU-P进行分配。
说明:DDA的官方直译为离散设备分配,本文中GPU直通、离散设备分配都是指的是DDA。
2、GPU直通 (DDA)
使用DDA可以从虚拟机 (VM) 内部直接访问物理PCIe 硬件。微软 当前只支持GPU卡和 NVMe硬盘。 其他类型的PCIe设备需要硬件厂家额外提供支持。
DDA实现了将一个或多个物理 GPU 分配给某一个虚拟机独用,不支持把同一张GPU卡分配给多个虚拟机同时使用。该虚拟化方式依赖原生的驱动程序上运行,通常具有对 GPU 功能的完全访问权限。
DDA不支持虚拟化的PCIe设备,比如GPU核显。虽然在宿主机里显示核显支持DDA,但是把核显分配给虚拟机后,在启动虚拟机时会报错“Virtual Pci Express Port(实例ID***)无法开机”的错误。
GPU直通的详细配置,详见 Windows hyper-v 虚拟机GPU直通(DDA)教程
3、GPU 分区 (GPU-P)
GPU 分区可以将一张GPU卡同时分配给多个虚拟机 (VM) 同时使用, 每个 VM 将获得 GPU 的专用部分,而不是整个 GPU。
GPU 分区功能使用单个IO 虚拟化 (SR-IOV) 接口,该接口为每个 VM 提供硬件支持的安全边界,且性能可预测也较好。 每个 VM 只能访问专用于它们的 GPU 资源,可防止其他 VM 未经授权进行访问。
GPU 分区的详细配置,详见windows11 实现Hyper-v ubuntu22.04 GPU虚拟化(GPU分区、GPU-P)教程
4、DDA 与 GPU 分区的差异
DDA与GPU分区之间的差异如下:
说明 | DDA | GPU 分区 |
---|---|---|
GPU 资源模型 | 仅专用 | Partitioned |
同时支持的VM数量 | 低(一个或多个 GPU 对一个 VM) | 高(一个或多个 GPU 对许多 VM) |
应用兼容性 | DX 12、OpenGL、CUDA提供的所有 GPU 功能 | DX 12、OpenGL、CUDA提供的所有 GPU 功能 |
AVC444 | 可通过组策略获取 | 可通过组策略获取 |
GPU VRAM | GPU 支持的 VRAM | 每个分区的 GPU 支持的最大 VRAM |
VM中的 GPU 驱动程序 | GPU 供应商驱动程序(NVIDIA、AMD、Intel) | GPU 供应商驱动程序(NVIDIA、AMD、Intel) |