株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

Windows Server 2025 Hyper-VでGPU仮想化!

みなさん、こんにちは。ネットワールドでSA(ソリューションアーキテクト)として活動している後藤です。

Windows Server Hyper-V、執筆時点でいろいろな意味で注目されていると思います。再注目、といったほうがいいかもしれませんが、Windows Server 2008に実装されたHyper-V 1.0から様々な進化を積み重ねてきたMicrosoftのハイパーバイザーです。

Microsoftのハイブリッドクラウドソリューションである「Azure Local」も、ハイパーバイザーとしてHyper-Vを採用しています。

そんなHyper-Vですが、執筆時点の最新版である「Windows Server 2025 Hyper-V」では、いくつかの新機能が追加されていることを皆様ご存じでしょうか?

Windows Server Hyper-VはWindows Serverの標準機能であるため、機能強化をはじめとする新機能はWindows Serverの新機能を紹介するページに記載されています。

learn.microsoft.com

公式ドキュメントでは8つの項目で新機能が紹介されています。

その中の「Hyper-Vマネージャーでの新規作成仮想マシンの既定値が第2世代に変更」は、機能強化ではなく地味な仕様変更ですが、管理者のストレス軽減に一役買うと思います。

今までHyper-Vマネージャーで仮想マシンを作成しようとすると、デフォルトが第1世代だったので、第2世代仮想マシンを作るのにいちいち変える必要がありました。

特別な理由がない限り、現在作成する仮想マシンは第2世代仮想マシンだと思います。それこそ昔はLinuxの仮想マシンを作成するときは第1世代の仮想マシンを作っていましたが、今はLinuxも第2世代仮想マシンに対応してますので、地味ですが重要なストレス軽減策ですね。

他は新機能であったり機能強化だったりするわけですが、その中でも注目の機能が以下のものになります。

  • 動的プロセッサ互換性モード
  • GPU パーティション分割
  • ネットワーク ATC
  • ワークグループ クラスター

今回は、この中から「GPU パーティション分割」を紹介したいと思います。

1:最初に注意事項とお願い

本記事は、筆者の知りうる公開情報と実機検証をもとに記述しています。

内容については、正確を期することを心がけていますが、万が一誤った記述があればご指摘いただけると幸いです。

また、Microsoftの公式見解が必要な場合は、Microsoftサポートまでお問い合わせいただけますよう、よろしくお願いします。

2:GPU仮想化とHyper-Vの歴史

最近のAIを語るうえでGPUは欠かせないコンポーネントの一つですね。

Graphics Processing Unit(グラフィックス プロセッシング ユニット)、略してGPUですが、元々はその名の通りグラフィック処理の専用プロセッサでしたが、2010年代に普及したGPGPU(General-purpose computing on graphics processing units: GPUによる汎用計算)にて画像処理以外の用途に利用されるようになり、現在のAI用途で使われるようになりました。

GPU仮想化は、GPUを仮想化して1つの物理GPUを複数の仮想マシンで共有する技術になります。いわゆるハードウェア仮想化であり、CPUを仮想化して仮想マシンに提供するのと同様に、GPUも仮想マシンで共有しようよ、という話ですね。

Hyper-Vはハードウェア仮想化技術なので、さまざまなハードウェアを仮想化して仮想マシンに提供することができますが、GPUも当然仮想化の対象になります。

Hyper-Vでは「Remote FX」という機能でGPUを仮想化して、仮想マシンに提供することが可能です(RemoteFX vGPU)。Hyper-VホストにGPUを刺すことで、Hyper-Vホスト上の複数の仮想マシンでGPUを共有可能です。というか、「可能でした」といったほうが良いですね。

Remote FXはWindows Server 2008 R2 SP1のHyper-Vで初めて搭載されましたが、2020年7月に「セキュリティ上の脆弱性」を理由に非推奨化され、2021年にリリースされたKB4570006にあるとおり、Windows セキュリティ更新プログラムで無効化/削除されてしまいました。

support.microsoft.com

サポートされていた機能がWindows Updateで無効になるという、あまりない経験をさせてもらった機能として記憶しています。

それ以来、Windows Server Hyper-Vで仮想マシンにGPUを提供する機能は、デバイスを直接仮想マシンにマッピングして占有利用する「個別デバイス割り当て(Discrete Device Assignment:DDA)」が主流でした。

DDAは前述の通りPCIデバイスをそのまま仮想マシンに提供する機能になるため、仮想化しておらず、割り当てた仮想マシンが占有してしまいます。つまり複数の仮想マシンでGPUを使いたい場合には、Hyper-Vホストに複数のGPUを刺す必要があるわけです。

