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

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

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

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

注記

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

$ 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 クラスターノードにアクセスするためのその他のヒント

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

前のプロセスを 1 行のコマンドにするために、 HyperPod チームはクラスター情報を取得し、それらを SSM コマンドに集約し、コンピューティングノードに接続するeasy-ssh.shスクリプトを提供します。このスクリプトは describe-clusterlist-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経由で簡単にアクセスできるように を設定する方法を示します。これにより、ユーザーまたはクラスターユーザーがクラスター HyperPod ノードに直接 を実行してssh <cluster-name>接続できます。

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

ヒント

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

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

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

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

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...
  2. HyperPod ライフサイクルスクリプト用に shared_users.txtadd_users.sh ファイルを S3 バケットにアップロードしていることを確認してください。クラスターの作成、クラスターの更新、またはクラスターソフトウェアの更新が進行中、 は でadd_users.sh読み取りshared_users.txt、ユーザーディレクトリを適切にセットアップします。

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

  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 TLS/SSL (LDAPS) を使用して、AWS Microsoft Active Directory 用の Directory Service などのディレクトリサービスと統合できます。 HyperPod クラスター内の Active Directory とマルチユーザー環境の設定の詳細については、ブログ記事「シームレスなマルチユーザーログインのために HyperPod クラスターを Active Directory と統合する」を参照してください。