翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SageMaker HyperPod タスクガバナンスでのトポロジ対応スケジューリングの使用
Amazon SageMaker HyperPod タスクガバナンスでのトポロジ対応スケジューリングは、Amazon EC2 インスタンスの物理ネットワークトポロジに基づいてポッドを配置することで、分散機械学習ワークロードのトレーニング効率を最適化します。アベイラビリティーゾーン、ネットワークブロック、物理ラックなどの AWS インフラストラクチャの階層構造を考慮すると、トポロジー対応のスケジューリングにより、頻繁な通信を必要とするポッドがネットワークレイテンシーを最小限に抑えるために近接してスケジュールされます。このインテリジェントな配置は、集中的なpod-to-pod通信を伴う大規模な機械学習トレーニングジョブに特に有益です。これにより、トレーニング時間が短縮され、クラスター全体のリソース使用率が向上します。
注記
トポロジ対応スケジューリングを使用するには、HyperPod タスクガバナンスのバージョンが v1.2.2-eksbuild.1 以降であることを確認します。
トポロジ対応スケジューリングでは、次のインスタンスタイプがサポートされています。
-
ml.p3dn.24xlarge
-
ml.p4d.24xlarge
-
ml.p4de.24xlarge
-
ml.p5.48xlarge
-
ml.p5e.48xlarge
-
ml.p5en.48xlarge
-
ml.p6e-gb200.36xlarge
-
ml.trn1.2xlarge
-
ml.trn1.32xlarge
-
ml.trn1n.32xlarge
-
ml.trn2.48xlarge
-
ml.trn2u.48xlarge
トポロジ対応スケジューリングは、kubectl YAML ファイルと HyperPod CLI の両方を通じて柔軟なトポロジ設定を提供しながら、既存の HyperPod ワークフローと統合されます。HyperPod タスクガバナンスは、トポロジラベルを使用してクラスターノードを自動的に設定し、HyperPod タスクガバナンスポリシーとリソース借用メカニズムと連携して、トポロジ対応スケジューリングが現在の運用プロセスを中断しないようにします。優先トポロジ仕様と必須トポロジ仕様の両方の組み込みサポートにより、トポロジの制約が満たされない場合に標準スケジューリングにフォールバックする柔軟性を維持しながら、特定のパフォーマンス要件に合わせてワークロード配置を微調整できます。
HyperPod でトポロジ対応のラベルを活用することで、物理ネットワークインフラストラクチャを考慮したインテリジェントなポッド配置を通じて、機械学習ワークロードを強化できます。HyperPod タスクガバナンスは、階層型データセンタートポロジに基づいてポッドスケジューリングを自動的に最適化します。これにより、ネットワークレイテンシーが短縮され、分散 ML タスクのトレーニングパフォーマンスが向上します。このトポロジ意識は、関連するポッドをネットワーク階層に戦略的に近づけることで通信オーバーヘッドを最小限に抑えるため、大規模な機械学習ワークロードにとって特に重要です。その結果、ポッド間の通信ネットワークのレイテンシーが最適化され、リソース使用率が効率化され、コンピューティング集約型の AI/ML アプリケーションの全体的なパフォーマンスが向上します。これらはすべて、複雑なネットワークトポロジー設定を手動で管理することなく実現されます。
以下は、HyperPod タスクガバナンスがポッドをスケジュールできる利用可能なトポロジネットワークレイヤーのラベルです。
-
topology.k8s.aws/network-node-layer-1
-
topology.k8s.aws/network-node-layer-2
-
topology.k8s.aws/network-node-layer-3
トポロジ対応スケジューリングを使用するには、YAML ファイルに次のラベルを含めます。
-
kueue.x-k8s.io/podset-required-topology - このジョブに必要なポッドが必要であり、ノード内のすべてのポッドを同じトポロジレイヤー内でスケジュールする必要があることを示します。
-
kueue.x-k8s.io/podset-preferred-topology - このジョブにはポッドが必要ですが、同じトポロジレイヤー内でポッドをスケジュールすることが推奨されますが、必須ではありません。HyperPod タスクガバナンスは、次のトポロジレイヤーを試す前に、1 つのレイヤー内でポッドをスケジュールしようとします。
リソースが同じトポロジラベルを共有しない場合、ジョブは中断されます。ジョブは待機リストに含まれます。Kueue が十分なリソースがあることを認識すると、ジョブを承認して実行します。
次の例は、YAML ファイルでラベルを使用する方法を示しています。
apiVersion: batch/v1 kind: Job metadata: name: test-tas-job namespace: hyperpod-ns-
team-name
labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name
-localqueue kueue.x-k8s.io/priority-class:PRIORITY_CLASS
-priority spec: parallelism: 10 completions: 10 suspend: true template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name
-localqueue annotations: kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" or kueue.x-k8s.io/podset-preferred-topology: "topology.k8s.aws/network-node-layer-3" spec: nodeSelector: topology.k8s.aws/network-node-layer-3:TOPOLOGY_LABEL_VALUE
containers: - name: dummy-job image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0 args: ["3600s"] resources: requests: cpu: "100" restartPolicy: Never
次の表に、kubectl YAML ファイルで使用できる新しいパラメータを示します。
パラメータ | 説明 |
---|---|
kueue.x-k8s.io/queue-name | ジョブの実行に使用するキューの名前。この queue-name の形式は である必要がありますhyperpod-ns- 。 |
kueue.x-k8s.io/priority-class | ポッドスケジューリングの優先度を指定できます。この仕様はオプションです。 |
annotations | ジョブにアタッチするトポロジアノテーションが含まれます。使用可能なトポロジは kueue.x-k8s.io/podset-required-topology と kueue.x-k8s.io/podset-preferred-topology です。注釈または nodeSelector のいずれかを使用できますが、両方を同時に使用することはできません。 |
nodeSelector | Amazon EC2 インスタンス配置のレイヤーを表すネットワークレイヤーを指定します。このフィールドまたは注釈のいずれかを使用しますが、両方を同時に使用することはできません。YAML ファイルでは、nodeSelector パラメータを使用してポッドの正確なレイヤーを選択することもできます。ラベルの値を取得するには、DescribeInstanceTopology API オペレーションを使用します。 |
HyperPod CLI を使用してジョブを実行し、トポロジ対応スケジューリングを使用することもできます。HyperPod CLI の詳細については、「」を参照してくださいSageMaker HyperPod CLI コマンド。
hyp create hyp-pytorch-job \ --version 1.1 \ --job-name sample-pytorch-job \ --image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \ --pull-policy "Always" \ --tasks-per-node 1 \ --max-retry 1 \ --priority high-priority \ --namespace hyperpod-ns-
team-name
\ --queue-name hyperpod-ns-team-name
-localqueue \ --preferred-topology-label topology.k8s.aws/network-node-layer-1
トポロジラベルを使用して PytorchJob を実行するために使用できる設定ファイルの例を次に示します。MPI ジョブと Tensorflow ジョブを実行する場合、ファイルはほぼ同様です。代わりにこれらのジョブを実行する場合は、PyTorchJob の代わりに正しいイメージを使用するなど、設定ファイルを変更してください。PyTorchJob を実行している場合は、マスターノードとワーカーノードに異なるトポロジを割り当てることができます。PyTorchJob には常に 1 つのマスターノードがあるため、代わりにトポロジを使用してワーカーポッドをサポートすることをお勧めします。
apiVersion: kubeflow.org/v1 kind: PyTorchJob metadata: annotations: {} labels: kueue.x-k8s.io/queue-name: hyperpod-ns-
team-name
-localqueue name: tas-test-pytorch-job namespace: hyperpod-ns-team-name spec: pytorchReplicaSpecs: Master: replicas: 1 restartPolicy: OnFailure template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name
-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch Worker: replicas: 10 restartPolicy: OnFailure template: metadata: # annotations: # kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name
-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch resources: limits: cpu: 1 requests: memory: 200Mi cpu: 1 #nodeSelector: # topology.k8s.aws/network-node-layer-3: xxxxxxxxxxx
クラスターのトポロジを表示するには、DescribeInstanceTopology API オペレーションを使用します。デフォルトでは、トポロジは AWS Management Console および Amazon SageMaker Studio では非表示になっています。以下の手順に従って、使用しているインターフェイスでそれらを確認します。
SageMaker Studio
-
SageMaker Studio で、クラスターに移動します。
-
タスクビューで、名前列のオプションメニューを選択し、列の管理を選択します。
-
リクエストされたトポロジとトポロジの制約を選択して列を追加し、Kubernetes ポッドのリストにトポロジ情報を表示します。
AWS Management Console
-
https://console.aws.amazon.com/sagemaker/
で Amazon SageMaker AI コンソールを開きます。 -
HyperPod クラスターで、クラスター管理を選択します。
-
タスクタブを選択し、歯車アイコンを選択します。
-
インスタンス属性で、リクエストされたトポロジとトポロジの制約を切り替えます。
-
確認 を選択して、 テーブルのトポロジ情報を表示します。