SLURM
简单来说,SLURM的工作流程就是:用户明确表达计算需求(需要多少资源,要运行什么程序),SLURM负责在合适的时机将可用的资源分配给它。
- 用户编写作业脚本,在脚本中通过特定参数声明所需的资源(如几个节点、多少个CPU核心、多少内存、是否需要GPU等)。
- 使用
sbatch命令提交脚本。SLURM会将作业放入相应分区的等待队列中 - 调度器会根据优先级策略(如先到先得、用户优先级、作业大小等)检查队列。当有节点资源满足作业需求时,调度器便会为该作业分配节点。
- 在分配的节点上启动任务执行。执行过程中的输出通常会被重定向到日志文件中
- 任务完成后,SLURM会释放资源,并将结果返回给用户
🖥️ SLURM 基本使用方式
SLURM主要提供了三种作业提交方式,以适应不同的使用场景
|
提交方式 |
核心命令 |
适用场景 |
特点 |
|---|---|---|---|
|
交互式作业 |
|
短时间测试、代码调试、需要实时交互 |
命令会阻塞终端,直到作业完成。如果终端断开,作业可能中断 |
|
批处理作业 |
|
最常用于长时间运行的计算任务 |
提交后立即返回终端,作业在后台运行,不受网络连接断开影响 |
|
资源分配 |
|
先申请一个计算资源“沙箱”,然后在其中交互式运行命令 |
适用于需要交互式并行作业的场景,是先分配资源再执行命令的模式 |
批处理作业脚本示例
最常用的方式是编写一个批处理脚本,然后通过 sbatch提交。下面是一个典型的脚本示例
#!/bin/bash # 作业名称 #SBATCH --job-name=my_test_job # 指定分区(队列) #SBATCH --partition=cpu # 申请1个计算节点 #SBATCH --nodes=1 # 总共需要8个任务(通常可理解为进程数) #SBATCH --ntasks=8 # 每个任务需要的CPU核心数 #SBATCH --cpus-per-task=1 # 作业最大运行时间(小时:分钟:秒) #SBATCH --time=01:00:00 # 标准输出文件(%j会被替换为作业ID) #SBATCH --output=%j.out # 标准错误输出文件 #SBATCH --error=%j.err # 申请GPU资源(如需要): 例如申请2块GPU卡 #SBATCH --gres=gpu:2 # 加载必要的软件环境模块(根据集群配置) module load python/3.8 module load cuda/11.0 # 进入作业提交时的目录 cd $SLURM_SUBMIT_DIR # 执行计算命令(使用 srun 启动并行任务) echo "开始计算任务..." srun python my_simulation.py echo "任务完成!"
将此脚本保存为 myjob.slurm后,使用以下命令提交:
sbatch myjob.slurm
📟 SLURM 常用操作命令
掌握以下命令,你就能熟练地使用SLURM集群了
|
命令 |
功能描述 |
常用选项/示例 |
|---|---|---|
|
|
查看集群分区和节点的状态,了解有哪些资源可用 |
|
|
|
查看作业队列的状态,查看自己的或所有作业的排队/运行情况 |
squeue -l:显示更详细的信息 |
|
|
取消已提交的作业(无论是排队中还是运行中) |
scancel -u <用户名>:取消指定用户的所有作业 |
|
|
强大的管理工具,用于查看和修改作业、节点等详细信息 |
|
|
|
查看已完成作业的会计信息(如运行时间、结束状态、资源消耗等),用于事后分析 |
sacct -j <作业ID> --format=JobID,JobName,State,Elapsed,MaxRSS:查看特定作业的详细资源使用情况 |
|
|
交互式运行并行任务 |
|
如何将新节点加入SLURM集群中?
🔧 添加新节点的核心步骤
将一个全新的节点加入集群,主要涉及以下几个环环相扣的步骤:
- 新节点系统准备
- 主机名与网络:确保新节点可以与集群中的主节点(ControlMachine)以及其他计算节点正常通信。需要在所有节点的
/etc/hosts文件中正确配置新节点的主机名和IP地址,或者确保DNS可以正确解析- SSH互信:配置主节点到新节点的SSH免密登录,这是后续自动化部署和通信的基础
- 时间同步:确保所有节点的时间一致,通常使用NTP(网络时间协议)服务进行同步
- 共享存储:如果集群使用了NFS等共享存储,需要将新节点正确挂载共享目录(如
/home),以确保用户数据和软件环境的一致性- 安装必要软件
- Slurm组件:在新节点上安装
slurmd软件包。在某些系统上,这个包可能叫slurm-slurmd或slurm-llnl- 认证服务:安装并配置 Munge 认证服务。关键在于,新节点上的
/etc/munge/munge.key文件必须与主节点及其他所有节点完全一致。通常先在主节点生成密钥,然后将其安全地复制到新节点上- 修改SLURM主配置
- 在主节点上,编辑 SLURM 的核心配置文件
/etc/slurm/slurm.conf- 在
NodeName参数中添加新节点的定义。您可以直接添加一行,或者修改现有的节点范围。例如,如果原有配置为NodeName=node[1-2],新增节点node3后可以修改为NodeName=node[1-3]- 同时,需要更新
PartitionName配置,将新节点加入到相应的分区(Partition)中- 同步配置并启动服务
- 将更新后的
slurm.conf文件从主节点同步到所有计算节点(包括新节点)的相同路径下,确保整个集群的配置完全一致- 在新节点上启动
slurmd服务,并设置为开机自启
sudo systemctl enable slurmd --now- 在主节点上,让
slurmctld守护进程重新读取配置文件(通常使用scontrol reconfigure命令或在某些情况下重启服务)以识别新节点- 验证节点状态
- 使用
sinfo或scontrol show nodes命令查看节点状态。如果一切正常,新节点的状态(STATE)应显示为idle(空闲),表示它已准备就绪,可以接收作业了
⚠️ 重要注意事项与故障排查
配置一致性:确保
slurm.conf在所有节点上完全一致,这是避免各种奇怪问题的关键防火墙:检查新节点的防火墙设置,确保开放 SLURM 守护进程所需的端口(默认为
6817-6818)节点状态异常:如果新节点状态为
down,请检查:
slurmd服务在新节点上是否正常运行:systemctl status slurmd- 网络连通性和 Munge 密钥是否正确
使用
journalctl -u slurmd查看日志以获取详细错误信息资源定义:在
slurm.conf中定义节点时,请准确设置CPUs(逻辑处理器数量)、RealMemory(实际内存大小,单位MB)等参数,以确保调度器能正确分配资源。如果注册的节点资源少于配置,该节点将被标记为DOWN状态
posted on 2025-10-14 17:10 Karlkiller 阅读(92) 评论(0) 收藏 举报
浙公网安备 33010602011771号