デフォルトでは、スケジューラは、別の GPU に切り替える前に、ノード上の GPU のすべてのリソースをポッドに割り当てます。これは、GPU フラグメントを防ぐのに役立ちます。状況によっては、GPU に障害が発生した場合にビジネスの中断が発生するのを防ぐために、ポッドをノード上の異なる GPU に分散させることができます。このトピックでは、GPU 共有機能が有効になっているノードの GPU 選択ポリシーを構成する方法について説明します。
前提条件
ポリシーの説明
GPU 共有機能が有効になっているノードに複数の GPU がある場合は、次の GPU 選択ポリシーのいずれかを選択できます。
Binpack: デフォルトでは、binpack ポリシーが使用されます。スケジューラは、別の GPU に切り替える前に、GPU のすべてのリソースをポッドに割り当てます。これは、GPU フラグメントを防ぐのに役立ちます。
Spread: スケジューラは、GPU に障害が発生した場合にビジネスの中断が発生するのを防ぐために、ポッドをノード上の異なる GPU に分散させようとします。
この例では、ノードに 2 つの GPU があります。各 GPU は 15 GiB のメモリを提供します。Pod1 は 2 GiB のメモリを要求し、Pod2 は 3 GiB のメモリを要求します。
手順
デフォルトでは、binpack ポリシーを使用して GPU が選択されます。GPU 共有で spread ポリシーを有効にするには、次の手順を実行します。
ステップ 1: ノードプールを作成する
コンテナサービス ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、クラスタの名前をクリックしてクラスタの詳細ページに移動します。左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページの右上隅で、[ノードプールの作成] をクリックします。
[ノードプールを作成] ダイアログボックスで、ノードプールのパラメータを構成し、[注文の確認] をクリックします。次の表に、主要なパラメータを示します。その他のパラメータの詳細については、「ノードプールを作成および管理する」をご参照ください。
パラメータ
説明
インスタンスタイプ
[アーキテクチャ] を [GPU アクセラレーション] に設定し、複数の GPU アクセラレーションインスタンスタイプを選択します。
spread ポリシーは、ノードに複数の GPU がある場合にのみ有効になります。したがって、複数の GPU を搭載したインスタンスタイプを選択してください。
予想ノード数
ノードプール内のノードの初期数を指定します。ノードプールにノードを作成しない場合は、このパラメータを 0 に設定します。
ノードラベル
アイコンをクリックして、2 つのエントリを追加します。[キー] が
ack.node.gpu.scheduleで、[値] がcgpuのラベルを追加します。このラベルは、GPU 共有機能と GPU メモリ分離機能を有効にします。[キー] が
ack.node.gpu.placementで、[値] がspreadのラベルを追加します。このラベルは、spread ポリシーを有効にします。
ステップ 2: ジョブを送信する
コンテナサービス ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、 を選択します。
ページの右上にある [YAML から作成] をクリックし、次のコードを [テンプレート] エディターにコピーして、以下のコメントに基づいてパラメータを変更します。構成が完了したら、[作成] をクリックします。
YAML テンプレートの説明:
この YAML テンプレートは、TensorFlow MNIST ジョブを定義します。ジョブは 3 つのポッドを作成し、各ポッドは 4 GiB のメモリを要求します。
ポッドリソース制限
aliyun.com/gpu-mem: 4は、ポッドのメモリをリクエストするために使用されます。GPU 選択ポリシーをノードで有効にするには、NodeSelector
kubernetes.io/hostname: <NODE_NAME>を YAML テンプレートに追加して、ポッドを指定されたノードにスケジュールします。
ステップ 3: spread ポリシーが使用されているかどうかを確認する
GPU 検査ツールを使用して、ノードの GPU 割り当て情報をクエリします。
kubectl inspect cgpu
NAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU2(Allocated/Total) GPU3(Allocated/Total) GPU Memory(GiB)
cn-shanghai.192.0.2.109 192.0.2.109 4/15 4/15 0/15 4/15 12/60
--------------------------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
12/60 (20%)結果は、ポッドが異なる GPU に分散されていることを示しています。spread ポリシーが有効になっています。