デフォルトでは、スケジューラはノード上の 1 つの GPU を可能な限り埋めてから別の GPU に移行します。このアプローチにより、GPU メモリのフラグメンテーションを防ぐことができます。ただし、特定のシナリオでは、単一の GPU が障害した場合のワークロードへの影響を最小限に抑えるため、複数の GPU に Pod を分散させたい場合があります。本トピックでは、GPU 共有における GPU 選択ポリシーの設定方法について説明します。
前提条件
仕組み
複数の GPU を搭載したノードで GPU 共有を使用する場合、Pod への GPU 割り当てポリシーとして以下の 2 つから選択できます。
-
Binpack:(デフォルト)スケジューラは、ノード上の 1 つの GPU を可能な限り埋めてから、別の GPU のリソースを割り当てます。このアプローチにより、GPU メモリのフラグメンテーションを防止します。
-
Spread:スケジューラは、ノード上の利用可能なすべての GPU に Pod をできるだけ均等に分散させます。このアプローチにより、単一の GPU が障害した場合に影響を受けるワークロードの数を最小限に抑えます。
以下の例では、各 GPU が 15 GiB の GPU メモリを持つ 2 つの GPU を搭載したノードを示しています。Pod1 は 2 GiB、Pod2 は 3 GiB の GPU メモリをリクエストします。
操作手順
ノードの GPU 選択ポリシーはデフォルトで Binpack に設定されています。Spread ポリシーを GPU 共有に使用するには、以下の手順に従ってください。
ステップ 1:ノードプールの作成
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
ノードプール ページの右上隅で、[ノードプールの作成] をクリックします。
-
ノードプールの作成 ページで、パラメーターを設定し、注文の確認 をクリックします。以下の表に、主なパラメーターを示します。その他のパラメーターについては、「ノードプールの作成と管理」をご参照ください。
パラメーター
説明
インスタンスタイプ
アーキテクチャ で、GPU インスタンス を選択し、インスタンスタイプを選択します。
Spreadポリシーは、複数の GPU を搭載したノードでのみ有効です。複数の GPU を搭載したインスタンスタイプを選択してください。期待ノード数
ノードプール内の初期ノード数を指定します。すぐにノードを作成しない場合は、0 を設定します。
ノードラベル
をクリックして、以下の 2 つのラベルを追加します。-
キー に
ack.node.gpu.schedule、値 にcgpuを設定します。これにより、GPU 共有および GPU メモリ隔離が有効になります。 -
キー に
ack.node.gpu.placement、値 にspreadを設定します。これにより、ノードに対してSpreadポリシーが有効になります。
-
ステップ 2:ジョブの送信
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
ページ右上隅で、YAML のリソースの作成 をクリックします。次の YAML コンテンツを テンプレート エディターにコピーし、コメントに従って内容を修正した後、作成する をクリックします。
YAML ファイルの説明:
-
この YAML ファイルは、TensorFlow MNIST サンプルを使用するジョブを定義します。このジョブは 3 つの Pod を作成し、各 Pod は 4 GiB の GPU メモリをリクエストします。
-
Pod は、Pod 仕様の
resources.limitsセクションでaliyun.com/gpu-mem: 4を定義することで、4 GiB の GPU メモリをリクエストします。 -
シングルノード上で効果を観察するために、YAML ファイルには特定のノードに Pod をスケジュールするための
nodeSelector、kubernetes.io/hostname: <NODE_NAME>が追加されています。
-
ステップ 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%)
出力結果から、3 つの Pod がノード上の異なる GPU にスケジュールされていることが確認できます。これにより、Spread ポリシーが有効になっていることが確認されます。