モデル開発では、大量のリソースを必要としないにもかかわらず、複数の GPU カードが必要になる場合があります。開発プラットフォームに各 GPU カードを割り当てると、リソースを無駄にする可能性があります。マルチ GPU 共有を使用すると、Pod はいずれの GPU カードも排他的に占有することなく、複数のカードから同量の GPU メモリ割り当てを取得できます。ACK Pro クラスターは、よりきめ細やかなリソース使用率を実現するために、GPU メモリ分離を使用してこれをサポートします。
前提条件
次の条件を満たしていることを確認してください:
制限事項
マルチ GPU 共有は、計算能力の割り当てではなく、計算能力の共有のみを伴う GPU メモリ分離をサポートします。
仕組み
マルチ GPU 共有では、単一の Pod が複数のカードから GPU メモリを要求できます。各カードは同量を提供します。
| モード | 説明 |
|---|---|
| 単一 GPU 共有 | Pod が 1 枚の GPU カードのリソースの一部を使用します。 |
| マルチ GPU 共有 | Pod が複数の GPU カードにまたがり、各カードが同量の GPU メモリを提供します。 |
割り当ての計算式:Pod が M 枚の GPU カードから N GiB を要求する場合、各カードは N/M GiB を割り当てます。
たとえば、Pod が 2 枚のカードにまたがって 8 GiB を要求する場合、各カードから 4 GiB を受け取ります。
制約:
-
N/M は整数である必要があります。
-
M 枚の GPU カードはすべて同一の Kubernetes ノード上に存在する必要があります。
マルチ GPU 共有の設定
-
ACK コンソールにログオンします。左側のナビゲーションペインで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスターの名前をクリックします。 左側のナビゲーションペインで、[ワークロード] > [ジョブ] をクリックします。
-
[ジョブ] ページで、[YAML から作成] をクリックします。 次の YAML を [テンプレート] に貼り付け、[作成] をクリックします。
apiVersion: batch/v1 kind: Job metadata: name: tensorflow-mnist-multigpu spec: parallelism: 1 template: metadata: labels: app: tensorflow-mnist-multigpu aliyun.com/gpu-count: "2" # 使用する GPU カードの枚数 spec: containers: - name: tensorflow-mnist-multigpu image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5 command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: aliyun.com/gpu-mem: 8 # 全カード合計の GPU メモリ (GiB) workingDir: /root restartPolicy: Never主要パラメーター:
パラメーター タイプ 説明 aliyun.com/gpu-count文字列 (Pod ラベル) GPU カードの枚数です。 metadata.labelsに設定します。例:"2"は 2 枚のカードからメモリを要求します。aliyun.com/gpu-mem整数 (リソース制限) 全カード合計の GPU メモリ (GiB) です。 resources.limitsに設定します。例:8は合計 8 GiB (カードあたり 4 GiB) を意味します。
GPU メモリ分離の確認
Job の開始後、Pod が割り当てられた GPU メモリにのみアクセスできることを確認します。
-
[クラスター] ページで、クラスターの名前をクリックします。左側のナビゲーションペインで、[ワークロード] > [Pod] をクリックします。
-
Pod (例:
tensorflow-mnist-multigpu-***) で、[アクション] > [ターミナル] をクリックし、以下を実行します。nvidia-smi想定される出力:
Wed Jun 14 03:24:14 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.161.03 Driver Version: 470.161.03 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | 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 V100-SXM2... On | 00000000:00:09.0 Off | 0 | | N/A 38C P0 61W / 300W | 569MiB / 4309MiB | 2% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-SXM2... On | 00000000:00:0A.0 Off | 0 | | N/A 36C P0 61W / 300W | 381MiB / 4309MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+出力で次を確認します:
-
2 枚の GPU カードが表示されていること (GPU 0 と GPU 1)。これは
aliyun.com/gpu-count: "2"と一致します。 -
各カードの合計メモリが 4309 MiB と表示されていること。これは、要求したカードあたり 4 GiB に基づく割り当てであり、物理メモリの 16,160 MiB ではないため、GPU メモリ分離が有効であることを示します。
-
-
同じ Pod で、[アクション] > [ログ] をクリックします。この出力が 2 回 (カードごとに 1 回) 表示されることを確認します。
totalMemory: 4.21GiB freeMemory: 3.91GiBtotalMemory がカードあたり約 4 GiB (物理メモリの 16,160 MiB ではない) であることは、GPU メモリ分離が有効であることを示します。