存取叢集 SageMaker HyperPod節點 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

存取叢集 SageMaker HyperPod節點

您可以透過 AWS Systems Manager (SSM) 存取InService叢集,方法是aws ssm start-session使用 SageMaker HyperPod 叢集主機名稱的格式執行 AWS CLI 命令sagemaker-cluster:[cluster-id]_[instance-group-name]-[instance-id]。您可以從SageMaker HyperPod 主控台或從 的list-cluster-nodes命令執行 和 ,擷取叢集 ID、執行個體 ID describe-cluster和執行個體群組名稱。 AWS CLI SageMaker HyperPod例如,如果您的叢集 ID 是 aa11bbbbb222,叢集節點名稱是 controller-group,而叢集節點 ID 是 i-111222333444555aa,則SSMstart-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 來簡化連線程序

若要將先前的程序轉換為單行命令, HyperPod 團隊會提供擷取叢集資訊的easy-ssh.sh指令碼,將它們彙總到SSM命令中,並連接至運算節點。您不需要手動尋找必要的 HyperPod 叢集資訊,因為此指令碼會執行 describe-clusterlist-cluster-nodes 命令,並剖析完成 SSM命令所需的資訊。下列範例命令示範如何執行easy-ssh.sh指令碼。如果成功執行,您將以根使用者身分連線至叢集。它也會列印程式碼片段,SSH透過SSM代理將 HyperPod 叢集新增為遠端主機來設定。透過設定 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檔案。下列程序說明如何透過SSHSSM代理設定 以使用 輕鬆存取,以便您或您的叢集使用者可以直接執行 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#

此外,您可以使用主機從IDE本機裝置上的 進行遠端開發,例如 Visual Studio Code Remote - SSH

透過 Amazon FSx共用空間設定多使用者環境

您可以使用 Amazon FSx共用空間來管理 上的 Slurm 叢集中的多使用者環境 SageMaker HyperPod。如果您在叢集建立FSx期間已使用 Amazon 設定 Slurm HyperPod 叢集,這是為叢集使用者設定工作區的好選項。建立新的使用者,並在 Amazon FSx共用檔案系統上為使用者設定主目錄。

提示

若要允許使用者透過其使用者名稱和專用目錄存取叢集,您也應該依照步驟 5 的選項 2 中的指引標記角色IAM或使用者,以開啟 使用者指南中的開啟 Linux 和 macOS 受管節點的執行身分支援 開啟 Linux 和 macOS 受管節點的支援。 AWS Systems Manager 另請參閱針對叢集使用者存取控制設定 AWS Systems Manager 和執行為

在 上建立 Slurm 叢集時設定多使用者環境 SageMaker HyperPod

SageMaker HyperPod 服務團隊提供指令碼add_users.sh作為基本生命週期指令碼範例的一部分。

  1. 準備名為shared_users.txt您需要以下列格式建立的文字檔案。第一欄適用於使用者名稱,第二欄適用於唯一使用者 IDs,第三欄適用於 Amazon FSx共用空間中的使用者目錄。

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...
  2. 請務必將 shared_users.txtadd_users.sh 檔案上傳到 HyperPod 生命週期指令碼的 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 over TLS/SSL (LDAPS)AWS Directory Service for Microsoft Active Directory 等目錄服務整合。若要進一步了解如何設定 HyperPod 叢集中的 Active Directory 和多使用者環境,請參閱部落格文章將 HyperPod 叢集與 Active Directory 整合,以實現多使用者無縫登入。