ESXiにNVIDIA vGPU用ドライバをインストール

# 概要

本記事ではvGPU用のドライバをESXiにインストールする方法をいくつか試してみましたので、その内容を記載します。
純粋にパススルーを行ってGPUを使う場合はESXi側にドライバ等は不要かと思いますが、vGPUなどを使う際は必要となる内容となります。

## 環境情報
今回は以下バージョンの環境を用意しています。
- ESXi: 8.0U2b
- vCenter: 8.0U2b

## インストールパターン

vGPUをインストールする方法としていくつかあります。
今回は以下3パターンをそれぞれ行ってみます。

- パターン1: ESXiに直接モジュールを配置してインストール
- パターン2: vSphere Lifecycle Manager経由でモジュールをインポートしてインストール
- パターン3: GPU Manager経由でモジュールをインポートしてインストール


## 事前準備

NVIDIAのvGPUドライバのモジュールの取得はNVIDIAのLICENSE PORTALから取得をする必要があります。
アカウントに関してはvGPUの評価版を申し込むことで発行することができます。
https://www.nvidia.com/ja-jp/data-center/resources/vgpu-evaluation/


LICENSE PORTALにアクセス後、左メニューの[SOFTWARE DOWNLOADS]を選び、表示された画面で、[PRODUCT FAMILY]をvGPUにすることで出てきます。

今回は一旦vSphere8.0用の16.7をダウンロードしておきます。

- ダウンロードされるファイル: NVIDIA-GRID-vSphere-8.0-535.183.04-535.183.06-538.78.zip

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/f975fa03-77d3-92f2-5ced-c913863ae11b.png)


ではこの後はそれぞれのインストール方法で試してみます。

# パターン1: ESXiに直接モジュールを配置してインストール

一番シンプルなインストール方法かなと思います。

https://docs.vmware.com/jp/VMware-Horizon/2306/linux-desktops-setup/GUID-AA333E98-0AA4-419B-8676-8B2C6F89CAF7.html


## ファイルの準備

事前準備でダウンロードしておいたファイルから必要なものを取り出します。

1. ダウンロード済みのzipを解凍
2. Host_Drivers配下の[NVD-VGPU-○○○.zip]があることを確認

続いて、対象とするESXiのローカルデータストアに[NVD-VGPU-○○○.zip]をアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/c79e208f-3d0c-16c9-6b3b-4124dab8b28a.png)


## インストール実行

ESXiにSSHでアクセスを行ってインストール作業を行います。

まずxorgサービスを停止します。
```bash
/etc/init.d/xorg stop
```

メンテナンスモードを有効にします。
```bash
 esxcli system maintenanceMode set --enable true
```
アップロードしたファイルを指定する形で、以下インストールコマンドを実行します。
※絶対パスの指定が必要
```bash
esxcli software vib install -d /vmfs/volumes/<データストア名>/NVD-VGPU-○○○.zip 
```
再起動を行い、完了後メンテナンスモードを解除します。
```bash
reboot
esxcli system maintenanceMode set --enable false
```
nvidia-smiを実行して以下のドライバがインストールされていることが確認できます。

    # nvidia-smi
    Thu Aug  8 17:07:05 2024
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.04             Driver Version: 535.183.04   CUDA Version: N/A      |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:37:00.0 Off |                  Off |
    | N/A   61C    P8              19W /  70W |     95MiB / 16384MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+

以上がパターン1です。

# パターン2: vSphere Lifecycle Manager経由でモジュールをインポートしてインストール

次はvSphere Lifecycle Managerを用いたインストールを行います。
こちらではvSphereのGUI上のみからインストールの完了まで行えます。
また、クラスタ内のESXiホストをまとめて実施してあげることができます。


## Lifecycle Managerへのインポート

まずLifecycle Managerへモジュールのインポートを行います。

左メニューのLifecycle Managerを選択し、[アクション]-[更新のインポート]を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/921bab9d-9b27-e669-33b8-e98246177fc7.png)


事前準備で用意しておいたファイルを指定して、インポートの処理の完了を待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/92916897-9e99-85cb-7a5b-c96d3082b118.png)



インポートが完了すると、一番下のコンポーネントのところに追加されていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/260e994d-a617-3412-2d37-241c7d1ec6c0.png)

## ESXiクラスタへの追加

インポートしたドライバをESXiクラスタに追加していきます。

vSphereクラスタのアップデートを選択し、単一イメージで管理を選択します。
(単一イメージで元々管理している場合は、イメージの編集を選択します)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/c2d9e2f0-afdf-947f-9b41-fb95127fb943.png)



[イメージの手動設定]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/2b517f8b-69ce-8610-b35b-20279fd925d1.png)



コンポーネント欄の[詳細を表示]-[コンポーネントの追加]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/adbc77bb-95ce-359f-0464-eb4b04e65bc5.png)



コンポーネントの追加画面で先程インポートしたドライバがあるため、選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/ec23de2e-8315-616f-50e2-237fc511eafe.png)



