Hyper-V GPUパススルー:初心者向け完全ガイド

状況によっては、仮想マシン上でグラフィックアダプタやディスプレイアダプタとも呼ばれるビデオカード(GPUを搭載したもの)を使用する必要が生じる場合があります。しかし、Hyper-V 仮想マシンでエミュレートされたビデオカードを使用するだけでは、OpenGL、Direct3D、CUDA、およびその他のハードウェア関連機能を利用するタスクには不十分な場合があります。 幸いなことに、Hyper-VのGPUパススルー機能を使用することで、Hyper-Vホスト上の仮想マシンに物理ビデオカードを接続することが可能です。

Hyper-V バックアップ用 NAKIVO

Hyper-V バックアップ用 NAKIVO

Hyper-V向けのエージェントレスかつアプリケーション認識型のバックアップ。ランサムウェア対策、バックアップからのVM即時起動、その他の仮想/物理プラットフォームへの対応など。

GPUパススルーとは何ですか?

GPUパススルーは、物理ホストに搭載された物理グラフィックカードを、エミュレーションを行わずに仮想マシンに接続できる機能です。これにより、仮想マシンは物理グラフィックアダプタを直接利用できるようになります。

デフォルトでは、Hyper-V仮想マシンはHyper-VホストのCPUに依存するエミュレートされたグラフィックカードを使用します。しかし、この方法では最も基本的なタスクしか処理できず、より高いグラフィック性能を必要とするタスクには不十分です。

注: GPUは、マザーボード上のチップセットや、プロセッサとも呼ばれる中央処理装置(CPU)に統合されることがあります(最新のIntelプロセッサ世代および関連アーキテクチャの場合)。高性能GPUは、PCI Expressインターフェース(PCIe)を介してマザーボードに接続される、ディスクリートグラフィックボード上のチップです。

Hyper-VにおけるGPUパススルーの主な利点

Hyper-V仮想マシンでGPUパススルー経由で接続された物理グラフィックカードは、特定のシナリオにおいて、一般ユーザー、開発者、デザイナーなどが利用できます。最も一般的なシナリオは以下の通りです:

  • グラフィック処理を多用するワークロード(グラフィックデザイン、3Dモデリング、AutoCADによる作図、エンジニアリングおよび計算、ゲームデザインおよびゲーム開発など)を扱うアプリケーションの実行。ハードウェアアクセラレーションによるレンダリングの利用。
  • ハードウェアアクセラレーション機能を備えたゲームの実行。物理的なグラフィックカードがないと、一部のゲームが動作しない場合があります。
  • GPUを使用して機械学習(ML)および人工知能(AI)アプリケーションを実行する。

GPUパススルーモードの利点は以下の通りです:

  • Better graphics performance グラフィック負荷の高いアプリケーションやゲームにおいて、仮想マシンがグラフィックカードに直接アクセスできるようになります。動画の再生がよりスムーズになります。ハードウェアアクセラレーションによるグラフィック処理や最新のAPIが利用可能です。
  • Flexible utilization of hardware resources. 専用のワークステーションを使用することが最適ではない場合において、1台のHyper-Vホストを使用して、グラフィックス処理の負荷が不均一な複数の仮想マシン(VM)を実行する。
  • Cost-efficiency. GPUパススルーは、特定のシナリオにおいて、特にハードウェアリソースの利用という点でコスト削減につながります。この機能は、仮想デスクトップインフラストラクチャ(VDI)にも活用できます。
  • Security. セキュリティ上の利点は、一般的な仮想化と同様です。仮想マシン(VM)の脆弱性が悪用された場合でも、VMは隔離された環境で実行されるため、問題を軽減できる可能性が高くなります。深刻な問題が発生した場合でも、バックアップからVMを迅速に復元することが可能です。

要件

Hyper-V ホスト上で GPU パススルー機能を備えた仮想マシンを構成するには、特定のハードウェアおよびソフトウェア要件を満たす必要があります。すべてのグラフィックカードがこの機能に対応しているわけではありません。

GPUパススルーのハードウェア仕様

  • Hyper-V ホストの CPU は、Intel-VT または AMD-V 仮想化機能をサポートしている必要があります。Hyper-V ホストの UEFI/BIOS 設定で、お使いのプロセッサに対応した仮想化機能を有効にする必要があります。
  • Hyper-V ホストの CPU は、入出力メモリ管理ユニット (IOMMU) をサポートしている必要があります。この機能は、ビデオカードや GPU のパススルーを含む PCI パススルーに必要です。
  • NVIDIA GRID や AMD MxGPU(Multiuser GPU)などの GPU 仮想化技術をサポートする GPU を搭載したグラフィックカード。これらの技術はベンダー固有のものです。サーバークラスのハードウェアを使用すると、成功率が向上します。PCI 割り込み(INTx)を使用する旧式のデバイスはサポートされていません。
  • エラーを防ぐため、SR-IOV(シングルルート入出力仮想化)をサポートし、有効にする必要があります。

