Dear Great Hackers

  1. タイアップ
  1. トピックス

【Windows Virtual Desktopのディープな技術情報を解説】#7 WVDでGPUを使って、ゲーム/CADなどを利用する

クラウドの仮想マシンには多数の種類があり、一般的な用途のほかコンピューティング、メモリ、ストレージ、高速演算などさまざまなワークロード用、さらにはグラフィックス用のものまであります。

今回注目するグラフィックスはシミュレーション、AI、ディープラーニングなどの目的に使用されます。
その他グラフィックス処理に適したワークロードとしてはストリーミング、ゲーム、エンコード、SolidWorksやAutoCADといったある種のCADソフトウェアの使用があります。
この場合に使用する仮想マシンはN-シリーズです。N-シリーズで選択するVMに応じて1つのGPUすべて、複数のGPU、GPUの一部などGPUの使用形態が変わり、必要としている作業の種類に応じて様々な選択肢があります。

一方、Windows Virtual Desktop(WVD)はクラウド内のあらゆる種類の仮想マシンを利用でき、VMの種類に制限はありません。つまり、グラフィックス負荷の高いワークロードがある場合やワークロードの処理負荷が高く、GPUがあれば問題を解決できる場合、N-シリーズのVMを検討することができます。

今回はWVDにおけるGPU搭載VMの可能性をご紹介します。

※この記事は、Microsoftが提供する WVD GPU Powered VMs | Windows Virtual Desktop #14を要約したものです。

▼「Windows Virtual Desktopのディープな技術情報を解説」記事一覧
https://zine.qiita.com/tag/wvd/

GPUの設定方法

VMにおけるGPUアクセラレーションの用途はWVD以外にも数多くあります。今回はグラフィックス アクセラレーションの部分に焦点を当て、実際の手順を紹介したいと思います。

Windows Virtual Desktop 用にグラフィックス処理装置 (GPU) のアクセラレーションを構成するにこれから紹介する手順の詳細が記載されています。

GPUを搭載するVMを作成するために、Windows バージョンを選びます。Windows 10 バージョン 1511 以降 または Windows Server2016以降にしてください。

次に、グラフィックスドライバーをインストールします。AMD用またはNVIDIA用のドライバーを用途に合わせて選びます。それぞれN-シリーズのSKUが異なる点に注意が必要です。

続けてアプリレンダリング用またはフレームエンコーディング用にGPUを構成し、グラフィックスベンチマークテストを行います。これにはCADソフトウェアを使います。

Azureポータルに移動してWVD管理ポータルにアクセスし、新しいホストプールを作成します。ホストプールに名前を付け、それをこの動画では米国東部に保存します。

次はホストプールの種類については、行おうとしているグラフィックス処理の種類によりますが、多くの場合はプール型よりも個人用ホストプールがおすすめです。グラフィックス アクセラレーション用のWVDでは、アプリケーションに応じてどちらも使用可能です。

今回はプール型を選択します。VMあたりの最大ユーザー数は2人でロード バランサーは深さ優先モードです。つまり、1つ目のVMにユーザー2人がログオンしないと、2つ目のVMにはだれもログオンできません。 [Next] をクリックして、仮想マシンを追加します。それをホストプールと同じリソースグループに入れ、VMのサイズを変更します。

すべてのフィルターをクリアし、検索ボックスに「nv」と入力すると、現在のサブスクリプションでアクセスできるGPU 搭載VMが表示されます。
今回は計算よりもグラフィックス レンダリングを重視したNV6のSKUを [Select] します。ここで展開するVMは1つのみで、その名前には 「GPU-WVD」というプレフィックスを使用します。

では、イメージに移りましょう。共有イメージギャラリーにある既存のイメージを使用します。共有イメージ ギャラリーを使用して常に最新のイメージでVMを展開する方法については、こちらで紹介しています。このVMには標準のSSDを使用します。

次はネットワークです。既存のネットワークを使用し、セキュリティの観点からパブリックIPアドレスは使用しません。現在のサブネットに既に関連付けられたグループがあるため、ネットワークセキュリティグループも使用しません。ドメインとOUの情報、AD Joinアカウントの情報を入力して [Next] をクリックします。

「GPU Workloads」という新しいワークスペースを追加して [Next] をクリックし、適切なタグを追加して [Review + create] をクリックします。検証が完了したら [Create] をクリックします。

VMの動作確認方法

クライアントを起動してその新しいGPU搭載VMにログインし、正常に機能していることを確認します。

FurMarkによるGPUのストレステストを実施します。Preset1080を使用し、警告メッセージも必ず読みましょう。 [GO!] をクリックします。GPUが見つからないようですので、別のテストにしましょう。

