slurm.conf
建议修正当前slurm.conf
的一些和常规用法差别较大的配置,建议逐步尝试把这些用法修正。这些配置修改对SLURM用法没有影响,可以在线进行。若发生异常,还原slurm.conf
配置,重启slurm服务即可。
将当前的节点列表改写成比较简介的形式,原内容如下:
#airesearch machines
# 4 GPU Nodes
NodeName=gqxx-01-00[1-9] Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=257424 Gres=gpu:4
NodeName=gqxx-01-0[10-55] Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=257424 Gres=gpu:4
#3 GPU node
NodeName=gqxx-01-0[56-60] Sockets=2 CoresPerSocket=7 ThreadsPerCore=2 RealMemory=257000 Gres=gpu:3
#big memory node
NodeName=cqxx-01-001 Sockets=2 CoresPerSocket=13 ThreadsPerCore=1 RealMemory=515578
#5cpu node
NodeName=cqxx-01-00[2-6] Sockets=2 CoresPerSocket=13 ThreadsPerCore=1 RealMemory=128000
#4 GPU node
NodeName=gqxx-01-0[61-63] Weight=1 Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=254000 Gres=gpu:4
#aispeech machines
NodeName=gqxx-00-00[1-6] Sockets=2 CoresPerSocket=9 ThreadsPerCore=2 RealMemory=254000 Gres=gpu:4
NodeName=cgqxx-00-00[1-2] Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=510000 Gres=gpu:1
NodeName=cqxx-00-001 Sockets=2 CoresPerSocket=11 ThreadsPerCore=2 RealMemory=510000
新内容如下:
#airesearch machines
# 4 GPU Nodes
NodeName=gqxx-01-[001-055] Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=257424 Gres=gpu:4
#3 GPU node
NodeName=gqxx-01-[056-060] Sockets=2 CoresPerSocket=7 ThreadsPerCore=2 RealMemory=257000 Gres=gpu:3
#4 GPU node
NodeName=gqxx-01-[061-063] Weight=1 Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=254000 Gres=gpu:4
#big memory node
NodeName=cqxx-01-001 Sockets=2 CoresPerSocket=13 ThreadsPerCore=1 RealMemory=515578
#5cpu node
NodeName=cqxx-01-[002-006] Sockets=2 CoresPerSocket=13 ThreadsPerCore=1 RealMemory=128000
#aispeech machines
NodeName=gqxx-00-[001-006] Sockets=2 CoresPerSocket=9 ThreadsPerCore=2 RealMemory=254000 Gres=gpu:4
NodeName=cgqxx-00-[001-002] Sockets=2 CoresPerSocket=13 ThreadsPerCore=2 RealMemory=510000 Gres=gpu:1
NodeName=cqxx-00-001 Sockets=2 CoresPerSocket=11 ThreadsPerCore=2 RealMemory=510000
建议关闭处理器超线程能力,在计算密集而非I/O密集的应用中,开启HyperThreading很有可能会降低服务器的整体性能。直观上,开启超线程以后每核心可以使用的物理内存减少了。
PrivateData
选项可以制定那些信息是隐私的,除了用户自己以及root能够查看,可选项包括:accounts(账户)、jobs(作业)、nodes(节点)、partitions(计算队列状态)、reservations(预约资源状态)、usage(计费信息)。例如,将jobs设置为隐私:
PrivateData=jobs
以 cqxx-00-001 节点为例,建议如实填写每Socket有12个核心,每核心1个线程(关闭超线程以后)。如下所示:
NodeName=cqxx-00-001 Sockets=2 CoresPerSocket=12 ThreadsPerCore=1 RealMemory=510000
HPC环境中的作业进程/线程数和物理核心数长期是持平的,也没有出现“卡死”的状态,操作系统所需的CPU时钟周期很少,不需要单独的CPU核心。
使用CR_CPU
作为SelectTypeParameters
值将忽略作业中的内存预约请求,将优先把一个服务器的CPU核心填满再分配新的计算节点。应该也能解决之前“作业启动后,所需内存为256GB导致不能加载新作业”的故障。在Pi集群上,运行中的作业使用scontrol查看,其内存请求值为0。
SelectTypeParameters=CR_CPU
建议按照节点硬件配置,将集群划分为cpu(纯cpu)、gpu、fat(大内存节点)队列。测试期间,建议分配少量节点到这些新建队列,随着QoS建立完毕以及用户习惯改过来以后再把全部资源挪到这些队列下。。
在SLURM主控节点备份/etc/slurm/slurm.conf
配置文件后,添加如下队列:
PartitionName=cpu Nodes=cqxx-01-[002-006] MaxTime=31-00:00:00 State=UP
PartitionName=gpu Nodes=gqxx-01-[001-004] MaxTime=31-00:00:00 State=UP
PartitionName=fat Nodes=cqxx-01-001 MaxTime=31-00:00:00 State=UP
重启slurm服务后,尝试用普通用户向队列提交作业。添加cpu、gpu、fat新队列不会改变当前用户使用习惯。
$ srun -n 1 -p cpu hostname
- 在SLURM主控节点备份SLURM配置文件:
# cp slurm.conf slurm.conf.bak
- 导出原有SLURM QoS配置(只需要做一次):
# sacct dump slurm_cluster > slurm_cluster.conf
- 为 slurm_clustre.conf 添加QoS规则,下面是一个片段。需要注意的是,要为所有用户添加QoS。
应用 slurm_cluster.conf 配置。