存取 SageMaker HyperPod叢集節點 - Amazon SageMaker

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

存取 SageMaker HyperPod叢集節點

InService可以透過 AWS Systems Manager (SSM) 存取 AWS CLI SageMaker HyperPod叢集,方法是以. aws ssm start-session sagemaker-cluster:[cluster-id]_[instance-group-name]-[instance-id] 您可以從SageMaker HyperPod 主控台或執行和的AWS CLI 命令擷取叢集 ID、執行個體 ID describe-clusterlist-cluster-nodes執行個體群組名稱 SageMaker HyperPod。例如,如果您的叢集 ID 為aa11bbbbb222,叢集節點名稱為controller-group,而叢集節點識別碼為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#

請注意,這最初以 root 用戶身份連接您。執行工作之前,請執行下列命令以切換至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-cluster並且list-cluster-nodes指令並剖析完成 SSM 命令所需的資訊。下列範例命令顯示如何執行指easy-ssh.sh令碼。如果成功執行,您就會以 root 使用者的身分連線到叢集。它也會透過 SSM 代理將 HyperPod 叢集新增為遠端主機,列印程式碼片段以設定 SSH。透過設定 SSH,您可以將本機開發環境 (例如 Visual Studio 程式碼) 與 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#

請注意,這最初以 root 用戶身份連接您。執行工作之前,請執行下列命令以切換至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 Proxy 使用 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. Connect 至叢集節點並切換至使用者以新增金鑰。以下命令是以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 程式碼遠端-SSH

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

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

提示

若要允許使用者透過其使用者名稱和專用目錄存取您的叢集,您也應該將它們與 IAM 角色或使用者建立關聯,方法是在使用 AWS Systems Manager 者指南中針對 Linux 和 macOS 受管節點開啟 Linux 和 macOS 受管節點執行身分支援中的程序 5 中的選項 2 中的指引標記。另請參閱設定 AWS Systems Manager 以及叢集使用者存取控制的執行身分

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

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

  1. 準備一個文本文件shared_users.txt,您需要創建以下格式命名。第一欄適用於使用者名稱,第二欄適用於唯一使用者 ID,第三欄適用於 Amazon FSx 共用空間中的使用者目錄。

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...
  2. 請務必將shared_users.txtadd_users.sh檔案上傳到 S3 儲存貯體以供 HyperPod 生命週期指令碼使用。叢集建立、叢集更新或叢集軟體更新正在進行時,add_users.sh讀取shared_users.txt並正確設定使用者目錄。

若要建立新使用者並新增至在上執行的現有 Slurm 叢集 SageMaker HyperPod

  1. 在 head 節點上,執行下列命令以儲存可協助建立使用者的指令碼。確保您使用 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 叢集與使用中目錄來設定多使用者環境

在實際使用案例中, HyperPod 叢集通常由多位使用者使用:機器學習 (ML) 研究人員、軟體工程師、資料科學家和叢集管理員。他們編輯自己的文件並運行自己的任務,而不會影響彼此的工作。若要設定多使用者環境,請使用 Linux 使用者和群組機制,透過生命週期指令碼在每個執行個體上靜態建立多個使用者。但是,這種方法的缺點是,您需要在叢集中的多個執行個體之間複製使用者和群組設定,以便在進行更新 (例如新增、編輯和移除使用者) 時,在所有執行個體之間保持一致的組態。

為了解決這個問題,您可以使用輕量級目錄訪問協議(LDAP)和 LDAP 通過 TLS/SSL(LDAPS)與 Directory Service,如 Microsoft 活動AWS 目錄服務集成。若要深入了解如何在叢集中設定 Active Directory 和多使用者環境,請參閱部落格文章將 HyperPod HyperPod 叢集與 Active Directory 整合,以便順暢地進行多使用者登入。