本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
访问您的 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 控制台检索集群 ID、实例 ID 和实例组名称,也可以通过运行和的AWS CLI 命令来检索集群 ID、实例 ID describe-cluster
和list-cluster-nodes
实例组名称 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
\ --regionus-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
describe-cluster
并list-cluster-nodes
命令和解析完成命令所需的信息时,您无需手动查找所需的 HyperPod 集群信息。SSM以下示例命令显示了如何运行easy-ssh.sh
$
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: s0011223344aabbccddroot@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#
SSH通过将 HyperPod 计算节点用作远程主机进行设置,便于访问
为了进一步简化SSH从本地计算机使用对计算节点的访问,该easy-ssh.sh
脚本输出了一段将 HyperPod 集群设置为远程主机的代码片段,如上一节所示。代码片段是自动生成的,可帮助您直接添加到本地设备上的~/.ssh/config
文件中。以下过程说明如何SSH通过SSM代理进行设置以便于访问,以便您或您的集群用户可以直接运行ssh
以连接到 HyperPod 群集节点。<cluster-name>
-
在您的本地设备上,将带有用户名的 HyperPod 计算节点作为远程主机添加到
~/.ssh/config
文件中。以下命令显示如何将easy-ssh.sh
脚本中自动生成的代码片段附加到文件中。~/.ssh/config
请务必从脚本自动生成的输出中复制该easy-ssh.sh
脚本,其中包含正确的群集信息。$
cat <<EOF >> ~/.ssh/config Host
<cluster-name>
Userubuntu
ProxyCommand sh -c "aws ssm start-session --target sagemaker-cluster:<cluster_id>
_<node-group>
-<instance_id>
--document-name AWS-StartSSHSession --parameters 'portNumber=%p'" EOF -
在 HyperPod 群集节点上,将本地设备上的公钥添加到 HyperPod 群集节点上的
~/.ssh/authorized_keys
文件中。-
在本地计算机上打印公钥文件。
$
cat ~/.ssh/id_rsa.pub
这应该会归还你的密钥。复制此命令的输出。
(可选)如果您没有公钥,请运行以下命令创建一个。
$
ssh-keygen -t rsa -q -f "$HOME/.ssh/id_rsa" -N ""
-
Connect 连接到群集节点并切换到用户以添加密钥。以下命令是以
ubuntu
用户身份访问的示例。替换ubuntu
为要为其设置简易访问的用户名SSH。$
./easy-ssh.sh -c
<node-group> <cluster-name>
$
sudo su -
ubuntu
ubuntu@ip-111-22-333-444:/usr/bin#
-
打开
~/.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 托管节点的启用运行身份支持过程中的步骤 2 中的指导对其进行标记。 AWS Systems Manager 另请参阅 为集群用户访问控制设置 AWS Systems Manager 和运行方式。
要在创建 Slurm 集群时设置多用户环境,请开启 SageMaker HyperPod
SageMaker HyperPod 服务团队提供了一个脚本add_users.sh
-
准备一个名为的文本文件
shared_users.txt
,您需要按以下格式创建该文件。第一列用于用户名,第二列用于唯一用户IDs,第三列用于表示 Amazon FSx 共享空间中的用户目录。username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...
-
确保将
shared_users.txt
和add_users.sh
文件上传到 S3 存储桶以获取 HyperPod 生命周期脚本。在集群创建、群集更新或群集软件更新过程中, add_users.sh
读取 shared_users.txt
并正确设置用户目录。
创建新用户并添加到上运行的现有 Slurm 集群 SageMaker HyperPod
-
在头节点上,运行以下命令以保存有助于创建用户的脚本。请务必使用 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 -
使用以下命令运行脚本。系统将提示您添加用户名和您希望允许该用户访问的计算节点数量。
$
bash create-user.sh
-
通过运行以下命令来测试用户。
$
sudo su -
<user>
&& ssh $(srun hostname) -
将用户信息添加到
shared_users.txt
文件中,这样就可以在任何新的计算节点或新集群上创建用户。
通过将集 HyperPod 群与 Active Directory 集成来设置多用户环境
在实际用例中, HyperPod 群集通常由多个用户使用:机器学习 (ML) 研究人员、软件工程师、数据科学家和集群管理员。他们编辑自己的文件并运行自己的作业,而不会影响彼此的工作。要设置多用户环境,请使用 Linux 用户和组机制,通过生命周期脚本在每个实例上静态创建多个用户。但是,这种方法的缺点是,在进行添加、编辑和删除用户等更新时,您需要在集群中的多个实例之间复制用户和组设置,以便在所有实例上保持一致的配置。
要解决这个问题,你可以使用轻量级目录访问协议 (LDAP) 和LDAP更高版本的TLS/()