ACK マネージドクラスター Pro Edition は、共有GPUをサポートしています。共有GPUは、Kubernetesにおける共有GPUスケジューリングとGPUメモリ隔離を可能にします。このトピックでは、共有GPUスケジューリングのための多GPU共有ポリシーを設定する方法について説明します。
前提条件
多GPU共有の概要
現在、多GPU共有は計算能力共有によるGPUメモリ隔離をサポートしていますが、計算能力割り当てはサポートしていません。
モデル開発中、複数のGPUカードが必要になる場合がありますが、必ずしも大規模なリソースが必要なわけではありません。すべてのGPUカードを開発プラットフォームに割り当てると、リソースの無駄が発生する可能性があります。GPUスケジューリングのための多GPU共有は、この問題を解決します。
多GPU共有ポリシーとは、アプリケーションがN GiBのGPUメモリを要求し、M個のGPUカードがそれを割り当てることを意味します。各カードはN/M GiBを割り当てます。(N/Mは整数である必要があり、M個のGPUカードは同じKubernetesノード上にある必要があります。) 例えば、8 GiBのGPUメモリを要求し、2つのGPUカードを指定した場合、各カードは4 GiBを割り当てます。
単一GPU共有: Podは1つのGPUカードのみを要求し、そのリソースの一部を使用します。
多GPU共有: Podは複数のGPUカードを要求します。各GPUはそのリソースの一部を提供し、各GPUによって提供されるリソースの量は同じです。
多GPU共有ポリシーの設定
Container Service 管理コンソールにログインします。Container Service 管理コンソール 。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
「クラスターリスト」ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、をクリックします。
ジョブ ページで、YAML のリソースの作成 をクリックします。次の内容を テンプレート エリアにコピーし、作成する をクリックします。
YAMLファイルは以下の通りです。
このYAMLは、TensorFlow MNISTの例を使用するジョブを定義します。このタスクは8 GiBのGPUメモリと2つのGPUカードを要求し、各GPUカードは4 GiBのGPUメモリを提供します。
Podラベルに
aliyun.com/gpu-count: 2を定義することで、2つのGPUカードを要求できます。Pod resources.limitsに
aliyun.com/gpu-mem: 8を定義することで、8 GiBのGPUメモリを要求できます。
多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メモリの合計は4309 MiB (要求された4 GiBのGPUメモリであり、各カードの実際のGPUメモリは16160 MiB) です。
作成済みのコンテナ(例:tensorflow-mnist-multigpu-***)の行で、アクション 列の [操作] をクリックします。次に、ログ をクリックしてコンテナのログを表示します。以下の重要な情報を確認できます:
totalMemory: 4.21GiB freeMemory: 3.91GiB totalMemory: 4.21GiB freeMemory: 3.91GiB主要情報は、アプリケーションによって照会されたデバイス情報において、各カードのGPUメモリの合計が約4 GiBであり、各カードの実際のGPUメモリである16160 MiBではないことを示しています。これは、アプリケーションによって使用されるGPUメモリが隔離されていることを意味します。