以下是关于Slurm作业调度工作流程及slurm.conf配置文件参数的详细说明:


一、Slurm作业调度工作流程

Slurm的作业调度流程可以分为以下几个核心阶段:

1. 作业提交(Submission)

  • 用户通过命令行工具(如sbatchsrun)提交作业。
  • sbatch提交脚本示例:
    sbatch -N 2 --ntasks-per-node=4 -p debug job.sh
    
  • Slurm将作业信息写入队列,等待调度。

2. 资源分配(Resource Allocation)

  • 调度器(slurmctld)根据当前资源状态和调度策略(如backfillfairshare)分配资源。
  • 调度器检查slurm.conf中定义的节点和分区是否满足作业需求(如CPU、内存、GPU)。

3. 任务分发(Task Launch)

  • 资源分配完成后,调度器通知计算节点的slurmd启动任务。
  • srun命令直接启动并行任务(如MPI作业):
    srun -N 2 -n 8 ./mpi_program
    

4. 任务执行与监控(Execution & Monitoring)

  • 计算节点的slurmd监控任务状态,定期向调度器上报资源使用情况。
  • 用户可通过squeuesacct查看作业状态。

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

四、注意事项

  1. 配置文件一致性:所有节点的slurm.conf必须完全一致,否则节点无法加入集群。
  2. 服务重启:修改配置后需重启服务:
    systemctl restart slurmctld slurmd
    
  3. 语法检查:使用slurmctld -C验证配置文件:
    slurmctld -C
    
  4. 日志路径:调试时查看日志:
    • 调度节点日志:/var/log/slurmctld.log
    • 计算节点日志:/var/log/slurmd.log

通过合理配置slurm.conf,可以实现从简单作业调度到复杂多租户资源管理的需求。建议结合slurm.conf手册(man slurm.conf)和实际集群需求调整参数。

posted on 2025-03-29 19:51  LeeHang  阅读(187)  评论(0)    收藏  举报