本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用独立实例作为 AWS PCS登录节点
您可以设置独立EC2实例以与 AWS PCS集群的 Slurm 调度器进行交互。这对于创建登录节点、工作站或专用工作流管理主机非常有用,这些主机可以与 AWS PCS群集配合使用,但在 AWS PCS管理之外运行。为此,每个独立实例必须:
-
安装兼容的 Slurm 软件版本。
-
能够连接到 AWS PCS集群的 Slurmctld 终端节点。
-
使用集群的终端节点和密钥正确配置 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-identifiercluster-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
并且正在端口上运行。6817
secretArn
将在后面的步骤中使用来检索集群密钥。IP 地址和端口将在后续步骤中用于配置sackd
服务。
步骤 2-启动实EC2例
启动 EC2 实例
-
打开 Amazon EC2 控制台
。 -
在导航窗格中,请选择 Instances(实例),然后选择 Launch Instances(启动实例)以打开新的启动实例向导。
-
(可选)在名称和标签部分中,提供实例的名称,例如
PCS-LoginNode
。名称作为资源标签(Name=PCS-LoginNode
)分配给实例。 -
在 “应用程序和操作系统映像” 部分,AMI为支持的操作系统选择一个 AWS PCS。有关更多信息,请参阅 支持的操作系统。
-
在实例类型部分,选择支持的实例类型。有关更多信息,请参阅 支持的实例类型。
-
在密钥对部分,选择要用于实例的SSH密钥对。
-
在 “网络设置” 部分:
-
选择编辑。
-
选择您的VPC集 AWS PCS群的。
-
对于防火墙(安全组),请选择选择现有安全组。
-
选择一个允许在实例和目标 AWS PCS集群的 Slurm 控制器之间进行流量的安全组。有关更多信息,请参阅 安全组要求和注意事项。
-
(可选)选择允许对您的实例进行入站SSH访问的安全组。
-
-
-
-
在 “存储” 部分,根据需要配置存储卷。确保配置足够的空间来安装应用程序和库,以启用您的用例。
-
在 “高级” 下,选择允许访问集群密钥的IAM角色。有关更多信息,请参阅 获取 Slurm 集群的秘密。
-
在 “摘要” 窗格中,选择 “启动实例”。
步骤 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
使用在步骤 1 中secretArn
检索到的值。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
作为系统服务启动。
-
使用以下命令为
sackd
服务设置环境文件。在运行命令之前,请替换ip-address
以及port
使用步骤 1 中从端点检索到的值。sudo echo "SACKD_OPTIONS='--conf-server=
ip-address
:port
'" > /etc/sysconfig/sackd -
创建用于管理
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
-
设置
sackd
服务文件的所有权。sudo chown root:root /etc/systemd/system/sackd.service && \ sudo chmod 0644 /etc/systemd/system/sackd.service
-
启用该
sackd
服务。sudo systemctl daemon-reload && sudo systemctl enable sackd
-
启动
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