

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

# SageMaker HyperPod クラスターノードへのアクセス
<a name="sagemaker-hyperpod-run-jobs-slurm-access-nodes"></a>

( AWS Systems Manager SSM) を使用して **InService** クラスターにアクセスするには、SageMaker HyperPod クラスターのホスト名`aws ssm start-session`を 形式で指定して AWS CLI コマンドを実行します`sagemaker-cluster:[cluster-id]_[instance-group-name]-[instance-id]`。クラスター ID、インスタンス ID、インスタンスグループ名は、[SageMaker HyperPod コンソール](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-view-details-of-clusters)から、または `describe-cluster` と `list-cluster-nodes` を実行して [SageMaker HyperPod のAWS CLI コマンド](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-list-cluster-nodes)から取得できます。例えば、クラスター ID が `aa11bbbbb222`、クラスターノード名が `controller-group`、クラスターノード ID が `i-111222333444555aa` の場合、SSM `start-session` コマンドは次のようになります。

**注記**  
HyperPod クラスターノードへのアクセス権をユーザーに付与すると、ユーザーが管理するソフトウェアをノードにインストールして操作できます。ユーザーの最小権限のアクセス許可の原則を維持します。  
をセットアップしていない場合は AWS Systems Manager、「」に記載されている手順に従ってください[クラスターユーザーアクセスコントロールの設定 AWS Systems Manager と Run As](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-ssm)。

```
$ aws ssm start-session \
    --target sagemaker-cluster:{{aa11bbbbb222}}_{{controller-group}}-{{i-111222333444555aa}} \
    --region {{us-west-2}}
Starting session with SessionId: s0011223344aabbccdd
root@ip-111-22-333-444:/usr/bin#
```

これは、最初にユーザーをルートユーザーとして接続する点に注意してください。ジョブを実行する前に、次のコマンドを実行して `ubuntu` ユーザーに切り替えます。

```
root@ip-111-22-333-444:/usr/bin# sudo su - ubuntu
ubuntu@ip-111-22-333-444:/usr/bin#
```

HyperPod クラスターを実際に使用するための詳細設定については、以下のトピックを参照してください。

