注:1、本文提到的vGPU、GPU分区都是指的微软的GPU-P技术。
2、在实操过程中,发现网上的很多文章要么记录不全,要么描述不清楚,导致的结果就是根本没法走通。希望通过该文章能解决小伙伴们在实操中遇到的一些坑。
前提说明
1、物理机需要支持SR-IOV,在主板BIOS中可以通过搜索SR-IOV,并打开SR-IOV。
2、物理机需要CPU支持IOMMU,Inter的cpu 需要在bios里开启VT-x,Amd的cpu需要在bios里 开启 AMD-V。
2、显卡驱动需要支持WDDM2.4以上版本“基于IOMMU的GPU隔离(在windows的搜索框中输入 “dxdiag”然后确定,可查看驱动支持的WDDM版本)。
3、虚拟机和宿主机的系统(或wsl里的系统)版本需要一致,同时必须从宿主机(或wsl里的系统)提取显卡驱动程序到虚拟机。如果宿主机升级了驱动程序,那么虚拟机必须也跟着升级。
4、涉及到显存分配操作,所以虚拟机的检查点,自动停止,内存动态分配这些都不可用。
5、本教程wsl和虚拟机里的来宾操作系统都必须为 Ubuntu 22.04。
6、本文中提到的宿主机指的是windows11操作系统。本文中的wsl指的都是wsl2。
7、Powershell必须以“以管理员身份运行“。
一、安装wsl2及Ubuntu 22.04
具体安装方法详见专栏里的另外一篇文章: Windows10安装wls、ubuntu22.04以及解决无法访问互联网的问题
二、安装虚拟化工具Hyper-V
在windows搜索框中输入“启用或关闭windows功能”,然后选中打开。
打开后勾选“Hyper-V”,点击确定,系统会自动安装Hyper-V,安装完成后重启电脑。
三、hyper-v安装ubuntu
新建hyper-v 二代虚拟机。虚拟机名称:ubuntu2204, 安装的是ubuntu server22.04版本。该版本必须与wsl里的linux系统版本一致,同时关闭虚拟机的安全启动、动态内存和检查点。
具体安装方法详见:Windows10/11 hyper-v安装ubuntu22.04
四、验证宿主机GPU是否正常
1、验证宿主机GPU驱动是否正常
nvidia-smi
如果驱动程序安装成功,会返回如下信息:
2、验证wsl2 ubuntu上的GPU驱动是否正常
nvidia-smi
如果驱动程序安装成功,会返回如下信息:
3、查看宿主机上的支持 GPU 分区的GPU
以管理员身份运行powershell,输入以下命令。
Get-VMHostPartitionableGpu | FL Name,ValidPartitionCounts
下面是 Get-VMHostPartitionableGpu
命令的示例输出,其中显示此服务器上安装了两个可分区的 GPU 驱动程序。 第一个 GPU 配置的分区计数为 32,第二个 GPU 配置的分区计数为 32。
通过windows的设备管理器,查看每个位置对应的到底是哪张卡。
五、为hyper-v 的虚拟机添加Gpu分区
输入以下代码(添加GPU分区后无法修改内存分配大小。
如果需要更改内存分配,先执行Remove-VMGpuPartitionAdapter -VMName $vmName
再修改, 修改后再执行下面的代码)
先查看宿主机显卡的参数,根据查询到的信息再去修改分配给虚拟机的参数
Get-VMHostPartitionableGpu
比如本文查询到的参数是:
Name : \\?\PCI#VEN_10DE&DEV_1E07&SUBSYS_12A410DE&REV_A1#4&7d659fe&0&0009#{064092b3-625e-43bf-9
eb5-dc845897dd59}\GPUPARAV
ValidPartitionCounts : {32}
PartitionCount : 32
TotalVRAM : 1000000000
AvailableVRAM