Hyper-V パススルーのソフトウェア要件

  • Windows Server 2016 以降(推奨)
  • Windows 10 または Windows 11
  • Windows で Hyper-V ロール(機能)を有効にする必要があります。
  • GPUパススルーを使用する場合は、Hyper-VホストおよびVMゲストに最新のグラフィックスドライバーをインストールする必要があります。
  • DDAを使用したGPUパススルーには、第2世代Hyper-V仮想マシンのみを使用する必要があります。

制限事項および未対応の設定

以下の設定に注意してください ではない GPUパススルーに対応:

  • Hyper-Vのダイナミックメモリ(VMに必要なRAMを動的に割り当てたり解放したりする機能)を使用しているVMでは、GPUパススルーを利用できません。
  • GPUパススルーは、Windows Server 2019 Datacenter などの最上位エディションでのみ利用可能です。
  • Hyper-V ホストに Windows Subsystem for Linux が導入されている場合、仮想マシンでコード 43 のエラーが発生することがあります。
  • 高可用性やVMのライブマイグレーションなどのクラスタリング機能はサポートされていません。
  • VMチェックポイントを使用した保存および復元はサポートされていません。

GPUパススルーの設定:知っておくべきこと

GPUパススルーの設定は、一般的なVM設定作業よりも複雑になる場合があることに留意してください。GPUパススルーを使用する場合、ビデオカードのエミュレーションにデフォルトの方法を使用すると、仮想環境のスケーラビリティはそれほど高くありません。 GPUパススルー機能を使用しているVMは、ホストにインストールされた物理グラフィックアダプタに紐付けられているため、Hyper-Vホスト間で移行することはできません。

Windows Server 2016までは、仮想マシンへのGPUパススルーにRemoteFX機能が使用されていました。Windows Server 2019およびWindows 10ビルド1809以降、RemoteFX機能は 販売終了また、グラフィックカードを通すには、Hyper-Vのダイレクトデバイス割り当て(DDA)のみが使用可能です。これは、NVMeストレージデバイスを含む他のPCI/PCIeデバイスと同様です。DDAは、VMwareのPCIパススルーに相当する機能です。

RemoteFXは、RDP(Microsoft Remote Display Protocol)の拡張機能であり、ホストに接続されたUSBデバイスを仮想マシンに接続するために使用されます。それに応じて、グラフィックカードにはRemoteFX vGPUが使用されていました。 RemoteFXでは、1つのGPUを複数のVMで共有することが可能でしたが、これはDiscrete Device Assignmentでは不可能です。 また、RemoteFXでは、各VMに割り当てられる専用ビデオメモリの容量が1GBに制限され、最大FPSは30でした。DDAの場合、このようなビデオRAMの制限はなく、FPSを60に設定できます。

Windows Server 2016 Datacenter、またはかつてRemoteFXをサポートしていたその他のWindowsバージョンやエディションを使用している場合、 Windows Update Hyper-V からこの機能を完全に削除し、潜在的なセキュリティ上の脆弱性を回避するためです。マイクロソフトの公式見解によると、Hyper-V のアーキテクチャ上の脆弱性を回避するために RemoteFX が削除されました。RemoteFX は、各仮想マシン(VM)に専用の物理グラフィックカードを割り当てることができない高密度仮想環境において、有用な機能でした。 なお、DDAはWindows Serverのバージョンで動作します(Windows 10などのクライアント版では動作しません)。

PowerShellでのGPUパーティショニングは、クライアント版のWindowsにおける解決策となり得ますが、ホストOSからゲストOSへビデオドライバをコピーする(ゲストOSのOSはホストOSと同じである必要があります)作業は複雑です。Generation 2 VMを使用する必要があります。この場合、グラフィックカードはGPUパーティショニングに対応している必要があります。

Hyper-V での GPU パススルーの設定

以下の手順に従って、環境の準備を行い、Hyper-VのGPUパススルーを設定してください。

