
皆さんこんにちは。SB C&Sの湯村です。
前回の記事では、Azure Localにおける仮想マシンの管理操作についてご紹介しました。第6回から第7回にかけて、「仮想マシンへのGPU割り当て方法」をご紹介します。本記事では、Azure Local上の仮想マシンに対して、「GPUの個別デバイス割り当て:DDA」を行います。
※今回の検証には、AX-760(Dell AX System for Azure Local)を利用しています。そのため、Azure LocalにおけるGPUのDDA手順については、Dell Technologies・Microsoft・NVIDIAが提供しているマニュアルを総合的に参考にしています。
目次
1.個別デバイス割り当て(DDA)とは?
2.使用した環境
3.GPUのアンマウント
4.リスク軽減ドライバー(Mitigation Driver)のインストール
5.GPUがアタッチされた仮想マシンの作成
6.GPUゲストドライバーのインストール
1. 個別デバイス割り当て(DDA)とは?
Azure Localでは、次の2つの方法のいずれかでGPUを割り当てることができます。
- 個別デバイス割り当て(Discrete Device Assignment:DDA)
- GPUパーティション分割(GPU Partitioning:GPU-P)
どちらも、Hyper-V仮想化基盤でGPUを仮想マシンに割り当てる方式です。最大の違いは、「1枚の物理GPUを丸ごと1台の仮想マシンに割り当てる」か「1枚の物理GPUを分割して複数の仮想マシンに割り当てる」かです。
DDAの最大のメリットは性能です。GPUを仮想マシンに直接渡すため、仮想レイヤーを介した割り当て方式に比べ、仮想マシンからGPUに非常に近い距離でアクセスできます。そのため、AIや機械学習(Machine Learning)といった「大量のデータに対して並列処理を行う」必要があるワークロードに対して、大きな効果をもたらします。
今回は、Azure Local上の仮想マシンに対して、DDAによってGPUを割り当てる手順をご紹介します。
※GPU-Pについては次回の記事をご覧ください。
2. 使用した環境
今回使用した環境は以下の通りです。
※GPU検証で使用したコンポーネントのみ列挙しています。
- Azure Localノード:Dell AX-760 × 3
- Azure Local OS:Azure Local Golden Images(Dell 2512)
※Azure Local OSは高頻度で更新される傾向があります。本環境の都合上、古いバージョンを利用していますが、できるだけ最新のバージョンを利用するようにしましょう。 - ゲストOS:Windows Server 2022 Datacenter Azure Edition
※Azure Editionは、Azure Marketplaceで利用可能なエディションのひとつです。 - GPU:NVIDIA L4 × 6
※1ノードあたり2枚搭載
※使用しているAzure Local OSがGPUをサポートしているかどうかは、NVIDIA Virtual GPU Software Documentationをご覧ください。 - GPUゲストドライバー:詳細は以降の手順で紹介します。
- リスク軽減ドライバー(Mitigation Driver):詳細は以降の手順で紹介します。
3. GPU のアンマウント
Azure LocalでDDAを利用する場合、GPUを事前にアンマウントする必要があります。アンマウントする理由は、「GPUの所有権をホストOSから切り離し、仮想マシンが物理GPUを直接利用できる状態にするため」です。
DDAはGPUを仮想化して共有する仕組みではなく、PCIeデバイスそのものを丸ごと仮想マシンにパススルーする方式です。そのため、ホストOSがGPUを認識・使用している状態のままでは、GPUを仮想マシンに直接割り当てることができません。
★ポイント★
GPUのアンマウントは、仮想マシンが稼働しているホストだけではなく、クラスターを構成する全てのホストで行う必要があります。
1. Azure LocalのホストOSにログインし、PowerShell(15番)を実行します。
2. 以下のコマンドを実行し、搭載されているGPUが「3D Video Controller」という名前で認識されていることを確認します。また、割り当てるGPUの [InstanceId] を控えておきます。
Get-PnpDevice -Status Error | fl FriendlyName, InstanceId
★ポイント★
DDAの場合はホストOSにGPUホストドライバーをインストールしません。そのため、デバイス名は「3D Video Controller」という名前になっていますが、問題ありません。また、本環境のように複数のGPUを搭載している場合、DDAを利用するGPUだけ無効化すれば問題ありません。
3. 以下のコマンドを実行し、該当GPUの無効化およびアンマウントを行います。
$id1 = "該当GPUのInstanceId"
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -InstancePath $id1 -Force
4. 以下のコマンドを実行し、ホストからGPUがアンマウントされたことを確認します。
Get-PnpDevice -Status Unknown | fl FriendlyName, InstanceId
※「ステータスが [Unknown] になっている」=「アンマウントされている」
5. GPUアンマウントの手順をクラスターに属する全てのホストで行います。複数のGPUを搭載している場合は、該当GPUの [InstanceId] を間違えないように気を付けましょう。
4. リスク軽減ドライバー(Mitigation Driver)のインストール
NVIDIAが提供するリスク軽減ドライバー(Mitigation Driver)は、Hyper-VやAzure LocalでGPUをDDAする際に、ホスト側へインストールするセキュリティ保護用のドライバーです。
DDAでは、物理GPUを丸ごと仮想マシンへ渡します。そのため、ゲストOSからGPUの全ての機能にアクセスできるようになります。例えば、ファームウェアの更新等がゲストOSから行われてしまうと、ハードウェアの安定性やホストのセキュリティへ悪影響を与えてしまいます。リスク軽減ドライバーは、こうしたDDA固有のリスクを抑えるため、ホスト側でデバイスに対するセキュリティ制御を提供します。
また、Azure Localにおいては、GPUをアンマウントした後にリスク軽減ドライバーをインストールすることで、初めてGPUがホストOSから認識されるようになるため、GPUホストドライバーのような役割も担っているようです。つまり、Azure Localではリスク軽減ドライバーのインストールは必須となります。
4.1. リスク軽減ドライバーのダウンロード
1. NVIDIA GPU Passthrough Supportのページにブラウザでアクセスします。
2.「Download INF」欄にある [here] をクリックし、zipファイルをダウンロードします。
4.2. リスク軽減ドライバーのインストール
リスク軽減ドライバーのインストールはPowerShellから行うため、該当ファイルを各ホストに格納しておく必要があります。ファイルの転送方法はいくつかありますが、Azure Localを管理するWindows Admin Centerを使用すると簡単にファイルを転送できるため、今回はこの方法をご紹介します。
1. Windows Admin Centerにログインし、以下を実行します。
- サーバーマネージャーから各ホストの管理画面を開きます。
- 左ツリーで、[ファイル&ファイル共有] をクリックします。
- ファイルを格納するフォルダパスを指定します。
※画像では管理者ユーザーのフォルダ配下に格納していますが、任意の場所で問題ありません。 - [・・・] をクリックします。
- [アップロード] をクリックします。
3. [nvidia_azure_stack.cat] と [nvidia_azure_stack_<GPU型番>_base.inf] の2つを選択し、[開く] をクリックします。
※catファイルはドライバーのデジタル署名情報を含むファイルです。infファイルだけではインストールすることができません。
4. [送信] をクリックします。
5. フォルダにcatファイルとinfファイルが格納されたことを確認します。
6. ホストOSのPowerShellで以下のコマンドを実行し、リスク軽減ドライバーをインストールします。
pnputil /add-driver nvidia_azure_stack_<型番>_base.inf /install /force
★ポイント★
リスク軽減ドライバーをインストールした後に再度デバイス情報を参照すると、デバイス名が「3D Video Controller」から「Nvidia <型番>_base - Dismounted」と変化していることがわかります。このように、セキュリティ保護という目的だけではなく、ホストOSからNVIDIA GPUを認識させるための役割も担っていることがわかります。![]()
7. リスク軽減ドライバーのインストール手順をクラスターに属する全てのホストで行います。
5. GPU がアタッチされた仮想マシンの作成
GPUをアタッチした仮想マシンを作成するには、Azure Localにおける仮想マシン作成手順に従います。以下は、GPUに依存する箇所のみ抜粋していますので、詳しい手順を知りたい方は前回の記事をご覧ください。
1. 仮想マシン作成ウィザードで以下のGPUパラメーターを指定し、仮想マシンを作成します。
- [GPUのアタッチ] にチェックを入れます。
- 「GPUのセットアップ」オプションが表示されたら、[DDA] を選択します。
2. 仮想マシンのデプロイが完了したら、[リソースに移動] をクリックします。
★ポイント★
「There is no GPU installed on this platform」というエラーが出てデプロイに失敗した場合は、これまでの設定(GPUのアンマウント、リスク軽減ドライバーのインストール)が全てのホストで行われているか確認しましょう。
3. 仮想マシンの概要ページが表示され、NVIDIA GPUが認識されていることを確認します。
6. GPU ゲストドライバーのインストール
作成した仮想マシンでGPUリソースが使用されるには、ゲストOSにGPUゲストドライバーをインストールする必要があります。このドライバーはNVIDIA Licensing Portalからダウンロードできます。
※ダウンロードするには、NVIDIA Application Hubにログインできるアカウントが必要です。
6.1. GPU ゲストドライバーのダウンロード
1. NVIDIA Application Hubにログインします。
2. [NVIDIA Licensing Portal] をクリックします。
3. [Software Downloads] をクリックします。
4. 以下の手順を実行します。
- 検索ボックスにある [フィルターマーク] をクリックします。
- [Platform] をクリックします。
5. 検索ボックスに [azure local] と入力してフィルタリングします。
- もう一度 [フィルターマーク] をクリックします。
- [Product Family] をクリックします。
- [vGPU] をクリックします。
※DDA専用のゲストドライバーがあるわけではなく、次回の記事で紹介するGPU Partitioningと同じゲストドライバーを使用します。
7. Azure Local OSのバージョンがサポートしているvGPUソフトウェアパッケージの [Download] ボタンをクリックします。
8. [Agree and Download] をクリックします。
9.「NVIDIA-GRID-Azure_Local_Host-xxxx」という名前のzipファイルがダウンロードされたことを確認します。
6.2. GPU ゲストドライバーのインストール
最後に、作成した仮想マシンに対してGPUゲストドライバーをインストールし、動作確認をしてみましょう。
1. ダウンロードしたzipファイルをゲストOS上で展開し、[Guest_Drivers] を開きます。
2. アプリケーションファイルをダブルクリックして実行します。
3. ファイル保管先はそのままで [OK] をクリックします。
4. [AGREE AND CONTINUE] をクリックします。
5. インストールオプションでは [Express(Recommended)] を選択し、[NEXT] をクリックします。
6. インストールが完了したら [CLOSE] をクリックします。
7. ゲストOSのデスクトップ上で右クリックし、[NVIDIA Control Panel] をクリックします。
8. [Agree and Continue] をクリックします。
9. NVIDIA Control Panelが開けば、GPUゲストドライバーが実行されているという証拠になります。
10. 最後に、3D描画アプリを動かしてGPUが正常に使用されるかどうかを確認します。
タスクマネージャーを開くと、NVIDIA L4のメモリサイズ(24GB)が丸ごと適用されており(①)、DDAが正しく有効になっていることがわかります。また、3D描画アプリを動かしてみると、3D描画に対してGPUが使用されていることがわかります(②)。PowerShellで [nvidia-smi] コマンドを実行しても、同様にGPUが使用されていることがわかります(③)。
以上、Azure LocalにおけるGPU個別デバイス割り当て(DDA)についてご紹介しました。Azure Localの実機を使った検証情報は意外に少なく、本記事が皆様の参考になれば幸いです。次回はGPUを分割して仮想マシンに割り当てる「GPU Partitioning」についてご紹介します。
SB C&Sが提供するAzure Local の技術情報はこちら!
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 第1技術統括部 第1技術部 2課
湯村 成一 - Seiichi Yumura -
Dell Technologies・HPE製品担当のプリセールスエンジニア。
主に仮想化・HCIを専門領域としている。
