以下是关于Slurm作业调度工作流程及slurm.conf配置文件参数的详细说明:
一、Slurm作业调度工作流程
Slurm的作业调度流程可以分为以下几个核心阶段:
1. 作业提交(Submission)
- 用户通过命令行工具(如
sbatch、srun)提交作业。 sbatch提交脚本示例:sbatch -N 2 --ntasks-per-node=4 -p debug job.sh- Slurm将作业信息写入队列,等待调度。
2. 资源分配(Resource Allocation)
- 调度器(slurmctld)根据当前资源状态和调度策略(如
backfill、fairshare)分配资源。 - 调度器检查
slurm.conf中定义的节点和分区是否满足作业需求(如CPU、内存、GPU)。
3. 任务分发(Task Launch)
- 资源分配完成后,调度器通知计算节点的
slurmd启动任务。 srun命令直接启动并行任务(如MPI作业):srun -N 2 -n 8 ./mpi_program
4. 任务执行与监控(Execution & Monitoring)
- 计算节点的
slurmd监控任务状态,定期向调度器上报资源使用情况。 - 用户可通过
squeue、sacct查看作业状态。
5. 作业完成与资源释放(Completion)
- 作业结束后,资源自动释放,调度器更新可用资源池。
- 作业日志默认输出到
slurm-<jobid>.out。
二、slurm.conf配置文件参数详解
slurm.conf是Slurm的核心配置文件,定义了集群资源、调度策略和通信设置。以下是关键参数分类说明:
1. 基础配置
| 参数 | 说明 | 示例 |
|---|---|---|
ControlMachine |
主控节点(运行slurmctld的主机名) |
ControlMachine=master |
ClusterName |
集群名称(多集群管理时需唯一) | ClusterName=hpc_cluster |
SlurmctldPort |
slurmctld服务监听端口 |
SlurmctldPort=6817 |
SlurmdPort |
slurmd服务监听端口 |
SlurmdPort=6818 |
AuthType |
节点间认证方式(常用auth/munge) |
AuthType=auth/munge |
2. 节点与分区配置
| 参数 | 说明 | 示例 |
|---|---|---|
NodeName |
定义计算节点名称及资源 | NodeName=node[1-10] CPUs=48 Sockets=2 CoresPerSocket=12 ThreadsPerCore=2 |
PartitionName |
定义资源分区(队列) | PartitionName=debug Nodes=node[1-5] Default=YES MaxTime=24:00:00 |
DefMemPerNode |
每个节点的默认内存(MB) | DefMemPerNode=65536 |
Gres |
定义异构资源(如GPU、FPGA) | Gres=gpu:a100:2(2块A100 GPU) |
3. 调度策略
| 参数 | 说明 | 示例 |
|---|---|---|
SchedulerType |
调度器类型(如backfill支持作业回填) |
SchedulerType=sched/backfill |
PriorityType |
作业优先级策略(如priority/multifactor) |
PriorityType=priority/multifactor |
PreemptType |
抢占策略(需启用优先级) | PreemptType=preempt/qos |
Slurm 调度器支持多种调度策略,包括但不限于:
• Fair Share: 根据用户或账户的使用历史分配资源。
• Backfill: 允许较小的作业在大作业等待资源时使用空闲资源。
• Priority: 根据作业的优先级分配资源。
• Multifactor: 结合多种策略,如公平份额和优先级。
4. 高级资源管理
| 参数 | 说明 | 示例 |
|---|---|---|
SelectType |
资源选择插件(如select/linear按顺序分配节点) |
SelectType=select/cons_res |
SelectTypeParameters |
资源选择参数 | SelectTypeParameters=CR_CPU(按CPU分配) |
AccountingStorageType |
作业记账存储方式(需slurmdbd) |
AccountingStorageType=accounting_storage/slurmdbd |
5. 高可用性(HA)
| 参数 | 说明 | 示例 |
|---|---|---|
SlurmctldHost |
主备调度节点(HA模式) | SlurmctldHost=master,backup |
SlurmctldTimeout |
主节点故障检测超时(秒) | SlurmctldTimeout=30 |
三、slurm.conf配置示例
# 基础配置
ControlMachine=master
ClusterName=my_cluster
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge
# 节点定义
NodeName=node[1-10] CPUs=48 Sockets=2 CoresPerSocket=12 ThreadsPerCore=2 State=UNKNOWN
NodeName=gpu[1-2] CPUs=32 Gres=gpu:a100:2
# 分区定义
PartitionName=cpu Nodes=node[1-10] Default=YES MaxTime=24:00:00
PartitionName=gpu Nodes=gpu[1-2] MaxTime=12:00:00
# 调度策略
SchedulerType=sched/backfill
PreemptType=preempt/qos
PriorityType=priority/multifactor
# 记账与高级配置
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=db-server
四、注意事项
- 配置文件一致性:所有节点的
slurm.conf必须完全一致,否则节点无法加入集群。 - 服务重启:修改配置后需重启服务:
systemctl restart slurmctld slurmd - 语法检查:使用
slurmctld -C验证配置文件:slurmctld -C - 日志路径:调试时查看日志:
- 调度节点日志:
/var/log/slurmctld.log - 计算节点日志:
/var/log/slurmd.log
- 调度节点日志:
通过合理配置slurm.conf,可以实现从简单作业调度到复杂多租户资源管理的需求。建议结合slurm.conf手册(man slurm.conf)和实际集群需求调整参数。
浙公网安备 33010602011771号