Windows 10, 11 Pro以上のエディションにはHyper-Vという仮想マシン機能が搭載されています。昔はRemoteFXを使い仮想マシンでGPUを利用することができましたが、脆弱性により無効化されたので利用することができません。
しかし、GPU-Pという機能を利用することでHyper-Vを利用できるようです。

PowerShellで確認してみても、Add-VMGpuPartitionAdapterという項目が実装されていることが分かります。
今回は、実際にHyper-VでGPUを利用する方法を紹介していきます。
仮想マシンの作成
まずは仮想マシンを作成していきます。今回は実験環境なのでWindows11 Enterpriseでも入れてみます。クイック作成を開いて「オペレーティングシステムの選択」からWindows 11 開発環境を選択します。

そして、仮想マシンを作成をクリックします。
こんな感じでダウンロードが始まります。

補足 このGPU-Pという機能、Windows Sandboxで利用できます。vGPU 項目 そのため、Sandbox環境からドライバを拝借します。
ダウンロードが終わるとこのような画面になります。

ここから、設定を編集をクリックします。
チェックポイントを無効化しましょう。忘れるとすぐに仮想マシンが破損します。

そのあと、いったんウィンドウを閉じます。
次に、PowerShellで以下のコマンドを実行します。管理者権限が必要です。
Add-VMGpuPartitionAdapter -VMName "仮想マシン名"
Set-VMGpuPartitionAdapter -VMName "仮想マシン名" -MinPartitionVRAM 80000000 -MaxPartitionVRAM 100000000 -OptimalPartitionVRAM 100000000 -MinPartitionEncode 80000000 -MaxPartitionEncode 100000000 -OptimalPartitionEncode 100000000 -MinPartitionDecode 80000000 -MaxPartitionDecode 100000000 -OptimalPartitionDecode 100000000 -MinPartitionCompute 80000000 -MaxPartitionCompute 100000000 -OptimalPartitionCompute 100000000
Set-VM -GuestControlledCacheTypes $true -VMName "仮想マシン名"
Set-VM -LowMemoryMappedIoSpace 1GB -VMName "仮想マシン名"
Set-VM –HighMemoryMappedIoSpace 32GB –VMName "仮想マシン名"
そのあと、一回起動させてセットアップを済ませます。
ドライバーの移植
最後にドライバーの移植をします。まず、Windows Sandboxを有効化しましょう。
「Windowsサンドボックス」の使い方。初めてのアプリを安全な環境で試せる!【Windows Tips】 | できるネット (dekiru.net)
そのあと、Hyper-Vの仮想ハードディスクをマウントします。


このようなエラーが出るかもしれません。

その場合は、ディスクの管理からドライブ文字を割り当てます。

すると、このようにマウントできます。

次に、マウントしたドライブのWindows\System32\にHostDriverStoreというフォルダを作成します。
次に、マウントしたドライブ以外の場所に.wsbのファイルを作成します。内容は以下の通りです。
<Configuration>
<VGpu>Enable</VGpu>
<MappedFolders>
<MappedFolder>
<HostFolder>"マウントしたドライブ文字":\Windows\System32\HostDriverStore</HostFolder>
<ReadOnly>false</ReadOnly>
</MappedFolder>
</MappedFolders>
</Configuration>
そのあと、管理者権限のコマンドプロンプトからファイルを実行します。 ファイルから直接起動しないでください。

Sandboxが起動します。

そして、このC:\Windows\System32\HostDriverStoreにあるファイルをデスクトップにマッピングされたHostDriverStoreにコピーします。

NVIDIAでCUDAを利用する場合は親のC:\Windows\System32\にあるnvapi64.dllを子の同じディレクトリに、親のC:\Windows\System32\DriverStore\FileRepository\以下にあったnvapi64.dllは,子のC:\Windows\System32\HostDriverStore\FileRepository\にnvapi64.dllのあったフォルダごとコピーします。

これらがすべて終わったら、ドライブをアンマウントして仮想マシンを起動させましょう。
GPUが認識されているはずです。

実際に動いてるのか検証
実際に動くのか検証するためにこのサイトを使って負荷をかけました。
ちゃんと動いていますね。
まとめ
Hyper-VでGPUを使うにはGPU-Pを利用してドライバーを割り当てればよい。
最後までご覧いただきありがとうございました。
コメント