

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

# SageMaker HyperPod での Slurm クラスターでのユーザーの作成
<a name="sagemaker-hyperpod-slurm-user-management-create-users"></a>

SageMaker HyperPod 上の Slurm クラスターのノード間で POSIX ユーザーを作成する方法は 3 つあります。これらは、ユーザーが作成される*タイミング*と、管理する必要があるライフサイクル設定*の量*によって異なります。最も簡単なものから高度なものまで、クラスターとワークフローに一致するオプションを選択します。


| オプション | 次の用途に適しています | ライフサイクル設定が必要 | ユーザーの作成時 | スケールアップまたはノード交換の動作 | 
| --- | --- | --- | --- | --- | 
| [オプション A: ユーザー作成ユーティリティスクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-1-create-users) | ライフサイクル設定に影響を与えずに、既に InService であるクラスターにユーザーを追加する | なし | スクリプトを実行するたびにオンデマンドで | 手動。ユーザーは自動的に適用されません。ノードが追加または置き換えられるたびに (自動または手動で) スクリプトを再実行します。 | 
| [オプション B: `add-users`拡張機能スクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-2-add-users-extension) | ユーザーを自動的にプロビジョニングする AMI ベースのライフサイクル設定済みクラスター | ユーザー拡張スクリプトを追加する | ノードのプロビジョニング中自動的に - クラスターの作成時、ノードの追加 (スケールアップ）、AMI の更新、ノードの交換時。 | 自動。拡張機能は、ライフサイクルスクリプト Amazon S3 バケットのユーザーファイルを使用して、プロビジョニング中に新しいノードごとに実行されます。 | 
| [オプション C: 基本ライフサイクルスクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-3-base-lcs) | 既に完全なカスタムベースライフサイクルスクリプトセットを使用しているクラスター | フルカスタムライフサイクルスクリプトセット | ノードのプロビジョニング中自動的に - クラスターの作成時、ノードの追加 (スケールアップ）、AMI の更新、ノードの交換時。 | 自動。基本ライフサイクルスクリプトは、ライフサイクルスクリプト Amazon S3 バケットのユーザーファイルを使用して、プロビジョニング中に新しい各ノードで実行されます。 | 

3 つのオプションはすべて、SageMaker HyperPod サービスチームが GitHub ウェブサイトの [Awsome Distributed Training](https://github.com/awslabs/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod) リポジトリで提供するスクリプトを使用します。

**Topics**
+ [オプション A: ユーザー作成ユーティリティスクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-1-create-users)
+ [オプション B: `add-users`拡張機能スクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-2-add-users-extension)
+ [オプション C: 基本ライフサイクルスクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-3-base-lcs)

## オプション A: ユーザー作成ユーティリティスクリプトを使用してユーザーを追加する
<a name="sagemaker-hyperpod-multi-user-method-1-create-users"></a>

これは最も簡単なオプションであり、ライフサイクル設定は必要ありません。クラスターが既に **InService** であり、今すぐユーザーを追加する場合に使用します。コントローラーノードの GitHub ウェブサイトで [create\_users.sh](https://github.com/awslabs/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils/create_users.sh) ユーティリティスクリプトを実行して、1 回の実行ですべてのノードにユーザーを作成します。このスクリプトは、クラスター設定ファイルから他のノードを自動検出し、SSH 経由でユーザーを作成し、大規模なクラスターにスケールするようにコンピューティングノードを並行して設定します。このスクリプトは、次の優先順位で、渡す引数と現在のディレクトリに存在するファイルによって選択されたユーザーを指定するための 3 つのモードをサポートしています。
+ **コマンドラインモード** — ユーザー名を引数として渡し、スクリプトによって UIDs が自動的に割り当てられます。これは、ユーザーを追加する最も簡単な方法です。
+ **ファイルモード** — スクリプトは、現在のディレクトリの `shared_users.txt` (CSV) ファイルまたは `shared_users.yaml` (YAML) ファイルからユーザー定義を読み取ります。
+ **インタラクティブモード** — スクリプトはユーザー名と、オプションで UIDs。

**重要**  
すべてのモードでは、 は実行時に存在するノードにのみユーザー`create_users.sh`を作成します。これには、ローカル `shared_users.txt`または を使用するファイルモードが含まれます`shared_users.yaml`。後でスケールアップまたはノード置換によって追加されたノードでは、ユーザーは自動的に再作成**されません**。これらは、POSIX アカウントを持たない新しいルートボリュームで新しいノードが起動するプロビジョニングイベントです。(共有ファイルシステムのホームディレクトリと SSH キーは存続しますが、ユーザーアカウント自体は存続しません）。新しいノードを追加`create_users.sh`した後に再実行して、ノードをインラインにします。  
スクリプトの再実行は安全です。コントローラーノードで実行します。他のクラスターノードを検出し、1 回の実行でクラスター全体にユーザーを適用します。これはノードごとにべき等です。欠落している場合にのみユーザーを作成し、既にユーザーを変更していないノードを残します。したがって、ノードを追加した後の再実行は新しいノードにのみ影響します。  
新しいノードにユーザーを自動的に受信させるには、ユーザーファイルをクラスターのライフサイクル設定の一部にして、プロビジョニング中に実行する必要があります。ライフサイクルスクリプトの Amazon S3 バケットに `shared_users.txt`または `shared_users.yaml` ファイルを保存し、 [オプション B: `add-users`拡張機能スクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-2-add-users-extension)または で使用します[オプション C: 基本ライフサイクルスクリプトを使用してユーザーを追加する](#sagemaker-hyperpod-multi-user-method-3-base-lcs)。 `create_users.sh` は、作成したすべてのユーザーを追加して Amazon S3 にアップロードする`shared_users.txt`のに役立ちますが、それ自体はどのモードでも、プロビジョニングイベント全体でユーザーを永続化しません。

ユーザーごとに、スクリプトは次のとおりです。
+ すべてのノードで一貫した UID を持つ POSIX ユーザーを作成します。
+ 共有ファイルシステムにホームディレクトリを作成します ( の OpenZFS `/home`または の Amazon FSx for Lustre を自動検出)`/fsx`。
+ パスワードレスノード間 SSH 用の SSH キーペアを共有ファイルシステムに生成します。
+ ユーザーを`docker`グループに追加します (オプションで sudo アクセスを付与します）。
+ ユーザーがジョブを送信できるように、コントローラーで Slurm アカウンティングにユーザーを登録します。
+ 新しいユーザーを`shared_users.txt`ファイルに追加し、オプションで Amazon S3 にアップロードして、他のオプションで再利用できるようにします。

**前提条件**  
開始する前に、次の要件が満たされていることを確認してください。
+ クラスターは **InService** であり、コントローラーノードに接続できます。「[SageMaker HyperPod クラスターノードへのアクセス](sagemaker-hyperpod-run-jobs-slurm-access-nodes.md)」を参照してください。
+ `jq` はコントローラーノードにインストールされます。
+ SSH アクセスは、コントローラーノードから他のすべてのノードに利用できます (HyperPod はこれをデフォルトユーザーに設定します）。

**`create_users.sh` ユーティリティスクリプトを使用してユーザーを追加するには**  
以下の手順を実行します。

1. コントローラーノードに接続し、スクリプトをダウンロードします。sudo アクセス許可で実行してください。

   ```
   $ curl -O https://raw.githubusercontent.com/awslabs/awsome-distributed-training/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils/create_users.sh
   chmod +x create_users.sh
   ```

1. 3 つのモードのいずれかを使用してスクリプトを実行します。このモードは、渡した引数と現在のディレクトリ内のファイルから優先度で選択します。最初にコマンドライン引数、次にユーザーファイル、次にインタラクティブプロンプトです。すべてのモードが同じシーケンスを実行します。現在のノードでユーザーを作成し、共有ファイルシステムで SSH キーペアを設定し、残りのすべてのノード (コンピューティングノードと並列) でユーザーを作成し、コントローラーで Slurm アカウンティングに登録して、 に追加し`shared_users.txt`、そのファイルを Amazon S3 にアップロードすることを に提案します。

   次の例では、3 つのモードについて説明し、それぞれに 2 人のユーザー (`user1` と ) を追加します`user2`。

**コマンドラインモード**  
ユーザー名を引数として渡します。スクリプトは UIDsし、新しいユーザーを sudoers にするかどうかをプロンプトします。これは、ユーザーを追加する最も簡単な方法です。

   ```
   $ sudo ./create_users.sh user1 user2
   ```

   スクリプトはユーザー名を検証し、sudoer アクセスを求めます。

   ```
   ========================================
    Step 1: User Configuration
   ========================================
     Users from CLI args: user1 user2
       ✓ user1 — will be created (auto-assign UID)
       ✓ user2 — will be created (auto-assign UID)
     Make these user(s) sudoer(s)? (y/N): n
   ```

   次に、現在のノードにユーザーを作成し、SSH キーペアを設定し、コンピューティングノードに作成し、コントローラーの Slurm アカウンティングに登録して、 を書き込み`shared_users.txt`、最後にそのファイルを Amazon S3 にアップロードするよう促します。

**ファイルモード**  
スクリプトと同じディレクトリにユーザーファイルを作成し、引数なしでスクリプトを実行します。このスクリプトは、ユーザー定義を読み取り、検証し (存在しないユーザーのみを作成し、UID 競合をスキップする）、すべてのノードにユーザーを作成します。スクリプトは 2 つのファイル形式を受け入れます。

   の場合`shared_users.txt`、CSV ファイルを 形式で 1 行に 1 人のユーザーで使用します`username,uid,home_directory`。

   ```
   user1,2001,/fsx/user1
   user2,2002,/fsx/user2
   ```

   または、 の場合は`shared_users.yaml`、ユーザーまたはグループに分類されたユーザーの簡単なリストを含む YAML ファイルを使用します。この形式を解析するには、ノードで PyYAML が必要です。以下はシンプルなリスト形式です。

   ```
   users:
     - username: user1
       uid: 2001
     - username: user2
       uid: 2002
   ```

   両方のファイルが存在する場合、 `shared_users.txt`が優先されます。引数なしでスクリプトを実行します。

   ```
   $ sudo ./create_users.sh
   ```

   このスクリプトは、ファイルエントリを検証し、作成を確認し、sudoer アクセスのプロンプトを表示し、ファイルにないユーザーを追加することを に提案します。次に、 ファイル (2001 および 2002) から UIDs を持つすべてのノード`user1``user2`で と を作成し、SSH キーペアを設定し、Slurm アカウンティングに登録して、 を更新します`shared_users.txt`。

**インタラクティブ動画**  
引数やユーザーファイルなしでスクリプトを実行します。このスクリプトでは、ユーザー名と、オプションで割り当てる UIDsの入力を求められます。

   ```
   $ sudo ./create_users.sh
   ```

   ```
   ========================================
    Step 1: User Configuration
   ========================================
     No shared_users.txt or shared_users.yaml found.
     Entering interactive mode...
   
     Enter username(s), comma-separated (e.g. 'sean' or 'sean,alice,bob'): user1,user2
     Specify UIDs? (Enter for auto-assign, or comma-separated UIDs): 2001,2002
     Make these user(s) sudoer(s)? (y/N): n
   ```

   プロンプトに応答すると、スクリプトは入力した UIDs を持つすべてのノード`user2`で `user1`と を作成し、SSH キーペアを設定し、Slurm アカウンティングに登録して、 を更新します`shared_users.txt`。

1. ユーザーに切り替えてクラスター全体でコマンドを実行して、ユーザーをテストします。

   ```
   $ sudo su - user1 && ssh $(srun hostname)
   ```

**注記**  
スクリプトはべき等です。既存のユーザーはスキップされ、既存の SSH キーと Slurm アカウンティングの関連付けはそのままになるため、再実行しても安全です。

## オプション B: `add-users`拡張機能スクリプトを使用してユーザーを追加する
<a name="sagemaker-hyperpod-multi-user-method-2-add-users-extension"></a>

このオプションは、クラスターが **AMI ベースの設定**を使用していて、ユーザーを自動的にプロビジョニングする場合に使用します。拡張機能ライフサイクルオプションを使用すると、SageMaker HyperPod はまず完全な AMI ベースの設定を実行し、次に拡張機能スクリプトを実行します。サービスチームは、GitHub ウェブサイトの Awsome Distributed Training リポジトリの Extensions フォルダにready-to-use [add-users](https://github.com/awslabs/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/Extensions/add-users) 拡張機能を提供します。拡張機能はノードのプロビジョニング中に実行されるため、クラスターの作成時にユーザーが自動的に作成され、スケールアウト中に追加された新しいノードにも再度作成されます。

拡張機能の設定の詳細については、以下を参照してください。
+  AWS コンソールを使用して拡張機能を設定するには、[「カスタムセットアップ](https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-console.html#smcluster-getting-started-slurm-console-create-cluster-custom)」の**「ライフサイクル設定 - オプション**」を参照してください。
+ API を使用して拡張機能を設定するには、「クラスターの作成」の**「オプション B: OnInitComplete を使用して AMI ベースの設定を拡張**する」を参照してください。 [https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html#smcluster-getting-started-slurm-cli-create-cluster](https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html#smcluster-getting-started-slurm-cli-create-cluster)

`add-users` 拡張機能は、一貫した UIDs を持つ POSIX ユーザーを作成し、共有ファイルシステムにホームディレクトリを設定し、パスワードレスノード間 SSH の SSH キーペアを生成し、コントローラーで Slurm アカウンティングにユーザーを登録します。次の 2 つの入力形式を使用できます。
+ `shared_users.txt` — 基本ライフサイクルスクリプトで使用されるのと同じ CSV 形式 (`username,uid,/fsx/username`)。すべてのユーザーが Slurm `root` アカウントに追加されます。
+ `shared_users.yaml` — グループごとの Slurm アカウントとファイルシステムマウントを使用してユーザーをグループに整理することをサポートする YAML 形式。グループは組織のみであり、Linux グループは作成されません。

グループ形式`shared_users.yaml`を使用する例を次に示します。

```
groups:
  - name: research
    slurm_account: research
    users:
      - username: user1
        uid: 2001
      - username: user2
        uid: 2002
  - name: platform
    slurm_account: platform
    users:
      - username: user3
        uid: 3001
```

**クラスターの作成時に `add-users`拡張機能を持つユーザーを追加するには**  
以下の手順を実行します。

1. `add-users` ディレクトリの適切なサンプルファイルをコピーし、ユーザーで編集します。

   ```
   $ cp shared_users_sample.yaml shared_users.yaml
   ```

1. `add-users` ディレクトリをライフサイクルスクリプト Amazon S3 バケットにアップロードします (バケットパスは で始まる必要があります`s3://sagemaker-`)。

   ```
   $ aws s3 cp add-users/ s3://DOC-EXAMPLE-BUCKET/add-users/ --recursive
   ```

1. `OnInitComplete` スクリプト`add_users.sh`として を使用して、`CreateCluster`リクエストの `LifeCycleConfig`ブロックで拡張機能を指定します。

   ```
   "LifeCycleConfig": {
       "OnInitComplete": "add_users.sh",
       "SourceS3Uri": "s3://DOC-EXAMPLE-BUCKET/add-users/"
   }
   ```

**ヒント**  
ユーザー作成 (オブザーバビリティなど) に加えてクラスターに複数の機能が必要な場合は、拡張機能フォルダ全体をアップロードし、`run_extensions.sh`オーケストレーターを拡張機能スクリプトとして使用します。各機能を有効にする `ENABLE_ADD_USERS="true"` などのシンプルなブールトグルを提供します。詳細については、「[を使用した SageMaker HyperPod の開始方法 AWS CLI](smcluster-getting-started-slurm-cli.md)」を参照してください。

**作成後に既存のクラスターにユーザーを追加するには**  
拡張機能はノードのプロビジョニング中にのみ実行されるため、すでに実行されているノードにユーザーを追加するには、拡張機能を手動で実行する必要があります。

1. ユーザーファイルを新しいユーザーで更新し (ファイル内の既存のユーザーを保持）、Amazon S3 にアップロードします。

   ```
   $ aws s3 cp add-users/shared_users.yaml s3://DOC-EXAMPLE-BUCKET/add-users/shared_users.yaml
   ```

1. コントローラーノードに接続し、スクリプトを共有ファイルシステムにプルします。

   ```
   $ sudo mkdir -p /fsx/cluster-scripts/add-users
   sudo aws s3 cp s3://DOC-EXAMPLE-BUCKET/add-users/ /fsx/cluster-scripts/add-users/ --recursive
   sudo chmod +x /fsx/cluster-scripts/add-users/*.sh
   ```

1. コントローラーで 拡張機能を実行します。

   ```
   $ sudo bash /fsx/cluster-scripts/add-users/add_users.sh
   ```

1. を使用してコンピューティングノードで 拡張機能を実行します`srun`。

   ```
   $ sudo srun --partition={{partition-name}} bash /fsx/cluster-scripts/add-users/add_users.sh
   ```

スクリプトは既存のユーザーをスキップし、新しいユーザーのみを作成します。これらはべき等です。

## オプション C: 基本ライフサイクルスクリプトを使用してユーザーを追加する
<a name="sagemaker-hyperpod-multi-user-method-3-base-lcs"></a>

このオプションは、クラスターがプロビジョニングシーケンス全体を所有する完全なカスタムベースライフサイクルスクリプトセットを既に使用している場合にのみ使用します。これは、単一の拡張機能ではなく完全なライフサイクルスクリプトセットを管理するため、最も高度なオプションです。サービスチームは、GitHub ウェブサイトの [add\_users.sh](https://github.com/awslabs/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh) スクリプトを、base-config ライフサイクルスクリプトセット内の 1 つのスクリプトとして提供します。クラスターの作成、クラスターの更新、またはクラスターソフトウェアの更新中、ライフサイクルスクリプトランナー (`lifecycle_script.py`) は を実行します。これにより`add_users.sh`、`shared_users.txt`ファイルが読み取られ、ユーザーとそのホームディレクトリが作成されます。

このオプションでは、 は POSIX ユーザーとホームディレクトリの作成のみ`add_users.sh`を処理します。パスワードレスノード間 SSH の SSH キーペア生成は、基本ライフサイクルスクリプトセット ( など`gen-keypair-ubuntu.sh`) の別のモジュールであり、ライフサイクルスクリプトランナーはフルセットの一部として呼び出します。ユーザーが共有ファイルシステムでキーペアを取得できるように、SSH キーモジュールがライフサイクルスクリプトセットに含まれていることを確認します。

完全なカスタムライフサイクルスクリプトセットの設定の詳細については、以下を参照してください。
+  AWS コンソールを使用してライフサイクルスクリプトを設定するには、[「カスタムセットアップ](https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-console.html#smcluster-getting-started-slurm-console-create-cluster-custom)」の**「ライフサイクル設定 - オプション**」を参照してください。
+ API を使用してライフサイクルスクリプトを設定するには、[「クラスターの作成](https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html#smcluster-getting-started-slurm-cli-create-cluster)」の**「オプション C: OnCreate による完全なカスタムコントロール**」を参照してください。

**Slurm クラスターの作成中にユーザーを作成するには**  
以下の手順を実行します。

1. GitHub ウェブサイトから [base-config](https://github.com/awslabs/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config) ライフサイクルスクリプトセットをダウンロードします。このオプションでは、 だけでなく、base-config フォルダ全体をライフサイクルスクリプトセットとしてアップロードします`add_users.sh`。

1. base-config フォルダで、次の形式で という名前`shared_users.txt`のテキストファイルを作成または編集します。最初の列はユーザー名、2 番目の列は一意のユーザー ID、3 番目の列は Amazon FSx 共有スペースのユーザーディレクトリです。

   ```
   username1,uid1,/fsx/username1
   username2,uid2,/fsx/username2
   ...
   ```

   `add_users.sh` は同じフォルダ`shared_users.txt`から読み取るため、ファイルはスクリプトとともに base-config 内にある必要があります。

1. ベース設定フォルダ全体を HyperPod ライフサイクルスクリプトの Amazon S3 バケットにアップロードします。クラスターの作成、クラスターの更新、またはクラスターソフトウェアの更新の進行中、ライフサイクルスクリプトランナーは を実行し`add_users.sh`、ユーザーとそのホームディレクトリを読み取り`shared_users.txt`、セットアップします。

**注記**  
`add_users.sh` は共有ファイルシステムを自動的に検出します。OpenZFS がマウントされている場合`/home`、そこにホームディレクトリが作成されます。それ以外の場合は、Amazon FSx for Lustre パスを使用します。