

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

# SageMaker HyperPod クラスターで AMI バージョンを更新する
<a name="sagemaker-hyperpod-release-ami-update"></a>

Amazon SageMaker HyperPod Amazon マシンイメージ (AMI) は、分散機械学習ワークロードと高パフォーマンスコンピューティング専用のマシンイメージです。各 AMI には、ドライバー、機械学習フレームワーク、トレーニングライブラリ、パフォーマンスモニタリングツールがプリロードされています。クラスター内の AMI バージョンを更新することで、トレーニングジョブやワークフローでこれらのコンポーネントとパッケージの最新バージョンを使用できます。

 クラスター内の AMI バージョンを更新する場合、更新をすぐに処理するか、1 回限りの更新をスケジュールするか、cron 式を使用して定期的なスケジュールを作成するかを選択できます。インスタンスグループ内のすべてのインスタンスを更新するか、インスタンスのバッチのみを更新するかを選択することもできます。バッチ更新を選択した場合は、SageMaker AI が一度にアップグレードするインスタンスの割合または量を設定します。この更新方法を使用する場合は、SageMaker AI がバッチ間で待機する間隔を設定します。

バッチで更新することを選択した場合は、アラームとメトリクスのリストを含めることもできます。待機間隔中、SageMaker AI はこれらのメトリクスを監視し、しきい値を超えた場合、対応するアラームは ALARM 状態になり、SageMaker AI は AMI の更新をロールバックします。自動ロールバックを使用するには、IAM 実行ロールに `cloudwatch:DescribeAlarms` アクセス許可が必要です。

**注記**  
クラスターをバッチで更新できるのは、Amazon EKS と統合された HyperPod クラスターのみです。複数のスケジュールを作成する場合は、スケジュール間にバッファ期間を設定することをお勧めします。スケジュールが重複すると、更新が失敗する可能性があります。

HyperPod クラスターの各 AMI リリースの詳細については、「[Amazon SageMaker HyperPod AMI](sagemaker-hyperpod-release-ami.md)」を参照してください。HyperPod リリースの全般的な詳細については、「[Amazon SageMaker HyperPod リリースノート](sagemaker-hyperpod-release-notes.md)」を参照してください。

SageMaker AI API または CLI オペレーションを使用して、クラスターを更新したり、特定のクラスターのスケジュールされた更新を確認したりできます。 AWS コンソールを使用している場合は、次の手順に従います。

**注記**  
 AWS コンソールを使用した AMI の更新は、Amazon EKS と統合されたクラスターでのみ使用できます。Slurm クラスターの場合は、SageMaker AI API または CLI オペレーションを使用する必要があります。

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. 左側の **[HyperPod クラスター]** を展開し、**[クラスターの管理]** を選択します。

1. 更新するクラスターを選択し、**[詳細]**、**[AMI をアップデート]** をクリックします。



更新スケジュールをプログラムで作成および管理するには、次の API オペレーションを使用します。
+ [CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html) – 更新スケジュールを指定しながらクラスターを作成する
+ [UpdateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html) – 更新スケジュールを追加しながらクラスターを更新する
+ [UpdateClusterSoftware](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateClusterSoftware.html) – クラスターのプラットフォームソフトウェアを更新する
+ [DescribeCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCluster.html) – クラスター用に作成した更新スケジュールを表示する
+ [DescribeClusterNode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeClusterNode.html) と [ListClusterNodes](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListClusterNodes.html) – クラスターが最後に更新された日時を表示する

## 必要なアクセス許可
<a name="sagemaker-hyperpod-release-ami-update-permissions"></a>

