SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Intel NUC と Windows Server 2025 を使用した VM の GPU 割り当ての検証

leave a comment

Windows Server 2025 の Hyper-V では、従来からサポートされていた 個別のデバイス割り当て (DDA) による VM への GPU の割り当ての他に、GPU パーティション分割 (GPU-P) がサポートされるようになり、GPU アクセラレーションの使用方法が追加されています。

私の検証環境は Intel の NUC (現在は ASUS から提供) を使用しているのですが、この NUC を使用して、DDA / GPU-P が有効な VM の検証をしてみたのでその時の内容を。

今回使用している機器では、GPU-P は正式にサポートされているものではないため、基本的な動作を検証用途で確認することを目的としています。

使用した機器

検証環境

私が所持している NUC は 検証環境の Intel NUC について (基本情報 / Intel AMT 等) に記載してしているものとなります。

この NUC の中で NUC9VXQNX については拡張性があり、8 インチ (ショートサイズ) の GPU を搭載することが可能となっています。

この NUC に RTX 3050 のショートサイズのモデルを搭載することで検証環境としています。

使用したドライバー

今回、OS としては Windows Server 2025 を使用しているのですが、Windows 11 用のドライバー (576.52-desktop-win10-win11-64bit-international-dch-whql.exe) が inf ファイルの書き換え等を実施する必要なく、インストールすることができました。

GPU-P がサポートされる GPU は、サポートされている GPU に記載されているものが該当します。そのため RTX 3050 では、GPU パーティション分割の「物理 GPU デバイスを複数の仮想マシン (VM) と共有」は実現できました。

「各 VM は GPU 全体ではなく GPU の専用の一部分を取得」については、各環境の GPU 使用率は以下の画像のように見えていました。

テキストの画像のようです

「Add-VMGpuPartitionAdapter」を使用して、GPU 全体を割り当てているからこのような見え方になっているのかが不明でした…。

また、現状、この環境では「Set-VMGPUPartitionAdapter」で割り当てを変更し、使用される GPU の調整が上手くできていません。

 

Windows Server の Hyper-V の GPU アクセラレーション

Windows Server の Hyper-V でサポートされる GPU については Windows Server での GPU アクセラレーションを計画する に記載されています。

Azure Local でサポートされる GPU は NVIDIA のみとなっていますが、Windows Server の場合は、NVIDIA / AMD / Intel がサポートされており、サポートされる GPU の範囲が広くなっています。

サポートされる GPU の範囲は広いですが、コンシューマー向けの GPU (NVIDIA GeForce / AMD Radeon / Intel Arc 等)は Windows クライアント向けとなり、今回は偶々 Windows Server でもドライバーを認識させることができました。

これらの GPU はWindows Server は正式にサポートされていないかとおもいますので、本来はデータセンター向けの GPU (NVIDIA Tesla / AMD Instinct / Intel Gaudi 等) を使用する必要があるかと。

データセンター向けの GPU になると NVIDIA については、PowerEdge:Windows ServerでNVIDIAコントロール パネルにオプションがない に記載されているように、Data Center Driver for Windows では、TCC (Tesla Compute Cluster) での認識となり、グラフィカル処理での GPU の使用で必要となる WDDM (Windows Display Driver Model) で使用するためには、有償ライセンスの vGPU ソフトウェア が必要となるようですので、データセンター向けの GPU を使用する場合には追加のソフトウェアライセンスが必要かは意識しておく必要がありそうですね。(NVIDIA の GPU の場合、GPU-P を使用するためには、vGPU ソフトウェアが必要となります)

NVIDIA の vGPU については、90 日間の評価版 が提供されていますので、基本的な動作確認については、評価版の利用も検討できそうですね。

 

Azure の GPU インスタンスの場合

Azure の場合は、NVIDIA GPU ドライバー拡張機能 を介して、NVIDIA のGPU ドライバーがインストールされるようです。

Windows を実行している N シリーズ VM に NVIDIA GPU ドライバーをインストールする に記載されていますが、Azure では「これらのドライバーには、Azure での GRID 仮想 GPU ソフトウェアのライセンスが含まれています。 NVIDIA vGPU ソフトウェア ライセンス サーバーを設定する必要はありません。」という記載があり、vGPU ソフトウェアライセンスが追加発生しないような構成となっているようです。

 

DDA による GPU の利用

個別のデバイス割り当て (Discrete Device Assignment: DDA) による GPU の割り当てについては、個別のデバイス割り当てを使用してグラフィックス デバイスを展開する の作業を実施していきます。

大きな作業の流れとしては、次のようになります。

  1. ホスト OS で GPU を使用することができるようにデバイスドライバーをインストール
  2. ホスト OS でデバイスマネージャーから GPU のデバイスを無効化
  3. ホスト OS で「Dismount-VMHostAssignableDevice」を実行し、GPU のマウントを解除
  4. DDA 用に VM を構成
  5. ホスト OS で DDA による GPU 割り当てを使用する VM に対して「Add-VMAssignableDevice」を実行
  6. VM を起動して、「1.」で使用したデバイスドライバーをインストール

 

