SageMaker HyperPod クラスターノードにアクセスする - Amazon SageMaker AI

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

SageMaker HyperPod クラスターノードにアクセスする

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

注記

HyperPod クラスターノードへのアクセス権をユーザーに付与すると、ユーザーはノードにユーザー管理ソフトウェアをインストールして操作できます。ユーザーの最小特権のアクセス許可の原則を維持してください。

を設定していない場合は AWS Systems Manager、「」に記載されている手順に従ってくださいクラスターユーザーアクセスコントロールのセットアップ AWS Systems Manager と Run As

$ 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 クラスターを実際に使用するための詳細設定については、以下のトピックを参照してください。

SageMaker HyperPod クラスターノードにアクセスするためのその他のヒント

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

前のプロセスを 1 行のコマンドにするため、HyperPod チームは、クラスター情報を取得してそれを SSM コマンドに集約し、コンピューティングノードに接続する easy-ssh.sh スクリプトを用意しています。このスクリプトは describe-cluster コマンドと list-cluster-nodes コマンドを実行し、SSM コマンドの完了に必要な情報を解析するため、必要な 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
  2. HyperPod クラスターノードで、ローカルデバイス上のパブリックキーを HyperPod クラスターノード上の ~/.ssh/authorized_keys ファイルに追加します。

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

      $ cat ~/.ssh/id_rsa.pub

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

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

      $ ssh-keygen -t rsa -q -f "$HOME/.ssh/id_rsa" -N ""
    2. クラスターノードに接続し、ユーザーに切り替えてキーを追加します。次のコマンドは、ubuntu ユーザーとしてアクセスする例です。ubuntu を、SSH で簡単アクセスを設定するユーザー名に置き換えます。

      $ ./easy-ssh.sh -c <node-group> <cluster-name> $ sudo su - ubuntu ubuntu@ip-111-22-333-444:/usr/bin#
    3. ~/.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 など、ローカルデバイス上の IDE からリモート開発にホストを使用することもできます。

Amazon FSx 共有スペースを通じてマルチユーザー環境を設定する

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

ヒント

ユーザー名と専用ディレクトリを介したクラスターへのアクセスをユーザーに許可するには、「 AWS Systems Manager ユーザーガイド」の「Linux と macOS のマネージドノードで Run As サポートを有効にする」で提供されている手順「Linux と macOS のマネージドノードで Run As サポートを有効にするには」のステップ 5 のオプション 2 で説明されているとおりにタグ付けすることにより、ユーザーを IAM ロールまたはユーザーに関連付ける必要があります。「クラスターユーザーアクセスコントロールのセットアップ AWS Systems Manager と Run As」も参照してください。

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

SageMaker HyperPod サービスチームは、基本ライフサイクルスクリプトサンプルの一部としてスクリプト add_users.sh を提供しています。

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

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...
  2. 必ず、HyperPod ライフサイクルスクリプトの S3 バケットに shared_users.txt および add_users.sh ファイルをアップロードしてください。クラスターの作成、クラスターの更新、またはクラスターソフトウェアの更新が進行中、add_users.shshared_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
  2. 次のコマンドを使用してスクリプトを実行します。ユーザーの名前と、ユーザーにアクセスを許可するコンピューティングノードの数を追加するよう求められます。

    $ bash create-user.sh
  3. 次のコマンドを実行することによりテストします。

    $ sudo su - <user> && ssh $(srun hostname)
  4. ユーザー情報を shared_users.txt ファイルに追加すると、新しいコンピューティングノードまたは新しいクラスターにユーザーが作成されます。

HyperPod クラスターを Active Directory と統合してマルチユーザー環境をセットアップする

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

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