PCS 有三种主要资源类型:
Cluster — 顶层资源。当我们创建集群时,PCS 会在 AWS 托管账户中预置一个 Slurm 控制器。该控制器与我们账户中的计算节点进行通信。在创建集群时,我们需要指定 Slurm 版本、VPC 和子网。
Compute Node Group — 一组托管的 EC2 实例集合。我们可以定义实例类型、AMI、启动模板、扩展边界(最小/最大实例数)、购买选项(按需或竞价)以及 Slurm 特定的设置。PCS 会根据作业需求自动启动和终止实例。计算节点组也用于登录节点(采用静态扩展)。
Queue — 一个 Slurm 分区。我们将一个或多个计算节点组关联到一个队列。用户将作业提交到队列,PCS 会将它们调度到关联的计算节点组中的实例上。
| PCS 概念 | Slurm 对应项 | 作用 |
|---|---|---|
| Cluster | 控制器(slurmctld) | 管理调度和节点生命周期 |
| Compute Node Group | 节点集 | 定义具有共同属性的计算实例池 |
| Queue | 分区 | 将节点集分组以供作业提交 |
PCS 使用两种机制来配置它启动的 EC2 实例:
AMI — 包含操作系统、PCS 代理、Slurm、驱动程序和预装软件的基础镜像。这是我们构建一次即可重复使用的内容。
Launch Template — 控制实例级别的配置: EFA 网络接口、安全组、置放群组和用户数据。用户数据(采用 MIME 多部分格式)在启动时运行,用于挂载文件系统、启动服务并为实例的角色进行配置。
AMI 提供"安装了什么”,而启动模板提供"启动时如何配置”。
我们需要按以下顺序创建 PCS 资源:
首先,使用来自预部署基础设施的资源 ID 设置 shell 变量:
export INFRA_STACK="pcs-workshop-infra"
export AWS_DEFAULT_REGION="us-east-2"
export PRIVATE_SUBNET_1=$(aws cloudformation describe-stacks \
--stack-name $INFRA_STACK \
--query "Stacks[0].Outputs[?OutputKey=='PrivateSubnetId1'].OutputValue" \
--output text)
export HPC_SUBNET=$(aws cloudformation describe-stacks \
--stack-name $INFRA_STACK \
--query "Stacks[0].Outputs[?OutputKey=='HpcSubnetId'].OutputValue" \
--output text)
export PRIVATE_SG=$(aws cloudformation describe-stacks \
--stack-name $INFRA_STACK \
--query "Stacks[0].Outputs[?OutputKey=='PrivateSecurityGroupId'].OutputValue" \
--output text)
echo "HPC Subnet: $HPC_SUBNET"
echo "Private SG: $PRIVATE_SG"
运行以下命令来创建一个 PCS 集群:
aws pcs create-cluster \
--cluster-name hpc-cluster \
--scheduler type=SLURM,version=25.11 \
--size SMALL \
--networking "subnetIds=$HPC_SUBNET,securityGroupIds=$PRIVATE_SG" \
--slurm-configuration '{
"accounting": {"mode": "STANDARD", "defaultPurgeTimeInDays": 30},
"slurmCustomSettings": [
{"parameterName": "MetricsType", "parameterValue": "metrics/openmetrics"},
{"parameterName": "CommunicationParameters", "parameterValue": "enable_http"}
]
}' \
--region $AWS_DEFAULT_REGION
我们应该会看到如下输出:

status: CREATING 确认集群正在配置中。
以下是每个参数的作用:
--cluster-name —— 集群的名称。必须为 3-40 个字符,以字母开头,且仅包含字母、数字和连字符。--scheduler —— 作业调度器类型和版本。PCS 目前支持 Slurm。--size —— 确定计算节点和作业的最大数量。SMALL 最多支持 32 个节点和 256 个作业。对于更大的工作负载,请使用 MEDIUM(512 个节点)或 LARGE(2048 个节点)。--networking —— 集群控制器网络接口的子网和安全组。PCS 在此子网中创建一个 ENI 来与我们的计算节点通信。目前支持 1 个子网。--slurm-configuration —— 嵌套的 Slurm 控制器配置。此处设置了两个字段:
accounting —— 启用托管的 Slurm accounting,数据保留期为 30 天。PCS 创建并管理 accounting 数据库,因此我们不需要单独的 Slurmdbd 服务器。这让我们可以使用 sacct 查询作业历史,并使用 sacctmgr 管理用户账户。slurmCustomSettings —— 透传的 Slurm 控制器配置。MetricsType=metrics/openmetrics 和 CommunicationParameters=enable_http 在 TCP 6817 上开启 Slurm 的 OpenMetrics HTTP 端点注意PCS 在 AWS 托管的账户中创建集群controller,而不是在我们的账户中。controller通过它在指定子网中创建的 ENI 与我们 VPC 中的计算节点通信。
上面的操作也可以通过在控制台完成:

集群创建需要几分钟到十几分钟。检查状态:
aws pcs get-cluster \
--cluster-identifier hpc-cluster \
--query "cluster.{Name:name,Status:status,Id:id}" \
--output table

我们应该会看到 Status: CREATING。轮询直到它变为 ACTIVE:
watch -n 10 "aws pcs get-cluster \
--cluster-identifier hpc-cluster \
--query 'cluster.status' \
--output text"
一旦状态显示 ACTIVE,按 Ctrl+C。
每个区域每个账户只能有 1 个处于 CREATING 状态的集群。如果我们收到 ServiceQuotaExceededException,请先等待任何其他集群创建完成。

集群变为活动状态后,检查完整详细信息:
aws pcs get-cluster \
--cluster-identifier hpc-cluster \
--output yaml
注意 id 字段 —— 在后续命令中,我们将使用集群名称(hpc-cluster)作为 --cluster-identifier。
输出类似于:
cluster:
arn: arn:aws:pcs:us-east-2:482528704118:cluster/pcs_e6l6a4pxms
createdAt: '2026-08-03T05:43:40+00:00'
endpoints:
- port: '6817'
privateIpAddress: 10.3.157.12
type: SLURMCTLD
- port: '6819'
privateIpAddress: 10.3.157.12
type: SLURMDBD
id: pcs_e6l6a4pxms
modifiedAt: '2026-08-03T05:43:40+00:00'
name: hpc-cluster
networking:
securityGroupIds:
- sg-0d5385da135efd836
subnetIds:
- subnet-0a6cb8d0096af78a3
scheduler:
type: SLURM
version: '25.11'
size: SMALL
slurmConfiguration:
accounting:
defaultPurgeTimeInDays: 30
mode: STANDARD
authKey:
secretArn: arn:aws:secretsmanager:us-east-2:482528704118:secret:pcs!slurm-secret-pcs_e6l6a4pxms-K50KoH
secretVersion: 84832240-eea2-4d35-a05b-f037035e7fbc
scaleDownIdleTimeInSeconds: 600
slurmCustomSettings:
- parameterName: MetricsType
parameterValue: metrics/openmetrics
- parameterName: CommunicationParameters
parameterValue: enable_http
slurmRest:
mode: NONE
status: ACTIVE
同时注意 endpoints 部分 —— 它显示了计算节点将连接到的 Slurm 控制器端点(slurmctld)。
export CLUSTER_ID=$(aws pcs get-cluster \
--cluster-identifier hpc-cluster \
--query "cluster.id" \
--output text)
echo "Cluster ID: $CLUSTER_ID"
我们已经创建了一个带有 Slurm 控制器的 PCS 集群。该集群目前还没有计算节点 —— 我们将在接下来添加它们。