使用独立实例作为 AWS PCS登录节点 - AWS PCS

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

使用独立实例作为 AWS PCS登录节点

您可以设置独立EC2实例以与 AWS PCS集群的 Slurm 调度器进行交互。这对于创建登录节点、工作站或专用工作流管理主机非常有用,这些主机可以与 AWS PCS群集配合使用,但在 AWS PCS管理之外运行。为此,每个独立实例必须:

  1. 安装兼容的 Slurm 软件版本。

  2. 能够连接到 AWS PCS集群的 Slurmctld 终端节点。

  3. 使用集群的终端节点和密钥正确配置 Slurm Auth 和 Cred Kiosk Daemon (sackd)。 AWS PCS有关更多信息,请参阅 Slurm 文档中的 sackd

本教程可帮助您配置连接到 AWS PCS集群的独立实例。

步骤 1-检索目标 AWS PCS集群的地址和密钥

使用以下命令检索有关目标 AWS PCS集群 AWS CLI 的详细信息。在运行命令之前,进行以下替换:

  • Replace(替换) region-code 以及目标 AWS 区域 集群的运行位置。

  • Replace(替换) cluster-ident 使用目标集群的名称或标识符

aws pcs get-cluster --region region-code --cluster-identifier cluster-ident

该命令将返回类似于此示例的输出。

{ "cluster": { "name": "get-started", "id": "pcs_123456abcd", "arn": "arn:aws:pcs:us-east-1:111122223333:cluster/pcs_123456abcd", "status": "ACTIVE", "createdAt": "2024-09-23T21:03:52+00:00", "modifiedAt": "2024-09-23T21:03:52+00:00", "scheduler": { "type": "SLURM", "version": "23.11" }, "size": "SMALL", "slurmConfiguration": { "authKey": { "secretArn": "arn:aws:secretsmanager:us-east-1:111122223333:secret:pcs!slurm-secret-pcs_123456abcd-a12ABC", "secretVersion": "ef232370-d3e7-434c-9a87-ec35c1987f75" } }, "networking": { "subnetIds": [ "subnet-0123456789abcdef0" ], "securityGroupIds": [ "sg-0123456789abcdef0" ] }, "endpoints": [ { "type": "SLURMCTLD", "privateIpAddress": "10.3.149.220", "port": "6817" } ] } }

在此示例中,集群 Slurm 控制器端点的 IP 地址为,10.3.149.220并且正在端口上运行。6817secretArn将在后面的步骤中使用来检索集群密钥。IP 地址和端口将在后续步骤中用于配置sackd服务。

步骤 2-启动实EC2例

启动 EC2 实例
  1. 打开 Amazon EC2 控制台

  2. 在导航窗格中,请选择 Instances(实例),然后选择 Launch Instances(启动实例)以打开新的启动实例向导。

  3. (可选)在名称和标签部分中,提供实例的名称,例如PCS-LoginNode。名称作为资源标签(Name=PCS-LoginNode)分配给实例。

  4. 在 “应用程序和操作系统映像” 部分,AMI为支持的操作系统选择一个 AWS PCS。有关更多信息,请参阅 支持的操作系统

  5. 实例类型部分,选择支持的实例类型。有关更多信息,请参阅 支持的实例类型

  6. 密钥对部分,选择要用于实例的SSH密钥对。

  7. 在 “网络设置” 部分:

    1. 选择编辑

      1. 选择您的VPC集 AWS PCS群的。

      2. 对于防火墙(安全组),请选择选择现有安全组

        1. 选择一个允许在实例和目标 AWS PCS集群的 Slurm 控制器之间进行流量的安全组。有关更多信息,请参阅 安全组要求和注意事项

        2. (可选)选择允许对您的实例进行入站SSH访问的安全组。

  8. 在 “存储” 部分,根据需要配置存储卷。确保配置足够的空间来安装应用程序和库,以启用您的用例。

  9. 在 “高级” 下,选择允许访问集群密钥的IAM角色。有关更多信息,请参阅 获取 Slurm 集群的秘密

  10. 在 “摘要” 窗格中,选择 “启动实例”。

步骤 3-在实例上安装 Slurm

当实例启动并变为活动状态时,请使用您的首选机制连接到该实例。使用提供的 Slurm 安装程序将 Slurm 安装 AWS 到实例上。有关更多信息,请参阅 Slurm 安装程序

下载 Slurm 安装程序,将其解压缩,然后使用installer.sh脚本安装 Slurm。有关更多信息,请参阅 第 3 步 — 安装 Slurm

