参考にしたサイトは
Windows11上でGPU有効な仮想Windows11を動かす
https://qiita.com/botter99/items/c0022ed1906a74decc37
Hyper-VでGPU(3Dアクセラレーション)を利用する方法 Windows 10以降編 (GPU-P)
https://qiita.com/Hyper-W/items/3a2c7ff1d983deb80070
グラフィクスドライバーの導入が鬼門なので、スナップショットをとってから直ぐにグラフィクスドライバーの導入をした方が良い。
その後 GPU-P on で、スナップショットが取れなくなる。
まずはスナップショットを。
host OS>
Get-VMHostPartitionableGpu
答えて曰く
Get-VMHostPartitionableGpu : 用語 'Get-VMHostPartitionableGpu' は、コマンドレット、関数、スクリプト ファイル、または操
作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパス
が正しいことを確認してから、再試行してください。
発生場所 行:1 文字:1
+ Get-VMHostPartitionableGpu
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-VMHostPartitionableGpu:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
コマンドが無いらしい。
host OS>
Add-VMGpuPartitionAdapter -VMName "仮想マシン名" -InstancePath "Nameの内容"
そもそも Name が分からない。
host OS>
Set-VMGpuPartitionAdapter -VMName "仮想マシン名" -Passthru
答えて曰く
コマンド パイプライン位置 1 のコマンドレット Add-VMGpuPartitionAdapter
次のパラメーターに値を指定してください:
VMName[0]:
PS C:\Windows\system32> Add-VMGpuPartitionAdapter -VMName "AdbCS6onPCBTOi7-12" -Passthru
MinPartitionVRAM :
MaxPartitionVRAM :
OptimalPartitionVRAM :
MinPartitionEncode :
MaxPartitionEncode :
OptimalPartitionEncode :
MinPartitionDecode :
MaxPartitionDecode :
OptimalPartitionDecode :
MinPartitionCompute :
MaxPartitionCompute :
OptimalPartitionCompute :
Name : GPU パーティションの設定
Id : Microsoft:2CDACEDB-0231-4680-A802-xxxxxxx\xxxxxxx-xxx-xxxx-A3E0-AC508E46207D
VMId : 2cdacedb-xxxx-xxxx-xxxx-xxxxxxxxxx
VMName : xxxxxxxxxxxx-12
VMSnapshotId : 00000000-0000-0000-0000-000000000000
VMSnapshotName :
CimSession : CimSession: .
ComputerName : Txx-xxxxx-PC
IsDeleted : False
VMCheckpointId : 00000000-0000-0000-0000-000000000000
VMCheckpointName :
反応あり
host OS>
Set-VM -GuestControlledCacheTypes $true -VMName "仮想マシン名"
正常終了
host OS>
Set-VM -LowMemoryMappedIoSpace 1GB -VMName "仮想マシン名"
正常終了 (VMを閉じたら)
host OS>
Set-VM -HighMemoryMappedIoSpace 32GB -VMName "仮想マシン名"
正常終了
我慢しきれず、一度起動してみると、チェックポイントの作成には失敗した。(GPU-Pが割り当てられているからと言われた。)
ただし、ゲストのデバイスマネージャーで Display adapter のところで、 NVIDIA GeForce GTX 1650 が見えている。
ゲストOSにグラフィクスドライバーの導入
ドライバがないので利用できず。普通の考えなら、メーカからドライバインストールすればいいのだが、「仮想マシン上でドライバをメーカーサイトからダウンロードしてインストールしても上手くいかない」との事。
やってみたが、「このNVIDA グラフィックスドライバーには、このバージョンの Windows との互換性がありません。このグラフィクスドライバーと互換性のあるグラフィクスハードウェアが見つかりませんでした」となった。
Host OS から抜き出して Gues OSにコピーする
Guest OS のディスクマウント
Host のディスク管理
操作-VHDの接続
Guest OS の仮想ディスクをマウント
メモ帳で
以下のまじない文書を作る。コピペ元よりちょっと変更
<Configuration>
<VGpu>Enable</VGpu>
<MappedFolders>
<MappedFolder>
<HostFolder>V:\Windows\System32\DriverStore</HostFolder>
<ReadOnly>false</ReadOnly>
</MappedFolder>
</MappedFolders>
</Configuration>
作業ディレクトリに保存。
c:\tempu\drivercopy.wsb
よくあるのが新規テキスト.txtからリネームするやつだけど、メモ帳の場合保存画面において先に「ファイルの種類」を「すべてのファイル」に変えると、.txt からリネームしなくとも直接拡張子が指定できる。
サンドボックス起動 に失敗
Sandbox はGPUが使えることを利用してのやり方。
管理者のPowerShell でこの .wsb を起動させSandbox の desktop に出てきている guest のフォルダにすべてコピーすれば完成。
のはずが、仮想ハードディスクを壊してしまい起動不能に。
Host の nvapi64.dll を検索
Everything
で二か所見つかった。
1.
C:\Windows\System32
2.
C:\Windows\System32\DriverStore\FileRepository\nv_dispig.inf_amd64_f52c4b8723f8dd33
これを Guest OSで再現する。
1の項目はファイル一個。2の項目はディレクトリごとコピー