Slurm:为 GPU 和仅 CPU 的作业提供两个单独的队列

Slurm:为 GPU 和仅 CPU 的作业提供两个单独的队列

目前,我们已经设置了 Slurm 来管理一个由 6 个节点组成的小型集群,每个节点有 4 个 GPU。到目前为止,它运行良好,但现在我们想利用英特尔酷睿 i7-5820KCPU 用于仅需要 CPU 处理能力的作业。每个 CPU 有 6 个内核和 12 个线程,每个 GPU 需要一个线程/逻辑内核,因此剩余 8 个线程(每个节点)可用于“仅需要 CPU”的作业。

当前配置:

猫/etc/slurm-llnl/gres.conf

Name=gpu File=/dev/nvidia0
Name=gpu File=/dev/nvidia1
Name=gpu File=/dev/nvidia2
Name=gpu File=/dev/nvidia3

猫/etc/slurm-llnl/slurm.conf(摘抄)

SchedulerType=sched/builtin
SelectType=select/cons_res
SelectTypeParameters=CR_Core
AccountingStorageType=accounting_storage/none
GresTypes=gpu
MaxTasksPerNode=4

NodeName=node1 CoresPerSocket=4 Procs=8 Sockets=1 ThreadsPerCore=2 Gres=gpu:4 State=UNKNOWN
NodeName=node2 CoresPerSocket=4 Procs=8 Sockets=1 ThreadsPerCore=2 Gres=gpu:4 State=UNKNOWN
NodeName=node3 CoresPerSocket=4 Procs=8 Sockets=1 ThreadsPerCore=2 Gres=gpu:4 State=UNKNOWN
NodeName=node4 CoresPerSocket=4 Procs=8 Sockets=1 ThreadsPerCore=2 Gres=gpu:4 State=UNKNOWN
NodeName=node5 CoresPerSocket=4 Procs=8 Sockets=1 ThreadsPerCore=2 Gres=gpu:4 State=UNKNOWN
NodeName=node6 CoresPerSocket=4 Procs=8 Sockets=1 ThreadsPerCore=2 Gres=gpu:4 State=UNKNOWN

PartitionName=gpu Nodes=node[2-6] Default=NO Shared=NO MaxTime=INFINITE State=UP
PartitionName=short Nodes=node1 Default=YES Shared=NO MaxTime=INFINITE State=UP

我想第一步应该是改为CoresPerSocket=4 Procs=8CoresPerSocket=6 Procs=12因为这将与实际硬件相匹配。

我已经尝试查阅文档,但我仍然不知道该怎么做。我需要修改吗gres.confFile=我应该为 CPU 指定哪个?然后,我想我会添加第三个分区,可能称为cpuonly。但这是否是完成我想要做的事情的正确方法?我想我必须Gres=在以 开头的行中添加一些参数NodeName

答案1

  • 设置两个分区,一个用于 GPU,一个用于 CPU 作业。分别用于MaxCPUsPerNode每个分区。
  • 使用参数设置节点CPUs。所有MaxCPUsPerNode添加的节点应小于或等于此值(可用 CPU/核心/线程)
  • 使用SelectTypeParameters=CR_CPU
  • 使用SchedulerType=sched/backfill

相关内容