Container Service for Kubernetes (ACK) マネージド Pro クラスタは、GPU 共有をサポートしています。 GPU 共有を使用すると、GPU リソースを共有し、メモリを分離できます。 このトピックでは、複数 GPU 共有ポリシーを構成する方法について説明します。
前提条件
詳細については、「ACK マネージド Pro クラスタを作成する」をご参照ください。
詳細については、「GPU 共有コンポーネントをインストールする」をご参照ください。
複数 GPU 共有の概要
複数 GPU 共有では、GPU メモリを分離した共有コンピューティングリソースが必要です。
モデル開発フェーズでは、アプリケーションは全リソースを占有せずに複数の GPU を必要とする場合があります。 すべての GPU を開発環境に割り当てると、リソースが浪費される可能性があります。 この問題を回避するには、複数 GPU 共有を使用します。
複数 GPU 共有を使用すると、アプリケーションは M 個の GPU に分散された N GiB の GPU メモリをリクエストできます。各 GPU は N/M GiB を割り当てます。 N/M の値は整数である必要があり、すべての M 個の GPU は同じ Kubernetes ノードに存在する必要があります。 たとえば、8 GiB のメモリをリクエストし、2 つの GPU を指定すると、各 GPU は 4 GiB を割り当てます。
単一 GPU 共有: ポッドは、1 つの GPU のみによって割り当てられる GPU リソースをリクエストできます。
複数 GPU 共有: ポッドは、複数の GPU によって均等に割り当てられる GPU リソースをリクエストできます。
複数 GPU 共有ポリシーの構成
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。 左側のペインで、 を選択します。
[ジョブ] ページで、[YAML から作成] をクリックします。 次の内容を [テンプレート] セクションにコピーし、[作成] をクリックします。
YAML テンプレートの説明:
YAML テンプレートは TensorFlow MNIST ジョブを定義します。 ジョブは、2 つの GPU によって割り当てられる 8 GiB のメモリをリクエストします。 各 GPU は 4 GiB のメモリを割り当てます。
2 つの GPU をリクエストするには、
aliyun.com/gpu-count: 2ポッドラベルを追加します。8 GiB のメモリをリクエストするには、
aliyun.com/gpu-mem: 8リソース制限を追加します。
複数 GPU 共有ポリシーの確認
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。 左側のペインで、 を選択します。
作成したポッド (例: 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 は 4,309 MiB のメモリを提供でき、これはポッドによってリクエストされます。 各 GPU の実際のメモリサイズは 16,160 MiB です。
ポッドのログを表示するには、ポッドの [アクション] 列にある [ログ] をクリックします。 次の情報が表示されます。
totalMemory: 4.21GiB freeMemory: 3.91GiB totalMemory: 4.21GiB freeMemory: 3.91GiBデバイス情報は、各 GPU が 4 GiB のメモリを割り当てることを示しています。 各 GPU の実際のメモリサイズは 16,160 MiB です。 これは、メモリ分離が実装されていることを意味します。