Amazon SageMaker HyperPod での GPU パーティションの設定 HyperPod - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SageMaker HyperPod での GPU パーティションの設定 HyperPod

前提条件

  • サポートされている GPU インスタンスを持つ HyperPod Amazon EKS クラスター

  • NVIDIA GPU Operator のインストール

  • クラスター管理のための適切な IAM アクセス許可

MIG 設定を使用したクラスターの作成

の使用AWS CLI

aws sagemaker create-cluster \ --cluster-name my-mig-cluster \ --orchestrator 'Eks={ClusterArn=arn:aws:eks:region:account:cluster/cluster-name}' \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket", "OnCreate": "on_create_script.sh" }, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-1g.5gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role", "ThreadsPerCore": 1 }' \ --vpc-config '{ "SecurityGroupIds": ["sg-12345"], "Subnets": ["subnet-12345"] }' \ --node-provisioning-mode Continuous

の使用CloudFormation

{ "ClusterName": "my-mig-cluster", "InstanceGroups": [ { "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-2g.10gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" } ], "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:region:account:cluster/cluster-name" } }, "NodeProvisioningMode": "Continuous" }

既存のクラスターへの GPU 演算子の追加

GPU Operator をインストールする

をクラスターリージョン (us-east-1、us-west-2 など) {$AWS_REGION}に置き換えます。

helm install gpuo helm_chart/HyperPodHelmChart/charts/gpu-operator \ -f helm_chart/HyperPodHelmChart/charts/gpu-operator/regional-values/values-{$AWS_REGION}.yaml \ -n kube-system

インストールの確認 (2~3 分待機)

すべての GPU オペレータポッドが実行されていることを確認します。

kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"

予想されるポッド:

  • gpu-operator-* - 1 インスタンス (クラスターコントローラー)

  • nvidia-device-plugin-daemonset-* - GPU ノードあたり 1 (すべての GPU インスタンス)

  • nvidia-mig-manager-* - MIG 対応ノードあたり 1 (A100/H100)

古いデバイスプラグインを削除する

既存の nvidia-device-plugin を無効にします。

helm upgrade dependencies helm_chart/HyperPodHelmChart \ --set nvidia-device-plugin.devicePlugin.enabled=false \ -n kube-system

GPU リソースの検証

ノードに GPU 容量が表示されていることを確認します。nvidia.com/gpu: 8 (または実際の GPU 数) が表示されます。

kubectl describe nodes | grep "nvidia.com/gpu"

MIG 設定の更新

MIG 更新前のノードの準備

インスタンスグループの MIG 設定を更新する前に、ワークロードの中断を防ぐためにノードを準備する必要があります。再設定するノードからワークロードを安全にドレインするには、次の手順に従います。

ステップ 1: インスタンスグループのノードを特定する

まず、更新するインスタンスグループに属するすべてのノードを特定します。

# List all nodes in the instance group kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME # Example: kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=p4d-group

このコマンドは、指定されたインスタンスグループ内のすべてのノードのリストを返します。次の手順では、各ノード名を書き留めます。

ステップ 2: 各ノードのコードとドレイン

ステップ 1 で識別されたノードごとに、次のアクションを実行します。

ノードをコーディングする

コーディングにより、ノードで新しいポッドをスケジュールできなくなります。

# Cordon a single node kubectl cordon NODE_NAME # Example: kubectl cordon hyperpod-i-014a41a7001adca60

ノードからワークロードポッドをドレインする

ノードをドレインして、システムポッドを保持しながらすべてのワークロードポッドを削除します。

# Drain the node (ignore DaemonSets and evict pods) kubectl drain NODE_NAME \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300 # Example: kubectl drain hyperpod-i-014a41a7001adca60 \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300

コマンドオプションの説明:

  • --ignore-daemonsets - DaemonSet ポッドが存在する場合でも、ドレインオペレーションを続行できます

  • --delete-emptydir-data - emptyDir ボリュームを使用してポッドを削除します (ドレインを成功させるために必要)

  • --force - コントローラーによって管理されていないポッドを強制的に削除します (注意して使用)

  • --grace-period=300 - ポッドが正常に終了するまで 5 分かかります

