访问您的 SageMaker HyperPod集群节点 - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

访问您的 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-clusterlist-cluster-nodes实例组名称 SageMaker HyperPod。例如,如果集群 ID 是 aa11bbbbb222,集群节点名称是 controller-group,集群节点 ID 是 i-111222333444555aa,则 SSM start-session 命令应如下所示。

注意

授予用户访问 HyperPod 群集节点的权限允许他们在节点上安装和操作用户管理的软件。确保遵守用户最低权限原则。

如果您尚未设置 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 命令中,然后连接到计算节点。当此脚本运行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 进行轻松访问,以便您或您的集群用户可以直接运行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

通过 Amazon FSx 共享空间设置多用户环境

您可以使用 Amazon FSx 共享空间来管理 Slurm 集群中的多用户环境。 SageMaker HyperPod如果您在创建集群 FSx 时使用 Amazon 配置了 Slurm HyperPod 集群,那么这是为集群用户设置工作空间的好选择。在 Amazon FSx 共享文件系统上创建新用户并为该用户设置主目录。

提示

要让用户通过用户名和专用目录访问您的集群,您还可以按照《 AWS Systems Manager 用户指南》中为 Linux 和 macOS 托管节点启用“以另一种身份运行”支持提供的为 Linux 和 macOS 托管节点开启“以另一种身份运行”支持步骤下的步骤 5 选项 2 中的说明进行标记,将它们与 IAM 角色或用户关联起来。另请参阅为集群用户访问控制设置 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文件上传到 S3 存储桶以获取 HyperPod 生命周期脚本。当集群创建、集群更新或集群软件更新正在进行时,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 用户和组机制,通过生命周期脚本在每个实例上静态创建多个用户。不过,这种方法的缺点是,在进行添加、编辑和删除用户等更新时,需要在集群中的多个实例中复制用户和组设置,以便在所有实例中保持一致的配置。

要解决这个问题,可以使用轻量级目录访问协议(LDAP)LDAP over TLS/SSL (LDAPS) 与目录服务集成,如 Microsoft Active Directory 的AWS 目录服务。要了解有关在集群中设置 Active Directory 和多用户环境的更多信息,请参阅博客文章将 HyperPod 集群与 Active Directory 集成 HyperPod 以实现多用户无缝登录