物理の世界とあまり変わりませんね。

これではあまりにも、ということで、Microsoftが新たにGPU仮想化機能として実装したのが「GPU パーティション分割」です。

この機能が実装された最初のOSはAzure Stack HCI OSでした。Microsoftのハイブリッドクラウドソリューションである「Azure Local」ですね。その機能がWindows Server Hyper-Vでも同じ機能が使えるようになって、Windows Server 2025で「GPU パーティション分割(GPU-P)」が使用可能になりました。

Azure LocalもWindows Server Hyper-Vも、同じHyper-Vを使用していますので、共通コンポーネントを使っている以上、Hyper-Vのビルドが同じであればどちらでも同じ機能が使えるというのは道理ですね。

Azure LocalとWindows Server Hyper-Vの違いって何? に興味がある方は過去記事をご参照ください。

blogs.networld.co.jp

3:Windows Server 2025 Hyper-VでのGPU パーティションの要件

GPU-Pを動かすためのハードウェアを確認してきます。

まずGPUですが、Windows Server 2025 Hyper-VのGPU-PもAzure LocalのGPU-Pと似たようなもので、限定されたNVIDIAのGPUでのサポートになっています。

learn.microsoft.com

メジャーどころは押さえていますね。

ただし、別のページをみると、サポートドライバーという形でIntelやAMDといったメーカーへの言及もありますので、将来的にはWindows Server Hyper-VではNVIDIA以外のGPUでもサポートされるのかなぁ、と淡い期待もあります。

learn.microsoft.com

そんなわけで、Windows Server 2025 Hyper-VでGPU-Pを評価する場合には、対応しているNVIDIAのGPUを用意しましょう。今回の記事の中では補助電源のいらないNVIDIA A2を利用しました。一応GPU-P対応製品です。

また、NVIDIA GPUでGPU-Pを導入する際には専用のドライバー(Virtual GPU Software)が必要になります。

試用版もありますので、GPUだけは手元にあるんだけど、という方は試用版の利用も検討してみてください。

www.nvidia.com

続いて、CPU等の要件ですが、Windows Server 2025 Hyper-Vでの要件は以下のドキュメントの通りです。

learn.microsoft.com

CPU要件は、GPU-Pでライブマイグレーションを行う場合に必要な要件です。

単体の評価環境であれば、要件を満たしていないCPUでも問題ないかと思います(検証環境では動きました)。

あと、要件としていくつかのドキュメントで「必須ではない」と書いてあるのですが、「シングル ルート IO 仮想化 (SR-IOV) インターフェイスを使用します」とも書いてあるので、SR-IOVを使用するに対応したハードウェアを利用したほうが良いかと思います。

SR-IOVなどの機能要件については、公式ドキュメントをご確認ください。

learn.microsoft.com

SR-IOVもCPUによって対応/非対応がありますので、ハードウェアメーカーにご確認ください。例えばIntel Xeonプロセッサでもワークステーション向けのプロセッサでは対応していません。

www.intel.co.jp

あとはゲストOSの要件ですが、これは問題ないでしょう。

なお、もう少し必要な要件があったりするので、NVIDIAのドキュメントも確認してください。

docs.nvidia.com

Microsoftのドキュメントでは「必須ではない」と書いてあるSR-IOVがNVIDIAのドキュメントでは必要と書いてあるので、有効化すべきでしょう。あとMicrosoftのドキュメントにはなかった「Above 4G Decoding」の設定も必要とのこと。サーバーのBIOS/UEFIユーティリティで双方有効にしましょう。

ある意味CPU要件に関連する事項となりますが、いろいろと検証環境で動かしていて、GPU-Pが動くパターンと動かないパターンがありました。

確認してみると、Sandy Bridge ENシリーズのプロセッサ搭載機ではうまく動かず、Haswellシリーズのプロセッサ搭載機で動いた、という感じでした。Sandy Bridge ENシリーズは10年以上前のプロセッサなので、検証とはいえ、あまり古すぎるサーバーを使用するのは避けたほうが良いです。

Microsoftのドキュメントの通り第4世代Xeonスケーラブル・プロセッサーシリーズか、古くても第2世代Xeonスケーラブル・プロセッサーシリーズとか、その辺を使用したほうが良いかと思います(今回はHaswellシリーズのプロセッサで動かしましたが。あくまでも検証なので)。

Windows Server 2025の認定構成であれば間違いなく動きますので、認定構成を確認したい場合にはWindows Serverカタログをご確認ください。

www.windowsservercatalog.com

4:Windows Server 2025 Hyper-Vでのホストドライバー導入

では、実際にWindows Server 2025 Hyper-VでGPU-Pを有効化してみましょう。