步骤 4-检索和存储集群密钥

这些说明需要 AWS CLI. 有关更多信息,请参阅版本 2 AWS Command Line Interface 用户指南 AWS CLI中的安装或更新到最新版本的

使用以下命令存储集群密钥。

  • 为 Slurm 创建配置目录。

    sudo mkdir -p /etc/slurm
  • 检索、解码和存储集群密钥。在运行此命令之前,请替换 region-code 替换为目标集群正在运行的区域,然后替换 secret-arn 使用在步骤 1secretArn检索到的值。

    sudo aws secretsmanager get-secret-value \ --region region-code \ --secret-id 'secret-arn' \ --version-stage AWSCURRENT \ --query 'SecretString' \ --output text | base64 -d > /etc/slurm/slurm.key
    警告

    在多用户环境中,任何有权访问实例的用户如果能够访问实例元数据服务(IMDS),都可能能够获取集群密钥。反过来,这可能允许他们冒充其他用户。考虑将访问权限限制IMDS为 root 用户或管理用户。或者,可以考虑使用另一种不依赖实例配置文件来获取和配置密钥的机制。

  • 设置 Slurm 密钥文件的所有权和权限。

    sudo chmod 0600 /etc/slurm/slurm.key sudo chown slurm:slurm /etc/slurm/slurm.key
    注意

    Slurm 密钥必须归运行sackd服务的用户和群组所有。

步骤 5-配置与 AWS PCS集群的连接

要建立与 AWS PCS集群的连接,请按照以下步骤sackd作为系统服务启动。

  1. 使用以下命令为sackd服务设置环境文件。在运行命令之前,请替换 ip-address 以及 port 使用步骤 1 中从端点检索到的值。

    sudo echo "SACKD_OPTIONS='--conf-server=ip-address:port'" > /etc/sysconfig/sackd
  2. 创建用于管理sackd流程的systemd服务文件。

    sudo cat << EOF > /etc/systemd/system/sackd.service [Unit] Description=Slurm auth and cred kiosk daemon After=network-online.target remote-fs.target Wants=network-online.target ConditionPathExists=/etc/sysconfig/sackd [Service] Type=notify EnvironmentFile=/etc/sysconfig/sackd User=slurm Group=slurm RuntimeDirectory=slurm RuntimeDirectoryMode=0755 ExecStart=/opt/aws/pcs/scheduler/slurm-23.11/sbin/sackd --systemd \$SACKD_OPTIONS ExecReload=/bin/kill -HUP \$MAINPID KillMode=process LimitNOFILE=131072 LimitMEMLOCK=infinity LimitSTACK=infinity [Install] WantedBy=multi-user.target EOF
  3. 设置sackd服务文件的所有权。

    sudo chown root:root /etc/systemd/system/sackd.service && \ sudo chmod 0644 /etc/systemd/system/sackd.service
  4. 启用该sackd服务。

    sudo systemctl daemon-reload && sudo systemctl enable sackd
  5. 启动 sackd 服务。

    sudo systemctl start sackd

步骤 6-(可选)测试连接

确认sackd服务正在运行。示例输出如下。如果有错误,它们通常会出现在这里。

[root@ip-10-3-27-112 ~]# systemctl status sackd [x] sackd.service - Slurm auth and cred kiosk daemon Loaded: loaded (/etc/systemd/system/sackd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2024-07-16 16:34:55 UTC; 8s ago Main PID: 9985 (sackd) CGroup: /system.slice/sackd.service └─9985 /opt/aws/pcs/scheduler/slurm-23.11/sbin/sackd --systemd --conf-server=10.3.149.220:6817 Jul 16 16:34:55 ip-10-3-27-112.ec2.internal systemd[1]: Starting Slurm auth and cred kiosk daemon... Jul 16 16:34:55 ip-10-3-27-112.ec2.internal systemd[1]: Started Slurm auth and cred kiosk daemon. Jul 16 16:34:55 ip-10-3-27-112.ec2.internal sackd[9985]: sackd: running

使用 Slurm 客户端命令(例如sinfo和)确认与集群的连接是否正常运行。squeue以下是来自的输出示例sinfo

[root@ip-10-3-27-112 ~]# /opt/aws/pcs/scheduler/slurm-23.11/bin/sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST all up infinite 4 idle~ compute-[1-4]

您还应该能够提交工作。例如,类似于此示例的命令将在集群中的 1 个节点上启动交互式作业。

/opt/aws/pcs/scheduler/slurm-23.11/bin/srun --nodes=1 -p all --pty bash -i