Slurm Accounting 指的是记录每个作业用了谁的账号、跑了多久、用了多少 CPU/GPU/内存,存到数据库(slurmdbd)里,用于统计、配额和计费
如果没有Accounting功能,Slurm 会在作业完成后立即遗忘它们。我们可以使用 squeue 查看正在运行的作业,但一旦作业完成,它就消失了。Accounting功能将作业记录存储在数据库中,因此我们可以:
sacct 查询历史作业数据Accounting功能在创建集群时已启用。验证它:
aws pcs get-cluster \
--cluster-identifier hpc-cluster \
--query "cluster.slurmConfiguration.accounting" \
--output yaml \
--region us-east-2
我们应该会看到:
defaultPurgeTimeInDays: 30
mode: STANDARD
通过 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

# 将 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
我们应该会看到类似这样的输出:

切换到 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
作业完成后,查询accounting数据库:
sacct --format=JobID,JobName,Partition,User,Account,State,Elapsed,ExitCode -S today
我们应该会看到类似这样的输出:

每个作业有三个条目:主作业、一个 .batch 步骤(脚本执行)和一个 .extern 步骤(外部进程)。Account 列显示 workshop——确认用户-account关联正在工作。
要查看特定作业的更多详细信息:
sacct --format=JobID,JobName,Partition,User,Account,State,Elapsed,ExitCode -S today
Slurm accounting支持强制执行选项,这些选项控制作业提交规则的应用严格程度。我们可以在启用accounting时设置这些选项:
在生产环境中,我们通常会启用 associations 和 limits 以防止用户消耗超过其份额的资源。
Slurm 还提供 sreport 用于聚合利用率报告(按用户、按账户、集群利用率的使用情况)。这些报告由定期的汇总过程填充,可能需要长达一个小时才能反映最近的作业数据。