事前準備として、NVIDIAのVirtual GPU Softwareをダウンロードしておいてください。

試用版を使用する場合には、試用版を有効化するとVirtual GPU Softwareをダウンロードすることができます。

GPUを刺してHyper-Vホストを起動すると、画面1のように「3Dビデオコントローラー」として認識されています。ドライバーが存在しないデバイスですね。

画面1:ドライバーが存在しないデバイスとして認識される

ダウンロードしてきたVirtual GPU SoftwareをHyper-Vホスト上で解凍し、「Host_Drivers」フォルダ下の「Windows _Server_Host」フォルダをわかりやすいフォルダ(例えばC:\Temp)にコピーします。

ホストドライバーはいつものGUIツールでインストールを行わず、コマンドプロンプトから「pnputil」を使用してインストールを行います。

先ほどコピーしたフォルダの配下に「Display.Driver」というフォルダがあるので、コマンドプロンプトでそのフォルダに移動したのちに、ホストドライバーのinfファイル(nvgridswhostserver.inf)を指定してpnputilコマンドを実行します(画面2)。

画面2:pnputilコマンドでホストドライバーをインストール

今回使用したコマンドラインは以下のようになります。


    pnputil /add-driver nvgridswhostserver.inf /subdirs /install /reboot
  

必要があれば自動的にHyper-Vホストが再起動します。

インストールが完了すると、デバイスマネージャー上でNVIDIA A2としてGPUが認識していることが確認できます(画面3)。

画面3:NVIDIA A2がHyper-Vホストで認識される

正常にドライバーがインストールできたので、GPU-Pが可能な状態になっているかを確認します。

PowerShellコマンドレットである「Get-VMHostPartitionableGpu」コマンドレットを実行すると、正常であれば画面4のようにデバイスのパスやVRAM容量、使用可能なパーティション数などが表示されます。

画面4:Get-VMHostPartitionableGpuコマンドレット実行結果

この結果が出力されないと、「ドライバーは認識されているが、GPU-Pが正常に動かない」状態であると判断できます。前項で解説したSandy Bridge ENシリーズのプロセッサ搭載機では、ドライバーはインストールできたものの、「Get-VMHostPartitionableGpu」コマンドレットの結果がNullだったりと、いろいろとおかしな動きをしていたので、「Get-VMHostPartitionableGpu」コマンドレットが正常に実行されない場合は、別のHyper-Vホストでテストしたほうが良いかもしれません。

以上でホストドライバーの導入は完了です。

5:Hyper-Vホストの設定

以降のHyper-Vホストでの作業はオプションです。サクッと動作確認したい場合はこのまま次項に進んでください。

オプション設定として、2つの設定を行うことができます。

  • パーティション数の設定
  • Virtual GPUタイプの設定

パーティション数は「1枚のGPUでパーティションをいくつ使えるようにするか?」の設定で、例えば画面4を見るとパーティション数は16で、設定可能なパーティション数は「16、8、4、2、1」であることがわかります(1は表示されてませんが……)。

共有する数が少なければ少ないほど、仮想マシンあたりに割り当てられるGPUの資源は多くなります。共有数と性能はトレードオフなので、どのくらいの性能が求められるか、によって共有数を変える必要があります。

実は、Windows Admin Center(WAC)でパーティション数の設定ができますので、ここでは割愛します。WACを使用しない場合にはPowerShellでの設定になります。

もう一つのVirtual GPUタイプの設定ですが、種類についてはNVIDIAのドキュメントをご確認ください。

docs.nvidia.com

ライセンスも絡んでくるのでここでは詳細は割愛します。なお、デフォルトはQシリーズになっています。

BシリーズやAシリーズに設定したい場合はレジストリを編集する必要があり、編集項目もNVIDIAのドキュメントに記載があります。

docs.nvidia.com

上記ドキュメントに従ってレジストリを確認すると、値は「1」でしたのでQシリーズの設定になっています(画面5)。

画面5:Virtual GPUタイプのレジストリ設定

このあたりの設定が完了すれば、Hyper-Vホスト側の準備は完了です。

6:仮想マシンに対するGPU割り当て

続いて、仮想マシンにGPUを割り当てていきます。

GPUのパーティション割り当ては以下の2つの手法で設定できます。

  • PowerShell
  • Windows Admin Centerの「GPU」拡張機能

Microsoftの推奨でもあり、非常にお手軽に設定できるWACのGPU拡張機能で設定していきます。

前提条件として、WACに「GPU」拡張機能がインストールされていることを確認してください(画面6)。インストールされていない場合はインストールしてください。

画面6:WACのGPU拡張機能

