访问您的 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 控制台检索集群 ID、实例 ID 和实例组名称,也可以通过运行和的AWS CLI 命令来检索集群 ID、实例 ID describe-clusterlist-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 \ --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命令中,然后连接到计算节点。当此脚本运行describe-clusterlist-cluster-nodes命令和解析完成命令所需的信息时,您无需手动查找所需的 HyperPod 集群信息。SSM以下示例命令显示了如何运行easy-ssh.sh脚本。如果成功运行,您将以 root 用户身份连接到集群。它还会打印一个代码片段,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#

请注意,这最初会将您连接为 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 <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 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作为基本生命周期脚本示例的一部分。

  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更高版本的TLS/() 与目录服务SSL(例如 Microsoft Active Directory 的AWS 目录服务 LDAPS集成。要了解有关在集群中设置 Active Directory 和多用户环境的更多信息,请参阅博客文章将 HyperPod 集群与 Active Directory 集成 HyperPod 以实现多用户无缝登录