ドキュメントに記載されている作業としては上記になると思いますが、私の環境では、上記の対応だけでは次のエラーが発生しました。

‘VM-01’ Virtual Pci Express Port (インスタンス ID D645D909-86AB-4C7E-B2F7-5746EB717E96): 電源をオンにできませんでした。エラー: ‘要素が見つかりません。’ (0x80070490)。(仮想マシン ID A08E4904-02BB-427C-A010-985D1949614A)

現在のグループ ポリシーの設定に準拠していない PCI Express デバイス ‘PCIP\VEN_10DE&DEV_2584&SUBSYS_364119DA&REV_A1\4&2EC824B8&0&0008’ を割り当てることができませんでした。詳細については、HyperV\RequireSecureDeviceAssignment と HyperV\RequireSupportedDeviceAssignment を参照してください。

エラーに表示されている次の値はレジストリの値となり、このレジストリの値を「HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\HyperV」のキーの配下に追加します。

  • RequireSecureDeviceAssignment (DWORD): 0
  • RequireSupportedDeviceAssignment (DWORD): 0

これらの値については、以下の情報に記載があり、サーバー SKU のセキュリティポリシーを無効にする目的での設定となるようです。

これで DDA により、VM に対してホスト OS の GPU を直接割り当てることができます。

 

GPU-P による GPU の利用

GPU パーティション分割 (GPU Partitioning: GPU-P) による GPU の割り当てについては、仮想マシンへの GPU のパーティション分割と割り当て の作業を実施します。

大きな作業の流れとしては、次のようになります。

  1. ホスト OS で GPU を使用することができるようにデバイスドライバーをインストール
  2. ホスト OS で「Set-VMHostPartitionableGpu」を実行し、パーティション数を構成
  3. ホスト OS で GPU-P による GPU 割り当てを使用する VM に対して「Add-VMGpuPartitionAdapter」を実行

ドキュメントに記載されている作業としては上記になると思いますが、私の環境では上記の対応だけでは次のエラーが発生しました。

‘VM-01’ は起動できませんでした。(仮想マシン ID A08E4904-02BB-427C-A010-985D1949614A)

‘VM-01’ GPU Partition: リソースの予約を終了できませんでした。エラー ‘システム リソースが不足しているため、要求されたサービスを完了できません。’ (0x800705AA)。(仮想マシン ID A08E4904-02BB-427C-A010-985D1949614A)

これについては、DDA による GPU の利用に記載したレジストリの設定 (RequireSecureDeviceAssignment / RequireSupportedDeviceAssignment ) を行うことで解決しました。

しかし、起動した VM で GPU のデバイスが認識していない状態となっていました。(「問題が発生したのでこのデバイスは停止しました。 (コード 43)」が発生)

image

これについては、VM 上でいくつかの作業を実施する必要があり、次の情報を参考にしています。

 

準仮想化の対応

GPU-P については、準仮想化によりデバイスを認識させているようですので DriverStore in the VM の対応が必要となるようでした。

VM に対して次のファイルコピーを実行しています。

  • ホスト OS の「C:\Windows\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_2c61c4d89b199ea8」を VM の「C:\Windows\system32\HostDriverStore\FileRepository」にコピー
  • ホスト OS の「nvapi64.dll / nvcuda.dll / nvEncodeAPI64.dll / nvml.dll / nvofapi64.dll」を VM の「C:\Windows\system32」にコピー

 

VM MMIO (Memory-mapped I/O) の設定

ホスト OS で VM に対して次のコマンドを実行します。

$vmName = "VM-03"
Set-VM -GuestControlledCacheTypes $true -VMName $vmName
Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vmName
Set-VM -HighMemoryMappedIoSpace 32Gb -VMName $vmName

 

これらの対応を行うことで GPU-P による VM への GPU 割り当てを行うことができました。

 

現在の設定では GPU を全て VM に割り当ててしまっていますが、Set-VMGpuPartitionAdapter (or Add-VMGpuPartitionAdapter) で割り当ての設定を調整することができるようです。

私の環境ではまだ期待する動作の設定ができていないので、ここは要調査で。

ここまでの内容で VM に DDA / GPU-P を使用して GPU を割り当てることができたので、細かな調査を進めて本投稿をブラッシュアップして行けそうです。

 

参考資料

Azure Local の GPU サポート

 

Windows Server の Hyper-V の GPU サポート

 

vGPU ソフトウェア

 

Tech Community

 

NVIDIA vGPU

Share

Written by Masayuki.Ozawa

6月 4th, 2025 at 9:53 am

Leave a Reply