GPUパススルーの設定準備

  1. お使いのハードウェアおよびソフトウェアがGPU仮想化に対応していることを確認してください。
  2. Hyper-V ホストの UEFI/BIOS で、お使いの CPU の Intel VT-d または AMD-V 仮想化機能を有効にしてください。
  3. IOMMUを有効にしてください。IOMMUの設定は、マザーボードやUEFI/BIOSのバージョンによって有効にする方法が異なります。場合によっては、この設定がノースブリッジの設定項目にあることもあります。あるいは、Intel VT-dやAMD-Vを有効にする際に、IOMMUも同時に有効になることがあります。UEFI/BIOSで"Memory Remap"という機能を確認してください。

    Hyper-V ホストマシンで IOMMU が有効になっているかどうかは、PowerShell コマンド(管理者として実行)で確認できます:

    (Get-VMHost).IovSupport; (Get-VMHost).IovSupportReasons

    True – 有効;False – 無効。

  4. GPUパススルーを使用して設定するVMのチェックポイントをすべて削除してください。

    VMで自動チェックポイントが有効になっている場合、次のPowerShellコマンドを使用して無効にできます:

    Set-VM -Name VMName -AutomaticStopAction TurnOff

Windows Server における GPU パススルー

  1. 32ビット(32ビットOSの場合は3GB)MIMOスペースのキャッシュと制限を設定するには、管理者として次のPowerShellコマンドを実行してください:

    Set-VM -Name VMName -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb

    あるいは、3つの別々のコマンドを使用することもできます:

    Set-VM -GuestControlledCacheTypes $true -VMName YourVMName

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName YourVMName

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName YourVMName

    これらの制限は、VMからデバイスにアクセスできるメモリの範囲を定義します。 マシンプロファイルスクリプト Microsoftの推奨値に従って、MIMOの制限値を最も正確に設定してください。最適な値は、使用するビデオアダプタによって異なる場合があります。VMの起動時にリソース不足のメッセージが表示された場合は、VMをシャットダウンし、これらの値を変更してください。32ビットを超えるMIMO空間には、33280 MBが使用されます。

  2. パススルーしたいグラフィックカードに対応するPCI Expressデバイスの物理アドレス(デバイスの配置パス)を確認してください。

    これは"デバイスマネージャー"で行うことができます。"デバイスマネージャー"は、次のコマンドを実行して開くことができます。 devmgmt.msc コマンド。デバイスマネージャーで:

    • "ディスプレイアダプタ"セクションで必要なディスプレイアダプタを右クリックし、[ Properties コンテキストメニューで。
    • [選択] Details アダプタのプロパティウィンドウの[タブ]。
    • [選択] Location paths ドロップダウンメニュー内の"プロパティ"を選択し、その値をコピーします(値はコンピュータごとに異なる場合があります)。

      Viewing a location path of a video card

    PowerShell を使用して、デバイスの保存場所を確認することもできます:

    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*" })"; }

    出力には、次のような文字列が含まれるはずです:

    ‘PCIROOT(0)#PCI(0300)#PCI(0000)’

    Identifying the location path of the video card in PowerShell

  3. "デバイスマネージャー"でこのグラフィックカードを無効にします。ビデオアダプタを右クリックし、[無効にする] をクリックします。 Disable device コンテキストメニューで。

    Disabling a video card in a Device Manager

  4. PowerShell で動作しないディスプレイアダプタを取り外す:

    Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -Force

    場所:

    -Force パーティションドライバ(オプション)がインストールされていない場合に必要です。これは、ゲストOSにインストールされたグラフィックカードのドライバではありません。場合によっては、デバイスメーカーがこのセキュリティ対策用ドライバを提供していることがあります。このドライバをインストールする場合は、ホストパーティションからPCI Expressデバイスをアンマウントする前にインストールしてください。

    このコマンドで使用されているパスはあくまで例示のためのものであり、実際にはご自身の環境に合わせた値を使用してください。

  5. 次のコマンドを実行して、DDA経由でGPUパススルー機能を備えた仮想マシンにこのビデオカードを割り当てます:

    Add-VMAssignableDevice -VMName VMName -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"

  6. VMの電源を入れ、Windows VMの"デバイスマネージャー"に、物理ビデオカードと、"Microsoft Hyper-V ビデオ"という名前のデフォルトのエミュレートされたビデオアダプタがともに表示されているか確認してください。
  7. 仮想マシンのゲストOSにグラフィックカードのドライバをインストールしてください。グラフィックドライバは、NVIDIAまたはAMDの公式ウェブサイトからダウンロードできます。
  8. 仮想マシンからビデオカードを切断したい場合は、仮想マシンを停止し、ホスト上で次のコマンドを実行してください:

    Remove-VMAssignableDevice -VMName YourVMName -LocationPath $locationPath

    次に、ビデオカードをHyper-Vホストに再接続するコマンドを実行します:

    Mount-VMHostAssignableDevice -LocationPath $locationPath