ブラウザがWebGL対応かどうかテストします。立方体が回転していればテスト可能です。WebGL Aquariumにアクセスします。動きが不自然なので、 [Start] ボタンを右クリックしてデバイスマネージャーを起動します。

グラフィックドライバーがインストールされていないことが原因でした。N-シリーズのVMを新しくインストールする場合は、ドライバーの設定が必要です。

AzureのVMで左側のブレードにある [Extensions] をクリックし、新しい拡張機能を追加します。使用しているN-シリーズVMの種類に合わせて、NVIDIA GPUの拡張機能とAMD GPUの拡張機能、2つの拡張機能からいずれかを選びます。
この動画では、NVIDIA用を選んで [Create] をクリックし、詳細情報を確認し、 [OK] をクリックして拡張機能を追加します。

VMに戻るとTeslaのGPUが設定されており、再起動を求めるメッセージが表示されます。拡張機能のインストールが完了し、ドライバーも機能していることが確認できました。

グラフィックスカードの情報は様々な方法で確認できます。
例えば、 [Start] を右クリックして [Run] クリックし「dxdiag」と入力するとDirectX Diagnostic Toolが起動します。表示されるシステム情報には、グラフィックスカードの情報も含まれていますが、まだ「Unknown」が表示されています。

システムに搭載するTeslaベースのGPUはTCCモードにすることができます。ヘッドレスなTCCモードは複雑な計算、AIやディープ ラーニングなどの処理に適しています。
WDDMモードにすることもでき、WDDM (Windows Display Driver Model)のカードはグラフィックスアクセラレーションに使用できます。

もう一度 FurMarkを見てみましょう。Preset 1080で実行すると、47 – 49 fpsと表示されています。

一旦キャンセルしてWebGL Aquariumをもう一度見てみます。先ほどよりは改善されていますが、わずか4fpsです。

これはシステム自体に問題はなく、グラフィックスアクセラレーションの設定がまだ完了していないことが要因です。

設定にはいくつか必要な作業があります。
システムでローカルグループポリシーエディターを開きます。すべてが動作すればADグループポリシーに移動できます。
「Computer Configuration」、 「Administrative Templates」、 「Windows Components」、 「Remote Desktop Services」、 「Remote Desktop Session Host」、 「Remote Session Environment」の順に移動します。「Use hardware graphics adapters for all Remote Desktop Services sessions」ポリシーを開き [Enabled]、[OK] の順にクリックします。
フレーム エンコーディングのアクセラレーションを 有効にする場合は「Prioritize H.264…」を開き、こちらも [Enabled] に切り替えます。「Configure H.264…」も [Enabled] にしましょう。以上でエディターを閉じます。

次は管理者のコマンドプロンプトを使い、グループポリシー更新を /force フラグで実行します。

さらにもう1つ、NVIDIAを確認するためのコマンドラインツールを実行します。C:\Program Files\NVIDIA Corporation\NVSMIに移動して、nvidia-smiツールを 「-L」パラメーターを指定して実行し、グラフィックスカードの情報を確認します。「GPU 0」と表示されます。
同じツールを「-l」を指定して実行すると、グラフィックス カードで使用されている各種実行ファイルすべてのログ末尾が表示されます。

このログ末尾の内容について詳しく見てみましょう。GPUの実行モードはTCCまたはWDDMを指定でき、このツールから変更できます。
nvidia-smiツールをもう一度実行します。「-fdm」パラメーターにより、グラフィックスモードに 「0」、つまりWDDMが適用されます。 「-g」フラグは使用するGPUインスタンスを示します。この場合は複数のGPUです。

コマンドを実行し、処理が完了しました。コンピューターを再起動します。

ログインし直したら、FurMarkをもう一度開き、GPU ストレステストを実施します。fpsは50以上に上昇しました。非常に負荷の高いワークロードです。
いったん閉じ、WebGLページで動作を確認したら、WebGL Aquariumを再度開きましょう。魚は5,000 匹で変わりませんが、fpsは約30にまで改善されています。

では、別のリンクを開きましょう。これは流体粒子を使ったもう1つのWebGLテストです。

2つ目のサンプルを選んで [Start] をクリックします。粒子のまとまりが落下すると、流体力学に基づく反応が発生します。マウスで操作して、さまざまな動きを発生させることもできます。 先ほどは粒子が35,000個でした。これを[Edit]から200,000個以上に増やすとどうなるでしょうか。 [Start] をクリックしてみると、引き続きすべての粒子が表示され、流体として反応しています。
このようにWebGL標準に基づくさまざまなテストを実施しながら、動作を確認することができます。

さらに別の例を見てみましょう。「Heaven Benchmark」と呼ばれるファンタジー形式のベンチマークツールです。