重要
  • ポッドの数とその終了猶予期間によっては、ドレインオペレーションに数分かかる場合があります。

  • 次の名前空間のシステムポッドは実行されたままになります: kube-systemcert-manager、、kubeflowhyperpod-inference-systemkube-public、、mpi-operator、、gpu-operatoraws-hyperpodjupyter-k8s-systemhyperpod-observability、、kueue-system、および keda

  • DaemonSet ポッドはノードに残ります (設計上無視されます)

ステップ 3: ワークロードポッドが実行されていないことを確認する

ドレイン後、ノードにワークロードポッドが残っていないことを確認します (システム名前空間を除く)。

# Check for any remaining pods outside system namespaces kubectl get pods --all-namespaces --field-selector spec.nodeName=NODE_NAME \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda" # Example: kubectl get pods --all-namespaces --field-selector spec.nodeName=hyperpod-i-014a41a7001adca60 \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda"

予想される出力: ノードが適切にドレインされている場合、このコマンドは結果を返さない (またはヘッダー行のみを表示する) 必要があります。まだ実行中のポッドがある場合は、削除されなかった理由を調査し、必要に応じて手動で削除します。

ステップ 4: ノードの準備状況ステータスを確認する

MIG 更新に進む前に、すべてのノードが接続されていることを確認します。

# Check node status - should show "SchedulingDisabled" kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME

ノードは STATUS 列SchedulingDisabledに表示され、接続され、MIG 更新の準備ができていることを示します。

既存のクラスターで MIG プロファイルを更新する

既存のクラスターで MIG プロファイルを変更できます。

aws sagemaker update-cluster \ --cluster-name my-mig-cluster \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-3g.20gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" }'
注記

ジョブがノードで既に実行されている場合、MIG パーティショニングは失敗します。ユーザーは、MIG パーティショニングを再度試行する前に、ノードをドレインするためのエラーメッセージを受け取ります。

MIG 設定の検証

クラスターの作成または更新後、MIG 設定を確認します。

# Update kubeconfig aws eks update-kubeconfig --name your-eks-cluster --region us-east-2 # Check MIG labels kubectl get node NODE_NAME -o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe node NODE_NAME | grep -A 10 "Allocatable:"

MIG 設定をデバッグするための一般的なコマンド

次のコマンドを使用して、クラスター内の MIG 設定のトラブルシューティングと検証を行います。

# Check GPU Operator status kubectl get pods -n gpu-operator-resources # View MIG configuration kubectl exec -n gpu-operator-resources nvidia-driver-XXXXX -- nvidia-smi mig -lgi # Check device plugin configuration kubectl logs -n gpu-operator-resources nvidia-device-plugin-XXXXX # Monitor node events kubectl get events --field-selector involvedObject.name=NODE_NAME
注記

nvidia-driver-XXXXX と をクラスターの実際のポッド名nvidia-device-plugin-XXXXXに置き換え、 をノードの名前NODE_NAMEに置き換えます。

SageMaker AI コンソールの使用

MIG を使用した新しいクラスターの作成

  1. Amazon SageMaker AI > HyperPod クラスター > クラスター管理 > HyperPod クラスターの作成に移動する

  2. EKS でオーケストレーションされた を選択する

  3. カスタムセットアップを選択し、GPU Operator がデフォルトで有効になっていることを確認する

  4. 「インスタンスグループ」セクションで「グループの追加」をクリックします。

  5. インスタンスグループを設定し、詳細設定に移動して GPU パーティショントグルの使用を有効にし、ドロップダウンから目的の MIG 設定を選択します。

  6. インスタンスグループを追加をクリックし、残りのクラスター設定を完了します。

  7. 送信をクリックしてクラスターを作成します

既存のクラスターでの MIG 設定の更新

  1. Amazon SageMaker AI > HyperPod クラスター > クラスター管理に移動する

  2. 既存のクラスターを選択し、変更するインスタンスグループの編集をクリックします。

  3. 詳細設定で、まだ有効になっていない場合は GPU パーティションを使用し、ドロップダウンから別の MIG 設定を選択する

  4. 変更の保存 をクリックします。