

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

# Amazon SageMaker HyperPod での GPU パーティションの設定 HyperPod
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup"></a>

**Topics**
+ [前提条件](#sagemaker-hyperpod-eks-gpu-partitioning-setup-prerequisites)
+ [MIG 設定を使用したクラスターの作成](#sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster)
+ [既存のクラスターへの GPU 演算子の追加](#sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator)
+ [MIG 設定の更新](#sagemaker-hyperpod-eks-gpu-partitioning-setup-update)
+ [MIG 設定の検証](#sagemaker-hyperpod-eks-gpu-partitioning-setup-verify)
+ [MIG 設定をデバッグするための一般的なコマンド](#sagemaker-hyperpod-eks-gpu-partitioning-setup-debug-commands)
+ [SageMaker AI コンソールの使用](#sagemaker-hyperpod-eks-gpu-partitioning-setup-console)

## 前提条件
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-prerequisites"></a>
+ サポートされている GPU インスタンスを持つ HyperPod Amazon EKS クラスター
+ NVIDIA GPU Operator がインストールされました
+ クラスター管理のための適切な IAM アクセス許可

## MIG 設定を使用したクラスターの作成
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster"></a>

### の使用 AWS CLI
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster-cli"></a>

```
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
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster-cfn"></a>

```
{
  "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 演算子の追加
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator"></a>

### GPU Operator をインストールする
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-install"></a>

をクラスターリージョン (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 分待機)
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-verify"></a>

すべての 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)

### 古いデバイスプラグインを削除する
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-remove"></a>

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

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

### GPU リソースの検証
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-verify-gpu"></a>

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

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

## MIG 設定の更新
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update"></a>

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

### ステップ 1: インスタンスグループのノードを特定する
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-identify"></a>

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

```
# 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: 各ノードのコードとドレイン
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-drain"></a>

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

#### ノードをコーディングする
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-drain-cordon"></a>

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

```
# Cordon a single node
kubectl cordon {{NODE_NAME}}

# Example:
kubectl cordon hyperpod-i-014a41a7001adca60
```

#### ノードからワークロードポッドをドレインする
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-drain-evict"></a>

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

```
# 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-system`、`cert-manager`、、`kubeflow``hyperpod-inference-system`、、`kube-public`、`mpi-operator`、、、`gpu-operator``aws-hyperpod``jupyter-k8s-system``hyperpod-observability`、`kueue-system`、および `keda`
DaemonSet ポッドはノードに残ります (設計上無視されます)

### ステップ 3: ワークロードポッドが実行されていないことを確認する
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-verify"></a>

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

```
# 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: ノードの準備状況ステータスを確認する
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-readiness"></a>

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

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

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

### 既存のクラスターで MIG プロファイルを更新する
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-change"></a>

既存のクラスターで 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 設定の検証
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-verify"></a>

クラスターの作成または更新後、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 設定をデバッグするための一般的なコマンド
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-debug-commands"></a>

次のコマンドを使用して、クラスター内の 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 コンソールの使用
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-console"></a>

### MIG を使用した新しいクラスターの作成
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-console-create"></a>

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

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

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

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

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

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

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

### 既存のクラスターでの MIG 設定の更新
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-console-update"></a>

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

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

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

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