IBM Cloudで3D描画アプリケーションをGPUを使って動かす

# はじめに

IBM Cloud上でUnreal Engineなど3D描画を行うアプリケーションをGPUを使って稼働させたいと思ったことはありませんか？NVIDIAのGRIDドライバーを使用することでこれが可能になります。しかし、IBM Cloud上のVirtual MachineはGrid Driverをサポートしていません。そこで、今回はIBM CloudのBareMetal ServerにGrid Driverを導入し、3D描画アプリケーションを稼働させる方法を解説します。OSはWindowsになります。

IBM CloudのGRIDドライバーについての制約
>IBM Cloud では、現在、仮想 GPU の GRID ドライバーをサポートしていません。 GRID をサポートするには、ベア・メタル・サーバーに GPU をプロビジョンし、適切な GRID ドライバーをインストールします。 NVIDIA GPU サポート を参照

参照元

https://cloud.ibm.com/docs/virtual-servers?topic=virtual-servers-about-virtual-server-profiles&locale=ja#nvidia-grid


参考：ドライバーの種類

IBM Cloudで提供されるデータセンター向けのGPUでは以下のドライバーが候補となります。３DレンダリングするにはGRIDドライバーが必要です。

>Tesla ドライバー
>    これらのドライバーは主に、機械学習用の並列浮動小数点計算、ハイパフォーマンスコンピューティングアプリケーション用の高速フーリエ変換などの計算タスクに GPU を使用するコンピューティングワークロードを対象としています。
>
>GRID ドライバー
>    これらのドライバーは、3D モデルや高解像度動画などのコンテンツをレンダリングするプロフェッショナルな視覚化アプリケーションに最適なパフォーマンスを提供することが認定されています。GRID ドライバーを構成すると、2 つのモードをサポートできます。Quadro Virtual Workstation は、GPU あたり 4 台の 4K ディスプレイへのアクセスを提供します。GRID vApps は、RDSH アプリのホスティング機能を提供します。

参照元

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/install-nvidia-driver.html

# 手順１ BareMetal Serverの作成

GPUが搭載されたBareMetal Serverの払い出しを行います。手順は省略します。
この記事ではTesla P100が搭載されたBareMetal Serverを使用しています。

# 手順２ GRIDドライバーのインストール

GRIDドライバーはvGPUとも呼ばれるらしいです。名前からハイパーバイザーを構成しないと使えないようなイメージを受けますが、BareMetal Serverに直接インストールすることも可能です。
以下のサイトからドライバーをダウンロードします。

https://www.nvidia.com/Download/index.aspx?lang=en-us

GRIDドライバーは上記のダウンロードサイトの「NVIDIA Virtual GPU Customers」からログインするとダウンロード可能です。GRIDドライバーは有償のドライバーになります。90日間の試用利用が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/3ff35be3-eef1-72df-5919-75516c97142f.png)

SOFTWARE DOWNLOADSから「Microsoft Windows」のドライバーをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/09030b5f-9c12-a863-8198-ee2764c6d21b.png)

ダウンロードしたファイルを解凍して以下のファイルを取り出して、BareMetal Serverに配置します。
このファイルを実行してインストーラーを立ち上げます。
「474.30_grid_win10_win11_server2016_server2019_server2022_64bit_international.exe」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/88312f35-5054-ed0d-b0a3-455a9634a43b.png)

インストーラーは以下のような画面です。画面の指示に従いインストールを進めます。特に迷うところは無いはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/318e206f-70d0-1350-bba6-b4f44a388cb5.png)

# 手順3 3D描画アプリケーションの稼働確認

processingを使って３D描画のテストをします。
以下からprocessingをダウンロードします。

https://processing.org/

ダウンロードしたファイルを解凍すると以下のようなファイルが作成されます。
processing.exeをダブルクリックしてprocessingを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/04b30f26-cd09-9543-d661-8d2a4e883448.png)


以下のサイトから３D描画のサンプルコードを取得します。

https://processing.org/tutorials/p3d

以下のコードでテストします。

```java
size(640,360,P3D);
background(0);
lights();

pushMatrix();
translate(130, height/2, 0);
rotateY(1.25);
rotateX(-0.4);
noStroke();
box(100);
popMatrix();

pushMatrix();
translate(500, height*0.35, -200);
noFill();
stroke(255);
sphere(280);
popMatrix();
```

以下のようにprocessingの画面にコードを貼り付けて、実行ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/958629d3-58d9-c4c3-34b3-9fdc9ad34ff7.png)

以下のようなWindowが表示されれば3Dの描画は成功しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/58757d8a-e20f-fcf9-acfb-a6e177b9c8e3.png)


# 参考：Unreal Engine

Unreal Engineの前提のセットアップを実施すればUnreal Engineで作成されたアプリケーションを稼働させることも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/6fc55a51-4943-70e5-9fb4-c046a20868f8.png)

上記の画面は、以下のアプリケーションを稼働させたものです。

https://github.com/microsoft/PromptCraft-Robotics/releases

# おわりに

これで、IBM CloudのBareMetal ServerにNVIDIA GRIDドライバーを導入し、3D描画アプリケーションをGPUを使って稼働させることができました。これにより、より高速な3D描画や、より複雑なシーンのレンダリングが可能になります。

# 注意事項
IBM CloudのBareMetal Serverは、Virtual Machineと比較してコストが高くなることがあります。必要なリソースや予算を検討した上で、適切な選択を行ってください。