技術解説
1台のGPUサーバーを複数の仮想インスタンスに分割 ~VMwareでの設定方法~
2020.06.30

NTTPC GPUエンジニア

チーム内でGPUサーバーを共有して利用する場合、1つのジョブだけでGPUサーバー1台を占有するのではなく、複数のジョブを同時並列で回したいというニーズも多いと思います。
1台のGPUサーバーを仮想的に複数のインスタンスに分割したい場合、大きく分けて下記3パターンの手法があります。
1. コンテナ環境(Dockerなど)にアプリケーションソフトやライブラリをパッケージング
2. NVIDIA マルチインスタンスGPU(MIG)で分割
3. ハイパーバイザー環境(VMwareなど)
本コラムでは、3.ハイパーバイザー環境をVMwareで設定する際の方法を紹介します。
※本記事は2020年時点の情報に基づいたものです
注意事項
CPUやメモリーは複数のVM間で共有することができますが、GPUの場合、1枚のGPUカードを複数のVMに割り当てることはできません。1つのVMには1枚以上のGPUをアサインする必要があります。


ハイパーバイザー環境を構築することで、下記の図の様な運用が可能になります。

それでは、実際の構築手順を紹介します。今回の検証環境は下記の通りです。
■検証環境
- 使用したハイパーバイザー:VMware ESXi 6.7 ( 無償版 )
- 使用したGPU:NVIDIA V100 Tensor Core GPU
■利用手順
1. BIOS設定
内蔵GPUがある場合は無効化します。
さまざまなBIOSのバリエーションがあるため設定方法は割愛しますが、多くは「iGPU」という名前で設定項目があると思います。
2. VMware ESXiのインストール
UEFIでインストールします。
3. VM作成
UEFIブートで作成します。OSの縛りはありませんので、どのOSを指定しても構いません。
インストール後、VM設定を開き、仮想マシン>オプションタブ内の構成を編集します。
「パラメーターの追加」から、次のパラメーターを追加します。
pciPassthru.use64bitMMIO="TRUE”


OSにログインした後、アップデートやVMware-Toolsなどの基本的な初回セットアップを行います。
4. GPUの仮想化
今回は「GPUパススルー」の設定を行います。
ESXiのメイン画面の左ペインから「管理」を選択し、「ハードウェア」タブ内のPCIデバイスを選択します。
下図のように一覧化されており、その中にGPUが表示されています。通常「NVIDIA Corporation …」がGPUです。
GPUを選択後、パススルーの切り替えを実行し、その後ホストを再起動します。

5. PCIデバイスの追加
VMの編集>その他のデバイスの追加 からPCIデバイスを追加します。

6. GPUの確認
Ubuntuの場合は”lspci”コマンド、Windowsの場合は”デバイスマネージャー”からGPUカードが認識されていることを確認します。
認識されていれば、ドライバーをインストールしOS上で利用できるようにします。

以上が、VM上でGPUを利用する方法です。