Hyper-V ホスト上の仮想マシンに物理ビデオ カードを接続するガイド
OpenGL、Direct3D、CUDA などのタスクを実行するには、仮想マシンにビデオ カード (GPU) が必要になる場合があります。その場合、通常はエミュレートされたビデオ カードを使用しますが、これは専用の GP ほどパフォーマンスが良くありません。そのため、この投稿では、ホスト上の VM に物理ビデオ カードを接続する方法について説明します。
GPU を Hyper-V 経由で渡すにはどうすればよいですか?
Hyper-V ホスト上の VM に物理ビデオ カードを接続するには、GPU パススルーを使用します。
GPU パススルーは、仮想マシンに物理 GPU を割り当てることができる高度な機能です。この機能は、高性能グラフィックスが求められるゲームや 3D レンダリングなどのアプリケーションで特に役立ちます。この設定では、仮想マシンはエミュレーションのオーバーヘッドなしで物理グラフィックス アダプターに直接アクセスできるため、グラフィックスのパフォーマンスが大幅に向上します。既定では、Hyper-V の仮想マシンはエミュレートされたグラフィックス カードを使用しますが、これは要求の厳しいグラフィックス タスクには不十分な場合があります。GPU パススルーを使用すると、仮想マシンは物理 GPU のパワーを最大限に活用できるため、より負荷の高いグラフィックス ワークロードを効率的に処理できます。
GPU パススルーのシステム要件は何ですか?
GPU パススルーを設定する前に、次の前提条件を満たしていることを確認してください。
ハードウェア要件
- プロセッサがIntel-VTまたはAMD-V 仮想化をサポートしていることを確認する必要があります。
- PCI パススルーの場合、プロセッサは入出力メモリ管理ユニット (IOMMU) をサポートしている必要があります。
- GPU は、NVIDIA GRID や AMD MxGPU などの GPU 仮想化テクノロジをサポートしている必要があります。これらのテクノロジは、個々のベンダーに固有のものです。サーバークラスのハードウェアを利用することで、成功率を向上させることができます。PCI 割り込み (INTx) に依存する古いデバイスは互換性がありません。
- 最後に、システムはシングル ルート入力/出力仮想化をサポートする必要があります。
ソフトウェア要件:
- オペレーティング システム: Windows Server 2016 (以降) または Windows 11/10。
- 機能: Hyper-V を有効にする必要があります。
- VM 世代:仮想マシンは第 2 世代である必要があります。
- ドライバー:すべての GPU ドライバーを最新バージョンに更新する必要があります。
GPU パススルーの制限:
GPU パススルーを使用する場合は、次の構成を避ける必要があります。
- 仮想マシンでは動的メモリを使用しないでください。
- GPU パススルーは、Windows Server 2019 Datacenter などの最上位の Windows エディションでのみ利用できます。
- Windows Subsystem for Linux が Hyper-V ホストに展開されている場合、コード 43 の VM エラーが発生する可能性があります。
- 高可用性やライブ VM マイグレーションなどのクラスタリング機能はサポートされていません。
- VM チェックポイントを使用した保存と復元はサポートされていません。
前述の要件を満たしたら、GPU パススルーを活用できます。
Hyper-Vホスト上のVMに物理ビデオカードを接続する
GPU パススルーを使用して Hyper-V ホスト上の VM に物理ビデオ カードを接続するには、以下の手順に従います。
- Intel-VTまたはAMD-V仮想化を有効にする
- GPUパススルー用にコンピュータを構成する
- Windows 11/10 の GPU パススルーを設定する
- Windows Server の GPU パススルーを設定する
それらについて詳しくお話ししましょう。
1] Intel-VTまたはAMD-V仮想化を有効にする
前提条件で述べたように、最初のステップはハードウェア仮想化を有効にすることです。したがって、Intel CPU を使用している場合は Intel-VT を有効にし、AMD ユーザーは AMD-V 仮想化を有効にする必要があります。
これを行うには、BIOS を起動し、[構成] > [仮想化テクノロジー] に移動して、[有効] に設定します。これらの手順は HP 専用であるため、リンクされた投稿にアクセスして、コンピューターで機能を有効にする方法を確認できます。
2] コンピュータをGPUパススルー用に設定する
次に、GPU パススルー用にホスト コンピューターを構成する必要があります。前述のように、まずハードウェア仮想化を有効にします。次に、IOMMU が有効になっており、自動チェックポイントが無効になっていることを確認する必要があります。
したがって、 IOMMU を有効にするには、ハードウェア仮想化を有効にする方法に関するリンクされたガイドを確認できますが、通常はデフォルトで有効になっています。PowerShell を開いて次のクエリを実行し、有効になっているかどうかを確認できます。
(Get-VMHost).IovSupport; (Get-VMHost).IovSupportReasons
True と表示されている場合は、機能が有効になっているので、次の構成に進むことができますが、False と表示されている場合は、この機能を有効にする必要があります。
次に、VM のすべてのチェックポイントを削除し、次のコマンドを使用して VM を無効にします。
Get-VM
Set-VM -Name NameOfVM -AutomaticStopAction TurnOff
注: 変数 NameOfVM を、前のコマンドを実行して取得できる仮想マシンの実際の名前に置き換えます。
3] Windows 11/10のGPUパススルーを設定する
まず、Windows クライアント オペレーティング システムで GPU パススルーを有効にする方法を学びましょう。
ビデオ カードが GPU パススルーをサポートしているかどうかを確認するには、次のコマンドを実行する必要があります。
ウィンドウズ11
Get-VMHostPartitionableGpu
ウィンドウズ10
Get-VMPartitionableGpu
次に、ホスト クライアントから VM にグラフィック ドライバーをコピーする必要があります。プロセスを簡素化するために、github.comから ZIP ファイルをダウンロードし、どこかに解凍することをお勧めします。
このスクリプトを実行するには、まず次の 2 つのコマンドを使用してスクリプトの実行を許可する必要があります。
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
コマンドを実行した後、次のコマンドを使用してスクリプトを実行する必要があります。VMをGPUパススルーに追加する前または後に実行できます。
.\Update-VMGpuPartitionDriver.ps1 -VMName <VMNAME> -GPUName "AUTO"
次に、次のコマンドを実行して、VM を GPU パススルーに追加します。
Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb
Add-VMGpuPartitionAdapter -VMName <VMNAME>
GPU パーティションを削除するには、– を実行しますRemove-VMGpuPartitionAdapter -VMName <VMNAME>
。
4] Windows ServerのGPUパススルーを設定する
Windows Server を使用している場合は、PowerShell の管理者特権モードで次のコマンドを実行して、32 ビット (32 ビット オペレーティング システムの場合は 3 GB) MIMO スペースのキャッシュと制限を設定する必要があります。
Set-VM -Name VMNAME -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb
これらの制限は、VM がデバイスにアクセスできるようにするメモリを定義します。learn.microsoft.com の Machine Profile スクリプトを使用して、正確な MIMO 制限を設定します。VM でリソース不足が見られる場合は値を調整します。32 ビットを超える MIMO スペースには 33280 MB が必要です。
次に、PCI Express デバイスの場所を確認する必要があります。そのためには、次のクエリを実行します。
Get-PnpDevice | Where-Object {$_.Present -eq $true} | Where-Object {$_.Class -eq "Display"}|select Name,InstanceId
そして
Get-PnpDevice -Class Display | ForEach-Object { Write-Output "$($_.FriendlyName) has a device id of $($_.DeviceId) and is located at $($_ | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths | Select-Object -ExpandProperty Data | Where-Object { $_ -like "PCIROOT*"})"; }
GPU が配置されている場所を確認する必要があります。 PCIROOT(0)#PCI(0200)のような位置にあるはずです。
最後に、以下の手順に従います。
- デバイス マネージャーを開き、[ディスプレイ アダプター] を展開し、ディスプレイ ドライバーを右クリックして、[デバイスを無効にする] をクリックします。
- PCI アドレスを変更した後、次のコマンドを実行して GPU ドライバーをマウント解除します。
Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0200)"-Force
- PCI アドレスと VM 名を変更した後、次のコマンドを実行して VM に GPU デバイスを割り当てます。
Add-VMAssignableDevice -VMName VMNAME -LocationPath "PCIROOT(0)#PCI(0200)"
- VM の電源をオンにし、デバイス マネージャーで物理ビデオ カードを確認します。
- NVIDIA または AMD の Web サイトからビデオ カード ドライバーをインストールします。
ホスト マシンに戻る場合は、VM をシャットダウンし、ホスト デバイスで次のクエリを実行します。
Remove-VMAssignableDevice -VMName VMNAME -LocationPath $locationPath
次に、次のコマンドを実行して、ビデオ カードを Hyper-V ホストに再接続します。
Mount-VMHostAssignableDevice -LocationPath $locationPath
それでおしまい!
コメントを残す