GPU デバイス上で実行される ACS クラスタでは、GPU アクセラレーション ポッドを同じ GPU-HPN ノードにスケジュールできます。 ポッドは、NVLink などのメソッドを介して相互に通信できます。 GPU デバイス間の通信効率と公平性を確保するために、ACS はデバイスのスケジューリング時に異なるモデルのパーティション制約に準拠します。 このトピックでは、ACS の GPU パーティションスケジューリングメカニズムとその使用シナリオについて説明します。
前提条件
この機能は、gpu-hpn コンピュートクラスのポッドとそれに対応するノードにのみ適用されます。
背景情報
GPU デバイスは、1 つ以上のチャネルを介して通信します。 ACS では、異なる GPU 仕様のポッドを同じ GPU-HPN ノードで実行することもできます。 GPU の通信効率と公平性を確保し、ポッド間の干渉を回避するために、ACS は GPU トポロジーに基づいてポッドをスケジュールします。 これを実現するために、ACS は各ポッドによって要求された GPU の数に基づいて GPU トポロジーを複数のパーティションに分割します。
次の図では、ノードには 8 つの GPU があります。 各グループには 4 つの GPU が含まれています。 各グループの GPU は相互に接続されており、グループは PCIe を介して接続されています。

次の表は、異なる GPU 仕様に基づいて作成されたパーティションを示しています。
ポッドによって要求された GPU の数 | デバイス割り当て結果のオプション |
8 | [0,1,2,3,4,5,6,7] |
4 | [0,1,2,3]、[4,5,6,7] |
2 | [0,1]、[2,3]、[4,5]、[6,7] |
1 | [0]、[1]、[2]、[3]、[4]、[5]、[6]、[7] |
ポッドが継続的に作成および削除された後、GPU デバイスにパーティションフラグメントが生成される場合があります。 その結果、ポッドは Pending 状態のままになり、ポッドのスケジューリングは失敗します。 既存のポッドのスケジューリング結果とビジネスの優先順位を確認し、保留中のポッドのリソース需要を満たすために特定のポッドを削除できます。
GPU-HPN ノードのパーティションをクエリする
異なるモデルの GPU-HPN ノードのパーティションは異なる場合があります。
gpu.p16en-16XL
ノードには、P16EN モデルの 16 個の GPU があります。次の表は、16 個の GPU を異なる GPU 仕様の Pod に割り当てる方法を示しています。
ポッドによって要求された GPU の数 | デバイス割り当て結果のオプション |
16 | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] |
8 | [0,1,2,3,4,5,6,7]、[8,9,10,11,12,13,14,15] |
4 | [0,1,2,3]、[4,5,6,7]、[8,9,10,11]、[12,13,14,15] |
2 | [0,3]、[1,2]、[4,7]、[5,6]、[8,11]、[9,10]、[12,15]、[13,14] |
1 | [0]、[1]、[2]、[3]、[4]、[5]、[6]、[7]、[8]、[9]、[10]、[11]、[12]、[13]、[14]、[15] |
ポッドのスケジューリング結果のクエリ
GPU 割り当て結果
ポッドアノテーションで GPU-HPN ポッドの GPU 割り当て結果を表示できます。 次のコードブロックはフォーマットを示しています。
apiVersion: v1
kind: Pod
metadata:
annotations:
alibabacloud.com/device-allocation: '{"gpus": {"minor": [0,1,2,3]}}'パーティションフラグメントによるポッドスケジューリング失敗の通知
ポッドが Pending 状態の場合、ポッドはスケジュールできません。 この場合に kubectl describe pod コマンドを実行すると、0/5 nodes are available: xxx メッセージが返されます。 Insufficient Partitioned GPU Devices は、パーティションフラグメントが原因でポッドのスケジューリングが失敗したことを示します。 例:
kubectl describe pod pod-demo予想される出力(その他のコンテンツは省略):
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 26m default-scheduler 0/5 nodes are available: 2 Node(s) Insufficient Partitioned GPU Devices, 1 Node(s) xxx, 2 Node(s) xxx.よくある質問
パーティションフラグメントを回避するために、ノードリソースとスケジューリングポリシーをどのように計画すればよいですか?
アプリケーション Pod によってリクエストされた GPU の数に基づいて、ノードに異なるグループタグを設定してリソースを管理します。たとえば、8 つの GPU をリクエストする Pod と 1 つの GPU をリクエストする Pod を異なるノードにスケジュールできます。
パーティションフラグメントが原因で保留中のポッドが表示された場合は、デスケジューリングメカニズムを使用して優先度の低いポッドを削除し、保留中のポッドのリソースを解放できます。
ノードのスケールが小さい場合、またはグループタグを計画できず、アプリケーションにさまざまな GPU 仕様がある場合は、GPU Pod 容量予約 を使用してアプリケーションのリソース要件を満たすことをお勧めします。
パーティションの断片化を解決するときにエビクションする Pod を選択する方法
8 つの GPU など、保留中の Pod のリソース仕様を決定します。
ターゲットノードの Pod アノテーションを確認し、
alibabacloud.com/device-allocationプロパティから デバイス割り当て結果 を表示します。割り当て結果に基づいて、どの Pod をエビクションするかを決定します。エビクション後の空きデバイスが、保留中の Pod のリソース要件とパーティション制約を満たしていることを確認します。たとえば、8 GPU の P16EN 要件では、デバイス番号 [0,1,2,3,4,5,6,7] または [8,9,10,11,12,13,14,15] がすべて割り当てられていないことを確認する必要があります。
evictやdeleteなどのコマンドを使用して Pod をエビクションします。
カスタムスケジューラを使用する場合、パーティションに関する考慮事項は何ですか?
カスタムスケジューラがノードにポッドをスケジュールした後、ACS は対応する GPU にポッドを割り当てます。 GPU の割り当て中に、ACS はパーティションフラグメントの作成を回避するために、すべてのポッドを一度にスケジュールしようとします。
カスタムスケジューラは、ノードの GPU 容量全体にのみ焦点を当てています。 GPU リソースをスケジュールする場合は、MostAllocated ポリシーを使用することをお勧めします。 これは、パーティションフラグメントの削減に役立ちます。
異なるスケジューラは ACS GPU HPN のトポロジー認識をどのように処理しますか?
スケジューラ | 条件 | 説明 |
ACS デフォルトスケジューラ | 以下のすべての条件が満たされている場合:
| スケジューラは、現在のノードのパーティション割り当てを認識しています。 パーティション要件を満たさないノードはスケジューリングに関与しません。 原因「Insufficient Partitioned GPU Devices」がポッドスケジューリング失敗イベントに表示されます。 |
ACK スケジューラ | 以下のすべての条件が満たされている場合:
| スケジューラはパーティショントポロジーを認識していません。 GPU-HPN ノードは、集中管理方式で GPU を割り当てようとします。 パーティション要件が満たされない場合、ポッドはパーティション要件が満たされるまで Pending 状態のままになります。 対応するメッセージに「Insufficient Partitioned GPU Devices」と表示されます。 詳細については、「パーティションフラグメントを回避するために、ノードリソースとスケジューリングポリシーをどのように計画すればよいですか?」をご参照ください。 |
カスタムスケジューラ | 以下のいずれかの条件が満たされている場合:
| ACK スケジューラと同じです。 |