WACで対象のHyper-Vホストに接続し、左ツリーの下の方にある「GPU」をクリックします。右ペインにGPUが表示されますので、GPU-Pで分割するGPU(今回の場合はNVIDIA A2)が表示されていることを確認してください(画面7)。「割り当て状態」が「パーティション分割」と表示されているのGPU-P可能、となります。

画面7:WACでのGPU設定画面

「GPUパーティション」タブをクリックすると、GPUを割り当てるページが表示されます(画面8)。ここでパーティション数や仮想マシンへの割り当て操作を行います。

画面8:GPUパーティション設定画面

まずはパーティション数の設定を行います。画面8の「パーティション数の構成」をクリックします。すると「パーティション数を構成する」というウィンドウが開きますので、パーティション数を選択したいGPUを選択して、「パーティションの数」のプルダウンメニューから設定するパーティション数(今回は4)を選択して「パーティション数の構成」ボタンをクリックします(画面9)。

画面9:GPUパーティション数設定画面

元の画面に戻り、画面更新の上、パーティション数が設定した数字になっているかを確認します。今回であれば「4」ですね(画面10)。

OKであれば、画面10の「パーティションを割り当てる」をクリックします。

画面10:パーティション数設定後、パーティションの割り当てを実施

「GPUパーティションをVMに割り当てる」というウィンドウが開きますので、サーバーをプルダウンメニューから選択し、割り当てを行う仮想マシンを選択します。複数選択可能です(画面11)。

画面11:GPUパーティションの仮想マシンへの割り当て画面

「割り当て可能なVRAMオプション」で割り当てるVRAM(フレームバッファ)を選択して「パーティションを割り当てる」をクリックすることで割り当て完了になります(画面12)。

画面12:VRAM容量設定後、仮想マシンへGPUを割り当て

完了すると、画面13のように割り当てた仮想マシンが表示されます。

画面13:仮想マシンへの割り当て完了

以上で仮想マシンへのパーティション割り当てが完了です。

7:動作確認

では実際に仮想マシンを起動してみましょう。

GPUを割り当てた仮想マシンを起動してデバイスマネージャーを確認します。

画面14のように「Display Controller」として不明なデバイスが存在していることがわかります。これがGPU-Pで割り当たったGPUになりますので、ドライバーをインストールします。

画面14:GPUは最初「不明なデバイス」として認識

インストールするドライバーは事前準備でダウンロードしてきたNVIDIAのVirtual GPU Softwareに入っています。「Guest_Drivers」フォルダの下にWindows用のドライバーがありますので、こちらを仮想マシンにコピーしてインストールを行います。

正しいドライバーであればインストールを画面15のようにドライバーインストールを続行することができますが、この画面が出てこない場合はドライバーが間違っていますので、確認してください。

画面15:Virtual GPU Softwareのゲストドライバーであればインストール可能

ドライバーインストール後仮想マシンを再起動すると、GPUが認識されていることが確認できます(画面16)。

画面16:実際に仮想マシンでGPUが認識されていることがわかる

タスクマネージャーからもGPUが存在していることが確認できます。

GPUのVRAMも3.5GB認識していますので、画面12で設定したVRAMが割り当たっていますね。

また、デバイスマネージャー上「NVIDIA A2-4Q」というデバイス名なのでQシリーズで4GBのVRAM(フレームバッファ)が割り当てられた(タスクマネージャー上の表記は3.5GBですが)NVIDIA A2であることも確認できます。

こんな感じで、非常に簡単なステップでWindows Server Hyper-Vでも仮想マシンにvGPUを割り当てられることがお分かりいただけたかと思います。

8:最後に

仮想マシンにvGPUを割り当てることで、仮想マシンでありながらDirectXのアプリケーションを動かせたり、GPUを必要とするアプリケーションを動かしたりすることが可能になります。GPUがないと起動すらしない某オンラインゲームのベンチマークも、仮想マシン上で動作することを確認しています。

vGPUは欲しいけども、Azure Localは敷居が高い……。という方にはWindows Server 2025 Hyper-VでのGPU-Pはお勧めです。

ぜひお試しください!

書いた人:後藤 諭史(Satoshi GOTO)

ソリューションアーキテクト部所属。

専門はWindows Server Hyper-VやAzure LocalといったMicrosoft仮想化技術。Microsoft SDN(Hyper-V Network Virtualization)などのWindows Server ネットワーク技術も。
Microsoft オンプレ技術以外にも、エンタープライズネットワークとかMicrosoft Azureとか、運用とか。
ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。

Microsoft MVP for Cloud and Datacenter Management(2012-2026)
Microsoft MVP for Microsoft Azure(2024-2026)