追加がされたら、保存を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/5ee03f70-3180-fec2-bee6-19ee6cddf8e0.png)



クラスタのコンプライアンス確認が走るため確認が終了後、[イメージのセットアップの完了]を選択し[すべてをステージング]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/e2598653-87a2-6826-83a7-131afa769c3e.png)



ステージング処理が開始され、完了したら[全て修正]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/3c6acb93-7e80-c928-33ea-ff4c2643a4ce.png)



修正の同意画面が表示されるため、問題なければ[修正の開始]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/5fa19957-14d1-d68a-d382-68f5a7e144ca.png)



ESXiが順番にメンテナンスモードに入り、イメージの修正が行われます。
無事に処理が完了したら、ドライバの追加が完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/e28f119a-9f16-72a3-f125-05474e801aac.png)



以上がパターン2です。
今回はvSphereクラスタのESXi3台まとめて実施されています。

# パターン3: GPU Manager経由でモジュールをインポートしてインストール

最後のパターンとしてGPU Managerを用いたものを記載します。
こちらではドライバの事前ダウンロードは不要ですが、仮想アプライアンスとしてGPU Managerを展開しておく必要があります。


## GPU Managerのセットアップ

まずLICENSE SERVERからOVFをダウンロードします。
LICENSE  PORTALのNon Driver Downloadsの画面からダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/1c30d033-d6d7-0b7f-0f7c-8358d5ea3a29.png)



ダウンロードができたら、OVFテンプレートのデプロイから展開を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/bd0c0bc2-ca1f-d966-c559-d70bda31fa35.png)


展開完了後起動してブラウザから、仮想マシンのIPアドレスにアクセスをします。
1回目のアクセス時にパスワードの設定を求められるため、登録しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/f375167a-114a-16b6-0271-67f5bca65bb1.png)



登録が完了するとそのままログインされます。
左上の登録を選択するとvCenterを登録できるため、入力して登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/c55f314c-df4a-1092-b11a-e07f995ee561.png)



登録完了後、vSphere Clientに戻りページをリロードすると、左メニューに[NVIDIA GPU マネジャー]が追加され、選択するとドライバのダウンロードを行う画面が表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/e993b4a7-35b0-4858-bf43-107c17473d84.png)



GPU Managerでドライバをダウンロードするには、NVIDIAのLICENSE PORTALのAPIキーが必要となります。
[Software Downloads]の権限を持ったAPIキーを発行して、こちらに適用しておきます。
適用が完了すると、GPU ドライバの一覧が表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/1210d935-6052-d2d5-5ab3-c61ab8856b76.png)



## GPUドライバのダウンロード

[NVIDIA_ESXi_8.0_VGPU_17.3_550.90.05]を選択して、ダウンロードしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/2553492f-0a2f-2e20-4c3a-9ed8de4539d0.png)



ダウンロードが完了すると、[ドライバーを管理する]の画面に表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/4b8ed3d1-20ce-986e-0811-98dcc26858be.png)




## ドライバの反映

Lifecycle Managerを開き、アクションの更新の同期を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/ede35b1b-48e5-0cb9-8061-9deacf3815d8.png)



更新の同期が完了後、vSphereクラスタの[アップデート]から[編集]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/ec578d02-2013-8bb1-cc1a-b7935816cc13.png)



パターン2の時に追加したコンポーネントのバージョンを選択すると、GPU Managerでダウンロードしたコンポーネントも選べるようになっています。
あとはパターン2のときと同様に保存してクラスタに反映することで利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/8ee1983d-058c-445f-da0c-9c9f26d32659.png)

以上がパターン3です。
パターン1,2と異なり、事前にドライバを手元に落としておく必要がないのが確認できました。

# まとめ

今回はESXiにvGPUドライバをインストールする方法として3パターン行ってみました。
GPU Managerは一回展開すれば、都度ドライバをNVIDIAのサイトに取りに行く必要が無いのは便利かなという印象でした。


## おまけ

vSphere Lifecycle Managerにドライバ等のコンポーネントを追加はできるものの、削除する方法が用意されていないなぁと思っていました。
調べたところ、一応vCenterにSSHを行い、以下コマンドでvCenter側が持っているDBの情報をリセットすれば可能な感じでした。
ただし、まとめて全部の手動追加のものが消えるため、使用は注意が必要そうです（基本は検証用かな）。

```bash
service-control --stop vmware-updatemgr
python /usr/lib/vmware-updatemgr/bin/updatemgr-utility.py reset-db
service-control --start vmware-updatemgr
```



## 参考にしたサイト

https://docs.nvidia.com/vgpu/latest/grid-software-quick-start-guide/index.html#installing-grid-vgpu-manager-vmware-vsphere

https://docs.nvidia.com/vgpu/vmware-vcenter-gpu-manager/latest/user-guide/index.html

https://knowledge.broadcom.com/external/article/316581/resetting-vmware-update-manager-database.html