Windows Server 2022のVMでGPU-Pしてみる

GPU仮想化

今回はWindows Server 2022をインストールしたVMにGPU-Pを導入するというマイナー中のマイナーなテーマです。
というかGPU-PVなのかGPU-Pなのかあんまりよくわかってないです。。。

Easy-GPU-PVでやりたい

Easy-GPU-PVでできるかなと思い試してみたのですがダメでした

というわけで手動でGPU-Pを導入してみます。

手動で導入する手順

qiita.com
上記ブログを参考にさせていただきました。ありがとうございました。m(__)m

前準備

とりあえずWindows Server 2022 evaluationをダウンロードしてVMを作成します。

作成できたら設定でコア数を増やしたり、チェックポイントをオフにしておきます。

GPU-P導入

Powershell管理者モードでGPU-P機能をVMに導入していきます。

Add-VMGpuPartitonAdapterでGPU-P機能を追加します。

$VMName = "作成したVMの名前をここに入力"
#GPU-P機能を追加
Add-VMGpuPartitionAdapter -VMName $VMname

次に割り当てるリソースを決めます。
ここの数値はかなりわかりづらく、また割り当てリソースも決めたかったのでEasy-GPU-PVのスクリプトを参考にしました。
$deviderに何分の1のリソースを割り当てるか入力します。例えば50%のリソースを割り当てるなら2を(2分の1という意味)、 10%を割り当てるなら10を入力します。

#GPUを割り当てるリソースを決めます
$devider = "何分の1"
Set-VMGpuPartitionAdapter -VMName $VMName -MinPartitionVRAM ([math]::round($(1000000000 / $devider))) -MaxPartitionVRAM ([math]::round($(1000000000 / $devider))) -OptimalPartitionVRAM ([math]::round($(1000000000 / $devider)))
Set-VMGPUPartitionAdapter -VMName $VMName -MinPartitionEncode ([math]::round($(18446744073709551615 / $devider))) -MaxPartitionEncode ([math]::round($(18446744073709551615 / $devider))) -OptimalPartitionEncode ([math]::round($(18446744073709551615 / $devider)))
Set-VMGpuPartitionAdapter -VMName $VMName -MinPartitionDecode ([math]::round($(1000000000 / $devider))) -MaxPartitionDecode ([math]::round($(1000000000 / $devider))) -OptimalPartitionDecode ([math]::round($(1000000000 / $devider)))
Set-VMGpuPartitionAdapter -VMName $VMName -MinPartitionCompute ([math]::round($(1000000000 / $devider))) -MaxPartitionCompute ([math]::round($(1000000000 / $devider))) -OptimalPartitionCompute ([math]::round($(1000000000 / $devider)))

次にキャッシュタイプとMMIOスペースの設定を入れます
Discrete Device Assignment を使用したグラフィックス デバイスのデプロイ | Microsoft Learn
個別のデバイスの割り当てを使用したデバイスのデプロイの計画 | Microsoft Learn
このあたりに理由が書いてあります。
ここMMIOスペースも数台で動かすならリソース配分などがいるかもしれませんが、とりあえず書いているままに設定します。

Set-VM -GuestControlledCacheTypes $true -VMName $VMname
Set-VM -LowMemoryMappedIoSpace 3GB -VMName $VMName
Set-VM –HighMemoryMappedIoSpace 32GB –VMName $VMName

これでpowershellでのGPU-P導入は終わりです

ドライバーのコピー

次にドライバーをVM内に入れます。ドライバをウェブからダウンロードしてきてインストールしてもエラーになるそうで、ホストのドライバーファイルを直で入れることが必要みたいです。

(ホストのデータをVMにコピーする手法はVHDをマウントする方法もあるのでしょうが、うまくいかないのでネットワークドライブにしました。
ipconfigでVMのIPをとって、\\VMのIP\C$ と入力しました。)

まずドライバーをとっていきます。参考にした記事から、

  • C:\Windows\System32\nvapi64.dll
  • C:\Windows\System32\DriverStore\FileRepository\ドライバーファイル\nvapi64.dll(ドライバーファイルごと)

の二つを導入していきます。
System32直下のdllファイルはそのままVMのSystem32に入れます。

FileRepositoryにあるnvapi64.dllは入っているファイルごと入れます。VMではDriverStoreではなく、HostDriverStoreというファイルを作成してそこに入れます。

  • C:\Windows\System32\HostDriverStore\FileRepository\ドライバーファイル

となるようにしてください。

ドライバーファイルはたぶんGPUの機種によって違うと思います。僕の場合は

  • nv_dispig.inf_amd64_xxxxxxxxxxxxx

みたいな感じでした。

ここまでできればVM再起動してあげます。

結果の確認

再起動してデバイスマネージャーを見てみましょう

GPUが認識されています。

ベンチ取ります。novabenchです。

ちゃんとGPUもベンチが取れています。

こんな感じでWindows Server 2022にvGPUを搭載することができました。

Parsecなんかを使ってApexなどのゲームもできます。
まあでも利用用途がよくわからないですが、、、ゲーミングPC一台だけで複数人で遊びたいときとかですかね?

こんな感じで以上です。GPU-Pはおもしろいですね

タイトルとURLをコピーしました