VMware ESXi でGPUを仮想マシンへパススルーする方法

こんにちは、エス・ワイ・シーの島田圭吾です。

今回は、VMware ESXi 環境でGPUカードを特定の仮想マシンへパススルーして直接利用するための設定手順について記載したいと思います。

パススルーにすることで仮想環境のOSにもGPUカードをそのまま認識することできるのでGPUをフル活用した高度計算処理が行えるようになります。

ここでは、NVIDIA A100 の40GB モデルをパススルーしてみたいと思います。

NVIDIA A100 はこんな感じに黄金に輝いているGPUカードでとても高級感溢れています。

仮想マシンにGPUカードを割り当てるだけではパススルー利用はできません。以下の設定を適切に行う必要があります。

  1. BIOS で仮想化支援機能の有効化
  2. ESXi ホストでGPUカードを「パススルーの切り替え」に設定
  3. 仮想マシンにPCIデバイスとして割り当て
  4. 仮想マシンの設定調整
  5. 仮想マシンの設定パラメータの追加

1,BIOS で仮想化支援機能の有効化

こちらはBIOS設定画面で Intel-VT-d などを 「有効」 にするだけです。


2,ESXi ホストでGPUカードを「パススルーの切り替え」に設定

vSphere Host Client の画面で 「ホスト」 – 「管理」 の画面から 「ハードウェア」 のタブを開き、「PCIデバイス」 の一覧の中からGPUカードを選択して 「パススルーの切り替え」 を行います。

パススルー の欄が 「アクティブ」 と表示されればOKです。


3,仮想マシンにPCIデバイスとして割り当て

仮想マシンの設定の編集で 「その他のデバイスの追加」 をクリックして 「PCIデバイス」 を選択します。

先程パススルーへ切り替えをしたGPUカードをプルダウンメニューから選択します。


4,仮想マシンの設定調整

CPU の設定を展開して 「ハードウェア アシストによる仮想化をゲスト OS に公開」 のチェックがオフであることを確認にします。このチェックがオンの状態で仮想マシンを起動しようとすると 「ネストされたハードウェア アシストによる仮想化が有効な場合、PCI パススルー デバイスは追加できません。」 とエラーが表示され起動に失敗します。

メモリの設定を展開して 「すべてのゲスト メモリを予約 (すべてロック)」 のチェックをオンにします。

「仮想マシンオプション」 をクリックして 「起動オプション」 の 「ファームウェア」 の設定値を 「EFI」 へ変更します。


5,仮想マシンの設定パラメータの追加

仮想マシンオプション の 「設定パラメータ」 – 「設定の編集」 をクリックします。

仮想マシンがWindows10 の場合、再起動をするとグラフィックボードのドライバが「エラーコード 43」で異常停止してしまうという不具合があるためこれを回避するパラメータを追加しておきます。

パラメータの追加 をクリックして、 「hypervisor.cpuid.v0」 値:「FALSE」 を入力します。

同じく、こちらのブログ記事にもあるように 64bitMMIO の2つのエントリも追加します。

https://blogs.vmware.com/apps/2018/10/how-to-enable-nvidia-v100-gpu-in-passthrough-mode-on-vsphere-for-machine-learning-and-other-hpc-workloads.html

この記載部分がキモです。

1つ目
pciPassthru.use64bitMMIO=“TRUE”

2つ目
このエントリを指定するには少し計算が必要となります。VMに渡す全てのGPUデバイスの搭載メモリサイズを合計し、その値を超える2の累乗値を計算します。その値のさらに次の2の累乗に切り上げた値がここの指定値となります。
今回、40GBのGPU が1つですので、40を上回る2の累乗値は 64 となり、その次の2の累乗に切り上げて128 になります。


pciPassthru.64bitMMIOSizeGB=“128”

もしこの値が低い場合、仮想マシンの起動が失敗して以下のようなメッセージが記録されます。PCI MMIOのサイズを大きくしてくださいと親切に記載があります。

問題なく仮想マシンが起動したら、OSからGPUカードの装着状態を確認します。
Linux OSであればコマンド “lspci -nn | grep -I nvidia” とすることでGPUカードのデバイスが確認できます。


あとは、CUDA Toolkitなど入れてGPUを活用してください。

以上、VMware ESXi で GPU を仮想マシンへパススルーする方法でした。(^^)/