MIGってなぁに?
MIG(Multi-Instance GPU)は、NVIDIAのGPUを複数の仮想GPUに分割して、リソースを効率的に使うための技術です。 これを使うと、1つのGPUを複数のユーザーやアプリケーションで共有できるようになります。 MIGを使えば、GPUリソースの無駄を減らして、より多くのタスクを同時に実行することができます。
以下の公式ユーザーガイドを参考に設定していきます。 docs.nvidia.com
要件
今回は、例としてH100が8本搭載されている筐体へ、以下の要件で設定する手順を書きます。
GPU番号 | MIG設定 | メモリ使用量 |
---|---|---|
1~2 | なし | - |
3~5 | 1g.10gb | 10GBずつ |
6~8 | 2g.20gb | 20GBずつ |
スライスの切り方は、H100の場合、下図の通りの切り方に制限されています。
Profile ID | Profile Name | Memory (GiB) | SMs | GPU Instances | Compute Instances | Description |
---|---|---|---|---|---|---|
0 | 1g.10gb | 10 | 14 | 7 | 7 | 1/7th of GPU |
1 | 2g.20gb | 20 | 28 | 3 | 3 | 2/7th of GPU |
2 | 3g.40gb | 40 | 42 | 2 | 2 | 3/7th of GPU |
3 | 4g.40gb | 40 | 56 | 1 | 1 | 4/7th of GPU |
4 | 7g.80gb | 80 | 98 | 1 | 1 | Full GPU |
設定手順
作業前確認
作業前にGPU管理サービスの状態やGPUの状態を確認します。
# systemctl status nvsm
● nvsm.service - NVIDIA System Management
Loaded: loaded (/lib/systemd/system/nvsm.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-01-01 12:00:00 JST; 1h 30min ago
Main PID: 1234 (nvsm)
Tasks: 10 (limit: 4915)
Memory: 50.0M
CGroup: /system.slice/nvsm.service
└─1234 /usr/bin/nvsm
# systemctl status dcgm
● dcgm.service - NVIDIA Data Center GPU Manager
Loaded: loaded (/lib/systemd/system/dcgm.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2024-01-01 12:00:00 JST; 1h 30min ago
Main PID: 5678 (dcgm)
Tasks: 0 (limit: 4915)
Memory: 0B
CGroup: /system.slice/dcgm.service
└─5678 /usr/bin/dcgm
# nvidia-smi
Thu Jan 01 12:00:00 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.54.03 Driver Version: 535.54.03 CUDA Version: 12.0 |
|-----------------------------------------+----------------------+----------------------|
| 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 NVIDIA H100 80GB HBM3 On | 00000000:00:00.0 Off | 0 |
| N/A 30C P0 70W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA H100 80GB HBM3 On | 00000000:01:00.0 Off | 0 |
| N/A 30C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 2 NVIDIA H100 80GB HBM3 On | 00000000:02:00.0 Off | 0 |
| N/A 32C P0 70W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 3 NVIDIA H100 80GB HBM3 On | 00000000:03:00.0 Off | On |
| N/A 32C P0 74W / 700W | 100MiB / 81559MiB| 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 4 NVIDIA H100 80GB HBM3 On | 00000000:04:00.0 Off | On |
| N/A 30C P0 73W / 700W | 23MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 5 NVIDIA H100 80GB HBM3 On | 00000000:05:00.0 Off | On |
| N/A 29C P0 73W / 700W | 69MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 6 NVIDIA H100 80GB HBM3 On | 00000000:06:00.0 Off | On |
| N/A 32C P0 72W / 700W | 70MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 7 NVIDIA H100 80GB HBM3 On | 00000000:07:00.0 Off | 0 |
| N/A 34C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
GPU管理サービスの停止
マニュアルにはdcgmも停止しろって書いてあるんですが、今回の環境の場合、dcgmはもともと停止していたため何もしていません。 前項の状態をもとにお好みで適量ふりかけてください。 (設定変更系のコマンドなのでsudo必要な場合が多いです)
$ systemctl stop nvsm
$ systemctl stop dcgm
MIGモードの有効化
次に、MIGモードを手動で有効化します。カンマ区切りでまとめて有効化ができます。
↑のnvidia-smi
出力と比較すると、有効化したGPUについてはGPU-Util
がN/A
になって、MIG M.
がEnabled`になります。
$ nvidia-smi -i 2,3,4,5,6,7 -mig 1
# nvidia-smi
Thu Jan 01 12:00:00 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.54.03 Driver Version: 535.54.03 CUDA Version: 12.0 |
|-----------------------------------------+----------------------+----------------------|
| 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 NVIDIA H100 80GB HBM3 On | 00000000:00:00.0 Off | 0 |
| N/A 30C P0 70W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA H100 80GB HBM3 On | 00000000:01:00.0 Off | 0 |
| N/A 30C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 2 NVIDIA H100 80GB HBM3 On | 00000000:02:00.0 Off | 0 |
| N/A 32C P0 70W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
| 3 NVIDIA H100 80GB HBM3 On | 00000000:03:00.0 Off | On |
| N/A 32C P0 74W / 700W | 89MiB / 81559MiB | N/A Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
| 4 NVIDIA H100 80GB HBM3 On | 00000000:04:00.0 Off | On |
| N/A 30C P0 73W / 700W | 89MiB / 81559MiB | N/A Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
| 5 NVIDIA H100 80GB HBM3 On | 00000000:05:00.0 Off | On |
| N/A 29C P0 73W / 700W | 76MiB / 81559MiB | N/A Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
| 6 NVIDIA H100 80GB HBM3 On | 00000000:06:00.0 Off | On |
| N/A 32C P0 72W / 700W | 75MiB / 81559MiB | N/A Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
| 7 NVIDIA H100 80GB HBM3 On | 00000000:07:00.0 Off | 0 |
| N/A 34C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
設定可能なプロファイルの確認
設定可能なプロファイル(スライスの切り方)を確認します。
# nvidia-smi mig -lgip
+-----------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|=============================================================================|
| 0 MIG 1g.10gb 19 7/7 9.62 No 14 1 0 |
| 1 1 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 1g.10gb+me 20 1/1 9.62 No 14 1 0 |
| 1 1 1 |
+-----------------------------------------------------------------------------+
| 0 MIG 1g.20gb 15 4/4 19.50 No 14 1 0 |
| 1 1 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 2g.20gb 14 3/3 19.50 No 30 2 0 |
| 2 2 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 3g.40gb 9 2/2 39.25 No 46 3 0 |
| 3 3 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 4g.40gb 5 1/1 39.25 No 62 4 0 |
| 4 4 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 7g.80gb 0 1/1 79.00 No 114 7 0 |
| 8 7 1 |
+-----------------------------------------------------------------------------+
# nvidia-smi mig -lgipp
GPU 0 Profile ID 19 Placements: {0,1,2,3,4,5,6}:1
GPU 0 Profile ID 20 Placements: {0,1,2,3,4,5,6}:1
GPU 0 Profile ID 15 Placements: {0,2,4,6}:2
GPU 0 Profile ID 14 Placements: {0,2,4}:2
GPU 0 Profile ID 9 Placements: {0,4}:4
GPU 0 Profile ID 5 Placement : {0}:4
GPU 0 Profile ID 0 Placement : {0}:8
MIGインスタンスの作成
次に、MIGインスタンスを作成します。
$ nvidia-smi mig -i 2 -cgi 1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb -C
$ nvidia-smi mig -i 3 -cgi 1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb -C
$ nvidia-smi mig -i 4 -cgi 1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb -C
#スライスのパターン内であれば一つずつ設定も可能
$ nvidia-smi mig -i 5 -cgi 2g.20gb -C
$ nvidia-smi mig -i 5 -cgi 2g.20gb -C
$ nvidia-smi mig -i 5 -cgi 2g.20gb -C
$ nvidia-smi mig -i 6 -cgi 2g.20gb,2g.20gb,2g.20gb -C
$ nvidia-smi mig -i 7 -cgi 2g.20gb,2g.20gb,2g.20gb -C
変更後の状態確認
最後に、変更後の状態を確認します。
MIG devices
欄が増え、MIGインスタンスの情報が表示されるようになります。
$ nvidia-smi mig -lgi
+-------------------------------------------------------+
| GPU instances: |
| GPU Name Profile Instance Placement |
| ID ID Start:Size |
|=======================================================|
| 2 MIG 1g.10gb 19 7 0:1 |
+-------------------------------------------------------+
| 2 MIG 1g.10gb 19 8 1:1 |
+-------------------------------------------------------+
~~~~~~~~~~~~~~~~~~~~~~~~以下略~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ nvidia-smi mig -lci
+--------------------------------------------------------------------+
| Compute instances: |
| GPU GPU Name Profile Instance Placement |
| Instance ID ID Start:Size |
| ID |
|====================================================================|
| 2 7 MIG 1g.10gb 0 0 0:1 |
+--------------------------------------------------------------------+
| 2 8 MIG 1g.10gb 0 0 0:1 |
+--------------------------------------------------------------------+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.54.03 Driver Version: 535.54.03 CUDA Version: 12.0 |
|-----------------------------------------+----------------------+----------------------+
| 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 NVIDIA H100 80GB HBM3 On | 00000000:1B:00.0 Off | 0 |
| N/A 28C P0 70W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA H100 80GB HBM3 On | 00000000:43:00.0 Off | 0 |
| N/A 29C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-----------------------------------------+----------------------+----------------------+
| 7 NVIDIA H100 80GB HBM3 On | 00000000:DF:00.0 Off | On |
| N/A 33C P0 72W / 700W | 2MiB / 81559MiB | N/A Default |
| | | Enabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| MIG devices: |
+------------------+--------------------------------+-----------+-----------------------+
| GPU GI CI MIG | Memory-Usage | Vol| Shared |
| ID ID Dev | BAR1-Usage | SM Unc| CE ENC DEC OFA JPG |
| | | ECC| |
|==================+================================+===========+=======================|
| 2 7 0 0 | 12MiB / 9984MiB | 16 0 | 1 0 1 0 1 |
| | 0MiB / 16383MiB | | |
+------------------+--------------------------------+-----------+-----------------------+
| 2 8 0 1 | 12MiB / 9984MiB | 16 0 | 1 0 1 0 1 |
| | 0MiB / 16383MiB | | |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
(おまけ)MIG設定削除
MIG設定の削除は以下のコマンドもしくは筐体の再起動で行えます。
- 全てのMIG設定削除
$ nvidia-smi mig -dci && sudo nvidia-smi mig -dgi
# nvidia-smi -mig 0
- 個別のMIG設定削除
#MIG
$ nvidia-smi mig -dgi <GPU ID> -i <GI ID>
#GPU
$ nvidia-smi -i <GPU ID> -mig 0
次回予告
この記事では、MIGの手動設定について紹介しました。
手動設定には、再起動するとMIGの有効化設定から全ての設定が消えるという致命的な弱点があります。
次の記事では、再起動時にMIG設定を自動的に適用するためのmig-parted
の設定について詳しく説明します。
参考
公式紹介ページMulti-Instance GPU (MIG) | NVIDIA
公式ユーザーガイド1. Introduction — NVIDIA Multi-Instance GPU User Guide r560 documentation
公式のわかりやすい解説記事「DGX A100 テストドライブ」で MIG を試してみた #GPU - Qiita