**Topics**
+ [SageMaker HyperPod クラスターノードにアクセスするためのその他のヒント](#sagemaker-hyperpod-run-jobs-slurm-access-nodes-tips)
+ [Amazon FSx 共有スペースを通じてマルチユーザー環境を設定する](#sagemaker-hyperpod-run-jobs-slurm-access-nodes-multi-user-with-fxs-shared-space)
+ [HyperPod クラスターを Active Directory と統合してマルチユーザー環境をセットアップする](#sagemaker-hyperpod-run-jobs-slurm-access-nodes-multi-user-with-active-directory)

## SageMaker HyperPod クラスターノードにアクセスするためのその他のヒント
<a name="sagemaker-hyperpod-run-jobs-slurm-access-nodes-tips"></a>

**HyperPod が提供する `easy-ssh.sh` スクリプトを使用して接続プロセスを簡素化する**

前のプロセスを 1 行のコマンドにするため、HyperPod チームは、クラスター情報を取得してそれを SSM コマンドに集約し、コンピューティングノードに接続する [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/easy-ssh.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/easy-ssh.sh) スクリプトを用意しています。このスクリプトは `describe-cluster` コマンドと `list-cluster-nodes` コマンドを実行し、SSM コマンドの完了に必要な情報を解析するため、必要な HyperPod クラスター情報を手動で探す必要はありません。次のコマンド例は、[https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/easy-ssh.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/easy-ssh.sh) スクリプトの実行方法を示しています。正常に実行された場合、ルートユーザーとしてクラスターに接続されます。さらに、SSM プロキシを介してリモートホストとして HyperPod クラスターを追加することにより、コードスニペットが出力されて SSH が設定されます。SSH を設定することで、Visual Studio Code などのローカル開発環境を HyperPod クラスターに接続できます。

```
$ chmod +x easy-ssh.sh
$ ./easy-ssh.sh -c {{<node-group> <cluster-name>}}
Cluster id: {{<cluster_id>}}
Instance id: {{<instance_id>}}
Node Group: {{<node-group>}}
Add the following to your ~/.ssh/config to easily connect:

$ cat <<EOF >> ~/.ssh/config
Host {{<cluster-name>}}
  User ubuntu
  ProxyCommand sh -c "aws ssm start-session  --target sagemaker-cluster:{{<cluster_id>}}_{{<node-group>}}-{{<instance_id>}} --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
EOF

Add your ssh keypair and then you can do:

$ ssh {{<cluster-name>}}

aws ssm start-session --target sagemaker-cluster:{{<cluster_id>}}_{{<node-group>}}-{{<instance_id>}}

Starting session with SessionId: s0011223344aabbccdd
root@ip-111-22-333-444:/usr/bin#
```

これは、最初にユーザーをルートユーザーとして接続する点に注意してください。ジョブを実行する前に、次のコマンドを実行して `ubuntu` ユーザーに切り替えます。

```
root@ip-111-22-333-444:/usr/bin# sudo su - ubuntu
ubuntu@ip-111-22-333-444:/usr/bin#
```

**HyperPod コンピューティングノードをリモートホストとして使用して SSH で簡単にアクセスできるように設定する**

ローカルマシンから SSH を使用してコンピューティングノードにアクセスする操作をさらに簡素化するため、`easy-ssh.sh` スクリプトは、前のセクションに示したように、HyperPod クラスターをリモートホストとして設定するコードスニペットを出力します。コードスニペットは、ローカルデバイス上の `~/.ssh/config` ファイルに直接追加できるよう自動生成されます。次の手順は、SSM プロキシ経由で SSH を使用して簡単にアクセスできるよう設定する方法を示しています。これにより、お客様またはクラスターユーザー直接 `ssh {{<cluster-name>}}` を実行してが HyperPod クラスターノードに接続可能になります。

1. ローカルデバイスで、リモートホストとしてユーザー名を使用する HyperPod コンピューティングノードを `~/.ssh/config` ファイルに追加します。次のコマンドは、`easy-ssh.sh` スクリプトから `~/.ssh/config` ファイルに自動生成されたコードスニペットを追加する方法を示しています。正しいクラスター情報を持つ `easy-ssh.sh` スクリプトの自動生成出力からコピーしてください。

   ```
   $ cat <<EOF >> ~/.ssh/config
   Host {{<cluster-name>}}
     User {{ubuntu}}
     ProxyCommand sh -c "aws ssm start-session  --target sagemaker-cluster:{{<cluster_id>}}_{{<node-group>}}-{{<instance_id>}} --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
   EOF
   ```

1. HyperPod クラスターノードで、ローカルデバイス上のパブリックキーを HyperPod クラスターノード上の `~/.ssh/authorized_keys` ファイルに追加します。

   1. ローカルマシンにパブリックキーファイルを出力します。

      ```
      $ cat ~/.ssh/id_rsa.pub
      ```

      これにより、キーが返されます。このコマンドの出力をコピーします。

      (オプション) パブリックキーがない場合、次のコマンドを実行して作成します。

      ```
      $ ssh-keygen -t rsa -q -f "$HOME/.ssh/id_rsa" -N ""
      ```

   1. クラスターノードに接続し、ユーザーに切り替えてキーを追加します。次のコマンドは、`ubuntu` ユーザーとしてアクセスする例です。`ubuntu` を、SSH で簡単アクセスを設定するユーザー名に置き換えます。

      ```
      $ ./easy-ssh.sh -c {{<node-group> <cluster-name>}}
      $ sudo su - {{ubuntu}}
      ubuntu@ip-111-22-333-444:/usr/bin#
      ```

   1. `~/.ssh/authorized_keys` ファイルを開き、ファイルの最後にパブリックキーを追加します。

      ```
      ubuntu@ip-111-22-333-444:/usr/bin# vim ~/.ssh/authorized_keys
      ```

設定が完了したら、次のように簡略化された SSH コマンドを実行することにより、ユーザーとして HyperPod クラスターノードに接続できます。

```
$ ssh {{<cluster-name>}}
ubuntu@ip-111-22-333-444:/usr/bin#
```

さらに、[Visual Studio Code Remote - SSH](https://code.visualstudio.com/docs/remote/ssh) など、ローカルデバイス上の IDE からリモート開発にホストを使用することもできます。

## Amazon FSx 共有スペースを通じてマルチユーザー環境を設定する
<a name="sagemaker-hyperpod-run-jobs-slurm-access-nodes-multi-user-with-fxs-shared-space"></a>

Amazon FSx 共有スペースを使用して、SageMaker HyperPod 上の Slurm クラスター内のマルチユーザー環境を管理できます。HyperPod クラスターの作成時に Amazon FSx で Slurm クラスターを設定した場合、クラスターユーザーのワークスペースを設定するのに適したオプションです。新しいユーザーを作成し、Amazon FSx 共有ファイルシステムでユーザーのホームディレクトリを設定します。

**ヒント**  
ユーザー名と専用ディレクトリを介したクラスターへのアクセスをユーザーに許可するには、「 AWS Systems Manager ユーザーガイド」の「[Linux と macOS のマネージドノードで Run As サポートを有効にする](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-run-as.html)」で提供されている手順「**Linux と macOS のマネージドノードで Run As サポートを有効にするには**」のステップ 5 の**オプション 2** で説明されているとおりにタグ付けすることにより、ユーザーを IAM ロールまたはユーザーに関連付ける必要があります。[クラスターユーザーアクセスコントロールの設定 AWS Systems Manager と Run As](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-ssm) も参照してください。

**SageMaker HyperPod で Slurm クラスターを作成するときにマルチユーザー環境を設定するには**

SageMaker HyperPod サービスチームは、基本ライフサイクルスクリプトサンプルの一部としてスクリプト [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh) を提供しています。

1. 次の形式で作成する必要がある `shared_users.txt` という名前のテキストファイルを準備します。最初の列はユーザー名用、2 番目の列は一意のユーザー ID 用、3 番目の列は Amazon FSx 共有スペースのユーザーディレクトリ用です。

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

1. 必ず、HyperPod ライフサイクルスクリプトの S3 バケットに `shared_users.txt` および [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh) ファイルをアップロードしてください。クラスターの作成、クラスターの更新、またはクラスターソフトウェアの更新が進行中、[https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/add_users.sh) は `shared_users.txt` を読み取り、ユーザーディレクトリを適切にセットアップします。

**新しいユーザーを作成し、SageMaker HyperPod で実行されている既存の Slurm クラスターに追加するには**

1. ヘッドノードで、次のコマンドを実行して、ユーザーの作成に役立つスクリプトを保存します。これは、sudo アクセス許可で実行してください。

   ```
   $ cat > create-user.sh << EOL
   #!/bin/bash
   
   set -x
   
   # Prompt user to get the new user name.
   read -p "Enter the new user name, i.e. 'sean': 
   " USER
   
   # create home directory as /fsx/<user>
   # Create the new user on the head node
   sudo useradd \$USER -m -d /fsx/\$USER --shell /bin/bash;
   user_id=\$(id -u \$USER)
   
   # add user to docker group
   sudo usermod -aG docker \${USER}
   
   # setup SSH Keypair
   sudo -u \$USER ssh-keygen -t rsa -q -f "/fsx/\$USER/.ssh/id_rsa" -N ""
   sudo -u \$USER cat /fsx/\$USER/.ssh/id_rsa.pub | sudo -u \$USER tee /fsx/\$USER/.ssh/authorized_keys
   
   # add user to compute nodes
   read -p "Number of compute nodes in your cluster, i.e. 8: 
   " NUM_NODES
   srun -N \$NUM_NODES sudo useradd -u \$user_id \$USER -d /fsx/\$USER --shell /bin/bash;
   
   # add them as a sudoer
   read -p "Do you want this user to be a sudoer? (y/N):
   " SUDO
   if [ "\$SUDO" = "y" ]; then
           sudo usermod -aG sudo \$USER
           sudo srun -N \$NUM_NODES sudo usermod -aG sudo \$USER
           echo -e "If you haven't already you'll need to run:\n\nsudo visudo /etc/sudoers\n\nChange the line:\n\n%sudo   ALL=(ALL:ALL) ALL\n\nTo\n\n%sudo   ALL=(ALL:ALL) NOPASSWD: ALL\n\nOn each node."
   fi
   EOL
   ```

1. 次のコマンドを使用してスクリプトを実行します。ユーザーの名前と、ユーザーにアクセスを許可するコンピューティングノードの数を追加するよう求められます。

   ```
   $ bash create-user.sh
   ```

1. 次のコマンドを実行することによりテストします。

   ```
   $ sudo su - {{<user>}} && ssh $(srun hostname)
   ```

1. ユーザー情報を `shared_users.txt` ファイルに追加すると、新しいコンピューティングノードまたは新しいクラスターにユーザーが作成されます。

## HyperPod クラスターを Active Directory と統合してマルチユーザー環境をセットアップする
<a name="sagemaker-hyperpod-run-jobs-slurm-access-nodes-multi-user-with-active-directory"></a>

実際のユースケースでは、HyperPod クラスターは通常、機械学習 (ML) の研究者、ソフトウェアエンジニア、データサイエンティスト、クラスター管理者など、複数のユーザーにより使用されます。お互いの作業に影響を与えることなく、自身のファイルを編集し、自身のジョブを実行しています。マルチユーザー環境を設定するには、Linux ユーザーおよびグループメカニズムを使用して、ライフサイクルスクリプトを通じて各インスタンスに複数のユーザーを静的に作成します。ただし、このアプローチの欠点は、ユーザーの追加、編集、削除などの更新を行う際に、クラスター内の複数のインスタンス間でユーザー設定とグループ設定を複製して、すべてのインスタンスで一貫した設定を維持する必要がある点です。

これを解決するため、[Lightweight Directory Access Protocol (LDAP)](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) と [LDAP over TLS/SSL (LDAPS)](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) を使用して、[AWS Directory Service for Microsoft Active Directory](https://aws.amazon.com/directoryservice/) などのディレクトリサービスと統合することができます。HyperPod クラスターで Active Directory とマルチユーザー環境を設定する方法の詳細については、ブログ記事「[Integrate HyperPod clusters with Active Directory for seamless multi-user login](https://aws.amazon.com/blogs/machine-learning/integrate-hyperpod-clusters-with-active-directory-for-seamless-multi-user-login/)」を参照してください。