既定の設定で開始しましょう。現在のfpsは80以上です。
ファンクション キーを使って画面を操作できます。ワイヤーフレームを表示したり、カメラ アングルを変えたり、視点を回転させたりしながら、システム内を歩き回ることができます。100fpsは楽々と上回っています。

また、DirectX Diagnostic Toolに戻ると先ほどは「Unknown」が表示されていたビデオカードの情報も適切に表示されています。

この環境でグラフィックステストを行う以外に、どのようなことができるのでしょうか?

そこで Solid Edgeを使ってみましょう。Solid Edge はSolidWorksと並ぶCADソフトウェアです。FドライブのSolid EdgeファイルからLG製冷蔵庫のデータを表示します。私はCADの専門家でもSolid Edgeの専門家でもないのですが、問題なくオブジェクトをレンダリングし、3D表示でリアルタイムで操作できます。

これを可能にしているのは、グラフィックスカードの存在です。ブルドーザーも問題なくレンダリングされています。
本来はもっとAutoCAD的な操作ができるはずですが、私には3Dデザインを回転させるのが精一杯です。詳しい人がいればこれをもっと活用できると思います。それでもグラフィックスアクセラレーションが活用され、このようなワークロードを処理できることがおわかりいただけたと思います。

今まで設定・テスト・作業と見てきましたが、次はこれをWVD環境に取り込む必要があります。

WVD環境に取り込むには、このシステムをイメージとしてキャプチャする必要があります。
まず、管理者でログインして、C:\Windows\System32\Sysprepに移動し、右クリックでsysprepを管理者として実行します。一般化するオプションをオンにし、シャットダウンのオプションを選択して [OK] をクリックします。この処理には数分かかります。

次に、共有イメージギャラリーを使ったイメージの作成を行います。 AzureポータルでVMの [Capture] ボタンをクリックしてイメージに名前を付け、それをWVD管理リソースグループに保存し、イメージ作成後にVMを自動削除するチェックボックスをオンにして [Create] をクリックします。

イメージの作成が完了したら、内部を見てみます。
OSディスクとデータディスクがこのVMに関連付けられています。VMが作成されたリソースグループに戻ると、いくつか項目が残っています。これらはVMの元のディスクとNICカードなので、削除して不要な項目をなくします。

画面上部の検索バーに「shared」と入力し、共有イメージギャラリーを開き、このイメージを新しいイメージのバージョンとして、既存の定義に追加します。同じイメージを基に作成したためです。
必要に応じて、別のイメージとしてインポートすることも選択できます。

このバージョンを米国東部に保存し、バージョンを2に設定し、ソースはGPU-WVD VMイメージにします。
このバージョンでWVDホストプールを更新できなくなるため、最新から除外のオプションは [No] にします。このバージョンの有効期限の終了日を設定し、レプリカの数は1つにします。

[Next] をクリックします。暗号化は既定の設定で問題ありません。適切なタグを追加して [Next] をクリックし、問題なければ [Create] をクリックします。

イメージ作成プロセスが完了したら、このイメージに基づいてもう1つVMを作成します。セッションホストに移動して [Add]、[Next] の順にクリックします。1つ目のVMは作成済みなので、情報の多くは入力済みです。
プロビジョニングは米国東部サイズは設定済みでVMの数は1です。展開するイメージは既に共有イメージギャラリーにキャプチャしたWVDイメージです。ネットワーク設定もAD Joinアカウントも問題ありません。

[Next] をクリックし適切なタグを追加して [Review + create] をクリックします。すべて問題ないため [Create] をクリックします。

作成が完了したら、もう一度ログインしましょう。WebGL Aquariumでは5,000匹の魚が30fps以上で描画されており、流体粒子テストでは1080の設定で50fps以上。Heaven Benchmarkでは最大200fps以上になっているのがわかります。

では、最後は少しゲームで遊んでみましょう。これはディストピアな未来を描いた『Destiny』というSFゲームで、さまざまな武器が登場します。

ここで言いたいことは私のゲームの腕ではなく、AzureのGPUがSolid Edgeのようなグラフィックス負荷の高いワークロードから『Destiny』のような一人称視点ビデオゲームまであらゆるワークロードを処理できる点です。


Azureのグラフィックス搭載VMが提供する処理能力とWVDで活用する方法をご紹介しました。現在汎用VMで行えている処理をさらに専門的なワークロードへと大規模に拡張する上でも、役立てていただければと思います。

【新規ユーザーさま向け】Windows Virtual Desktop
30%オフキャンペーン実施中!

はじめてWindows Virtual Desktop(ネイティブ版)をご利用いただいた方を対象に、最大90日間コストを30%オフでご利用いただけるキャンペーンを実施中です。
この機会にぜひご利用ください。

対象期間 : 2021年6月30日まで

詳細はこちら

関連記事