Windows 10での設定

Windows 10 や Windows 11(Windows 10 ビルド 1903 以降)などのクライアント版 Windows では、Hyper-V の GPU パススルーを設定する手順が異なり、GPU パーティショニング方式を使用して設定することが可能です:

  1. PowerShell コマンドを使用して、お使いのグラフィックカードが Windows 10 で GPU パーティショニングに対応しているかどうかを確認してください:

    Get-VMPartitionableGpu

    Windows 11 では、コマンドは次のとおりです:

    Get-VMHostPartitionableGpu

  2. VMへのGPUパススルーについては、 Add-VMGpuPartitionAdapter コマンドレットが使用されます。ただし、Hyper-V ホストマシンから仮想マシンへグラフィックドライバをコピーする必要があります。なお、ドライバのバージョンは同一である必要があります。無料の Easy-GPU-PV ドライバーのコピーは複雑な作業となるため、このスクリプトを使用すると便利です。このスクリプトをZIPファイルでダウンロードし、その内容をHyper-Vホスト上のフォルダーに解凍してください。このスクリプトは、Windows Subsystem for Linux (WSL2) および Windows Sandbox で使用される仕組みを活用することで、GPUパラバーチャライゼーションを利用できます。
  3. PowerShell を管理者として開き、スクリプトの実行を許可するコマンドを実行します:

    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

  4. 仮想マシンをシャットダウンします。ダウンロードしたスクリプトを解凍したフォルダからスクリプトを実行し、Hyper-V ホストにインストールされているグラフィックドライバを仮想マシンにコピーして、仮想マシンにドライバをインストールします。

    .Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO"

  5. GPUパススルーとビデオカードの関連付けが可能な状態になるよう、VMを設定します:

    Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb

    Add-VMGpuPartitionAdapter -VMName YourVMName

    • Hyper-V ホストでグラフィック ドライバーを更新する場合は、VM のグラフィック ドライバーも更新する必要があります。その際、VM の電源はオフになっている必要があります。

      .Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO"

    • 仮想マシンからビデオカードを取り外す必要がある場合は、次のコマンドを使用できます:

      Remove-VMGpuPartitionAdapter -VMName "YourVMName"

ビデオカードが仮想マシンに正常に接続されている場合、仮想マシンの"デバイスマネージャー"に適切なディスプレイアダプタが表示されます。また、透過効果など、ゲストOSのWindowsデスクトップテーマの視覚効果も確認できます。

なお、GPUパススルーを設定した後でも、一部のゲームやアプリケーションが動作しない場合があります。これは、アプリケーションがグラフィックカードの互換性チェックを強制的に実行した場合に発生することがあります。 ゲストOSにおける接続されたビデオカードに関する情報は、ホストOS上の情報とは異なります。一部のアプリケーションは、"VM内で実行中"かどうかをチェックする機能を備えています。

OpenGLを使用するアプリケーションがVM内で動作しない場合は、 OpenGL互換パック 場合によっては役立つことがあります。

Windows 10 および Windows 11 で GPU パーティショニング方式を使用する場合、デバイスマネージャーに表示されるビデオアダプターのモデルは、Hyper-V ホスト上に表示される物理グラフィックアダプターのモデルとは異なります。このデバイスには、Microsoft 独自のドライバーが割り当てられていることが確認できます。NVIDIA コントロールパネル(または AMD コントロールパネル)などのベンダー固有のツールは、VM 内では利用できません。

もう1つ発生しうる問題として、RDPセッションから切断せずにRDP接続を閉じた場合が挙げられます。この場合、すべてのGPUメモリが切断される可能性があり、GPUを使用しているすべてのアプリケーションから、ビデオメモリにアクセスできないという通知が表示されます。この状況ではこれらのアプリケーションは動作を停止し、RDP経由で再接続しても問題は解決しません。GPUを使用しているアプリケーションを再起動する必要があります。

GPUパススルーに関するトラブルシューティング

