Slurm Accounting

Slurm Accounting

Slurm Accounting 指的是记录每个作业用了谁的账号、跑了多久、用了多少 CPU/GPU/内存,存到数据库(slurmdbd)里,用于统计、配额和计费

如果没有Accounting功能,Slurm 会在作业完成后立即遗忘它们。我们可以使用 squeue 查看正在运行的作业,但一旦作业完成,它就消失了。Accounting功能将作业记录存储在数据库中,因此我们可以:

  • 使用 sacct 查询历史作业数据
  • 创建账户并关联用户以进行组织跟踪
  • 强制执行每个用户或账户的资源限制
  • 启用公平共享调度,这样重度用户不会让其他人陷入资源匮乏

验证Accounting功能是否已启用

Accounting功能在创建集群时已启用。验证它:

aws pcs get-cluster \
  --cluster-identifier hpc-cluster \
  --query "cluster.slurmConfiguration.accounting" \
  --output yaml \
  --region us-east-2

我们应该会看到:

defaultPurgeTimeInDays: 30
mode: STANDARD

设置Accounting结构

通过 SSM 进入login节点。Slurm accounting将用户组织到account(如部门或项目)中:

sudo su -

创建一个account并关联用户。在 Slurm accounting中,“account"是一个组织单元(如部门或项目)——而不是 AWS 账户。用户与account关联,这样他们的作业使用情况就可以被跟踪,并且可以按组强制执行限制:

# 创建一个项目账户——这是一个 Slurm 组织单元,而不是 AWS 账户
sacctmgr add account workshop Description="PCS Workshop" Organization="AWS" -i

image-20260803203557160

# 将 LDAP 用户与账户关联——他们提交的作业将被跟踪在 "workshop" 下
sacctmgr add user user1 Account=workshop -i
sacctmgr add user user2 Account=workshop -i

# 验证账户及其关联的用户
sacctmgr show account workshop withassoc format=Account,User,Share

我们应该会看到类似这样的输出:

image-20260803203631398

提交作业以生成account数据

切换到 user1 并提交几个作业,以便有数据可供查询:

su - user1
# 在 x86 上提交一个快速作业
sbatch -p x86 -J accounting-test-1 --wrap="hostname && sleep 30" -o /fsx/acct-test-1.%j.out

等待作业都完成:

watch -n 5 squeue

使用 sacct 查询作业历史

作业完成后,查询accounting数据库:

sacct --format=JobID,JobName,Partition,User,Account,State,Elapsed,ExitCode -S today

我们应该会看到类似这样的输出:

image-20260803203943353

每个作业有三个条目:主作业、一个 .batch 步骤(脚本执行)和一个 .extern 步骤(外部进程)。Account 列显示 workshop——确认用户-account关联正在工作。

要查看特定作业的更多详细信息:

sacct --format=JobID,JobName,Partition,User,Account,State,Elapsed,ExitCode -S today

Slurm accounting支持强制执行选项,这些选项控制作业提交规则的应用严格程度。我们可以在启用accounting时设置这些选项:

  • associations — 作业必须从有效的用户-account关联中提交
  • limits — 强制执行每个用户/account的资源限制
  • QoS — 强制执行服务质量要求
  • safe — 只有当作业能在其限制内完成时才会被调度

在生产环境中,我们通常会启用 associationslimits 以防止用户消耗超过其份额的资源。

Slurm 还提供 sreport 用于聚合利用率报告(按用户、按账户、集群利用率的使用情况)。这些报告由定期的汇总过程填充,可能需要长达一个小时才能反映最近的作业数据。