Amazon EKS クラスターで [Pod Disruption Budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) をどのように設定したかに応じて、HyperPod はポッドをエビクションし、ノードをリリースして、AMI 更新プロセス中の更新スケジューリングをブロックします。中断量の制約に違反した場合、HyperPod は AMI 更新中にそのノードをスキップします。SageMaker HyperPod がポッドを適切にエビクションするには、HyperPod サービスにリンクされたロールに必要なアクセス許可を追加する必要があります。次の yaml ファイルには、必要なアクセス許可があります。

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: hyperpod-patching
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list"]
- apiGroups: [""]
  resources: ["pods/eviction"]
  verbs: ["create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: hyperpod-patching
subjects:
- kind: User
  name: hyperpod-service-linked-role
roleRef:
  kind: ClusterRole
  name: hyperpod-patching
  apiGroup: rbac.authorization.k8s.io
```

アクセス許可を適用するには、以下のコマンドを使用します。

```
git clone https://github.com/aws/sagemaker-hyperpod-cli.git 

cd sagemaker-hyperpod-cli/helm_chart

helm upgrade hyperpod-dependencies HyperPodHelmChart --namespace kube-system --install
```

## cron 式
<a name="sagemaker-hyperpod-release-ami-update-cron"></a>

1 回限りの更新や、特定の時刻または定期的なスケジュールで更新を設定するには、cron 式を使用します。Cron 式では、空白文字区切りの 6 つのフィールドをサポートします。6 つすべてのフィールドは必須項目です。

```
cron({{Minutes}} {{Hours}} {{Day-of-month}} {{Month}} {{Day-of-week}} {{Year}})
```


| **フィールド** | **値** | **ワイルドカード** | 
| --- | --- | --- | 
| 分 | 00～59 | 該当なし | 
| 時間 | 00～23 | 該当なし | 
| 日 | 01～31 | ? | 
| 月 | 01～12 | \* / | 
| 曜日 | 1～7 または MON～SUN | ? \# L | 
| 年 | 今年～2099 | \* | 

**ワイルドカード**
+ **[\*]** (アスタリスク) のワイルドカードには、フィールドのすべての値が含まれます。`Hours` フィールドの、**\*** にはすべての時間が含まれています。
+ **/** (スラッシュ) のワイルドカードは、増分を指定します。`Months` フィールドで、**\*/3** と入力すると、3 か月ごとと指定できます。
+ **[?]** (疑問符) のワイルドカードは、任意を意味します。`Day-of-month` フィールドで **7** と入力し、7 日が何曜日であってもかまわない場合、Day-of-week フィールドに **?** を入力できます。
+ `day-of-week` フィールドなどで **L** のワイルドカードを使用すると、月または週の最終日を指定できます。例えば、`5L` は、該当月の最終金曜日を意味します。
+ 曜日フィールドの **\#** ワイルドカードを使用すると、月内の指定された曜日の特定のインスタンスを指定できます。例えば、3\#2 は、月の第 2 火曜日を示します。3 は週の 3 番目の日 (火曜日) を示し、2 は月のそのタイプの 2 番目の日を示します。

以下のシナリオで cron 式を使用できます。
+ 特定の日時に実行される 1 回限りのスケジュール。`?` ワイルドカードを使用して、日付や曜日を問わないことを示すことができます。

  ```
  cron(30 14 ? 12 MON 2024)
  ```

  ```
  cron(30 14 15 12 ? 2024)
  ```
+ 特定の日時に実行される週次スケジュール。次の例では、日付に関係なく毎週月曜日の午後 12 時に実行されるスケジュールを作成します。

  ```
  cron(00 12 ? * 1 *)
  ```
+ 曜日に関係なく毎月実行される月次スケジュール。次のスケジュールは、毎月 15 日の午後 12 時 30 分に実行されます。

  ```
  cron(30 12 15 * ? *)
  ```
+ 曜日を使用する月次スケジュール。

  ```
  cron(30 12 ? * MON *)
  ```
+ N か月ごとに実行されるスケジュールを作成するには、`/` ワイルドカードを使用します。次の例では、3 か月ごとに実行される月次スケジュールを作成します。次の 2 つの例は、曜日と日付の仕組みを説明しています。

  ```
  cron(30 12 15 */3 ? *)
  ```

  ```
  cron(30 12 ? */3 MON *)
  ```
+ 指定した曜日の特定のインスタンスで実行されるスケジュール。次の例では、毎月第 2 月曜日の午後 12:30 に実行されるスケジュールを作成します。

  ```
  cron(30 12 ? * 1#2 *)
  ```
+ 指定された曜日の最終インスタンスに実行されるスケジュールです。次のスケジュールは、毎月最終月曜日の午後 12:30 に実行されます。

  ```
  cron(30 12 ? * 1L *)
  ```