Hyper-VのGPUパススルーを設定し、仮想マシンにグラフィックカードを接続したにもかかわらず、グラフィックカードが正常に動作しない場合は、以下の点を確認してください:

  • 最新のグラフィックドライバーがインストールされており、ドライバーに関連するエラーがないことを確認してください。"デバイスマネージャー"を開き、デバイスとドライバーの状態を確認してください。ドライバーは、Windows Updateではなく、各メーカー(NVIDIA、AMD、Intel)の公式サイトからダウンロードしてインストールする必要があります。
  • 仮想マシン(VM)に十分なMIMOスペースが割り当てられていることを確認してください。
  • お使いのグラフィックアダプタのメーカーが、GPUパススルー設定に対応しているか確認してください。すべてのビデオカードがこの機能をサポートしているわけではありません。メーカーによっては、上位モデルのビデオカードでのみGPUパススルーを有効にしている場合があります。
  • 仮想マシン内で動作するアプリケーションが正常に動作するには、お使いのグラフィックカードとそのドライバに対応している必要があります。
  • リモートデスクトップ経由で仮想マシンに接続する際にGPUを使用するようにグループポリシーを設定します:

    Computer ConfigurationAdministrator TemplatesWindows ComponentsRemote Desktop ServicesRemote Desktop Session HostRemote Session EnvironmentUse hardware graphics adapters for all Remote Desktop Services sessions

    グループポリシーの値を次のように設定します Enabled.

  • "T"のようなエラーが表示された場合は、オブジェクトが見つからなかったため、操作は失敗しました""または エラー 12、レジストリキーを

    HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsHyperV

    以下の値で:

    RequireSecureDeviceAssignment = 0 (REG_DWORD)

    RequireSupportedDeviceAssignment = 0 (REG_DWORD)

    これらの値は、PowerShell コマンドを使用して設定できます:

    Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsHyperV" -Name "RequireSecureDeviceAssignment" -Type DWORD -Value 0 -Force

    Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsHyperV" -Name "RequireSupportedDeviceAssignment" -Type DWORD -Value 0 -Force

  • VM内のグラフィックスドライバに対するハイパーバイザーのチェックを無効にします。この設定は、 エンタープライズ Windows ドライバー キット (WDK)。
    • WDKのISOファイルを仮想マシンの仮想DVDドライブにマウントします。
    • 実行 E:LaunchBuildEnv.cmd (ここで E: (VM内の仮想DVDドライブ)を選択し、次に powershell コマンド。
    • ファイルがあるディレクトリに移動して Remove-HypervisorChecks.ps1 スクリプトが保存されている場所。
    • ビデオドライバのハイパーバイザーチェックを無効にするコマンドを実行します(NVIDIAを例として):

      ./Remove-HypervisorChecks.ps1 -Nvidia -DriverPath "C:path-to-driverpackage.exe"

    • スクリプトの実行が完了するまでお待ちください。
    • 準備したドライバー(a patched-driver.zip ファイル)を仮想マシンに追加し、仮想マシンでテストモードを有効にして、ゲストOSにドライバをインストールします。
  • もし~に遭遇した場合は エラー 43仮想マシンのGPUパススルーを使用する際は、GPUとサウンド用PCIバス(NVIDIA製ビデオカードにはサウンド機能も搭載されている場合があります)が同じバス上に配置されるようにしてください。
  • コマンドを実行した際に、次のようなエラーが表示された場合は:

    Update-VMGpuPartitionDriver.ps1 -VMName "YourVMName" -GPUName "AUTO"

    このエラーは、仮想ハードディスク上に複数のパーティション(ボリューム)が存在することが原因で発生する場合があります。システム(OS)以外のパーティションに"隠し"属性を設定するか、必要なデータをコピーした後、これらのパーティションを一時的に削除してみてください。あるいは、PowerShell スクリプトまたはコマンド内で、必要なシステム(OS)パーティションを明示的に指定するという方法もあります。

結論

Hyper-Vホスト上でGPUパススルー機能を備えた仮想マシンを使用することは、場合によっては最適な解決策となりますが、その制限事項には注意が必要です。仮想マシンでディスクリートグラフィックカードを使用する場合、一般的にサーバーグレードのハードウェアとWindows Serverオペレーティングシステムが推奨されます。設定を開始する前に、対応しているソフトウェアとハードウェアを確認してください。また、仮想マシンのグラフィックカード設定中に問題が発生した場合に、データや時間を失わないよう、Hyper-V仮想マシンのバックアップを忘れずに行ってください。

試してみてください NAKIVO Backup & Replication

試してみてください NAKIVO Backup & Replication

無料トライアルをご利用いただき、本ソリューションのデータ保護機能をすべてお試しください。15日間無料です。機能や容量の制限は一切ありません。クレジットカードも不要です。

People also read