- 基本情報
- ネットワーク要件
- シングルノードの要件とインストール
- マルチノードの要件とインストール
- インストール後
- GPU をプロビジョニングする
- 構成ファイルを使用する
- ノードのスケジュール設定
- ノードのスケジュール設定を管理する
- 移行とアップグレード
- 基本的なトラブルシューティング ガイド
ノードのスケジュール設定を管理する
ノードのスケジュール設定は特に、ハードウェアの運用を効率化し、ML レプリカ (ポッド)、スキル、パイプラインを確実に処理するのに役立ちます。主に次の 2 つの状況で使用します。
- GPU ノードがある場合に、GPU を必要とするワークロードだけがそのノードでスケジュール設定されるようにする場合
- ML ワークロードの分離を向上させ、ML ワークロードが他のアプリケーションの妨げにならないようにする場合
既定では、必要なリソースを持つノードは Kubernetes スケジューラーによってすべて等しいと見なされます。
ML レプリカ (ポッド)、スキル、またはパイプラインのスケジュール設定を特定のノードに移動する方法は 2 つあり、どちらの方法も UiPath AI Center でサポートされています。
- Node Affinity を利用して Pod をノードに割り当てる: ML ポッドをノード上の他のポッドと併置する場合に便利です。1 つのノードに複数のラベルを適用できます。
- Taint と Toleration: 専用ノード向けです。すべてのポッドを排除するか (
NoSchedule
)、またはスケジュール設定の条件に一致しないポッドに低いスケジュール設定を適用します (PreferNoSchedule
)。1 つまたは複数のノードに複数の taint を適用できますが、ノードの taint では「AND」の Boolean 論理のみがサポートされます。
ノード アフィニティは、ポッドを一連のノードに引き付けるポッド プロパティであり、優先条件または要件のいずれかとして設定します。これに対し、taint ではノードで一連のポッドを排除できます。
1 つ目の方法では、ノード ラベルを使用してレプリカとノードの間にアフィニティを作成します。一方、2 つ目の方法では、ノードに taint を割り当てることでアンチアフィニティを適用します。
PodSpec
テンプレートは、両方の方法をサポートするよう設計されており、デプロイ時に GPU または GPU なしのどちらを選択するかに基づいてカスタマイズされます。
エージェント ノードを追加してリソース プールを拡張している状況で、エージェント ノードでの ML ポッドのスケジュール設定に影響を与えたい場合は、ノード アフィニティを適用できます。そのためには、以下のコマンドを使用してノードにラベルを追加します。
- CPU の場合:
kubectl label node <node_name> node.type=aic.ml.cpu
- GPU の場合:
kubectl label node <node_name> node.type=aic.ml.gpu
ノード アフィニティを使用しても、ノードが確実に ML ワークロードへのサービング専用になるわけではありません。また、ラベルが適用された同じノードに、他のワークロード ポッドがスケジュール設定されなくなるわけではありません。
ノードを専用にするには、taint を使用するか、ノード アフィニティと taint を組み合わせて使用する必要があります。エージェント ノードを ML GPU ポッドまたは ML CPU ポッドへのサービング専用にするには、ノードに次の taint を適用します。
- CPU の場合:
kubectl taint node <node_name> aic.ml/cpu=present:NoSchedule
- GPU の場合:
kubectl taint node <node_name> nvidia.com/gpu=present:NoSchedule
エージェント ノードを ML GPU ポッドへのサービング専用にし、同じノードへの ML CPU ポッドのスケジュール設定に影響を及ぼすには、ノード アフィニティと taint を組み合わせて使用できます。
kubectl taint node <node_name> nvidia.com/gpu=present:PreferNoSchedule
kubectl label node <node_name> node.type=aic.ml.cpu
kubectl taint node <node_name> nvidia.com/gpu=present:PreferNoSchedule
kubectl label node <node_name> node.type=aic.ml.cpu