文章目录
前言
在高性能计算(HPC)领域,作业调度系统是关键组件之一。IBM的LSF、澳汰尔的PBS Professional,以及开源的Slurm是目前市场上常见的几种作业调度系统。本文将重点介绍开源调度系统Slurm的三种作业提交方式异同及特点,使用举例等。
定义
Slurm(Simple Linux Utility for Resource Management,官方网站:http://slurm.schedmd.com/ )是一款开源的资源管理和作业调度系统,专为Linux超算集群设计。它不仅具有容错能力,还能够高效管理从小型到大型的集群资源。作为超级计算系统的核心组成部分,Slurm的主要功能是对资源进行管理和作业调度,以此确保作业间不会相互干扰,从而提高整体运行效率。在Slurm环境中,所有需要运行的作业——无论是程序调试还是业务计算——都必须通过诸如交互式并行的srun、批处理式的sbatch或分配式的salloc等命令进行提交。作业提交后,用户可以通过相关命令查询作业的状态和其他相关信息。
基本概念
Slurm通过使用分区(partition)的机制来对资源进行有效管理和分类,包括CPU、内存和网络等关键资源。这种机制允许系统将不同需求的作业分配到适合的计算节点上。在使用Slurm时,用户需要通过Slurm命令来指定作业所需的资源,如CPU核数等,并提交到相应的分区。只有当作业申请的资源得到满足,即资源可用且符合分区的配置要求时,作业才会开始运行。此外,作业的运行还受到分区设定、用户账户权限以及服务质量(Quality of Service, QOS)等多种因素的限制。这些限制确保了资源的有效分配和作业的公平调度,从而提高了整体计算资源的利用率和系统的运行效率。
三种作业提交模式
Slurm作业调度系统中主要有三种作业提交模式:批处理作业、交互式作业提交以及分配模式作业。
这些模式适用于不同的作业需求和场景:
1. 批处理作业(采用 sbatch 命令提交)
Slurm 支持利用 sbatch 命令采用批处理方式运行作业,sbatch 命令在脚本正确传递给作业调度系统后立即退出,同时获取到一个作业号。作业等所需资源满足后开始运行。
sbatch 提交一个批处理作业脚本到 Slurm。批处理脚本名可以在命令行上通过传递给 sbatch,如没有指定文件名,则 sbatch 从标准输入中获取脚本内容。
脚本文件基本格式:
这种方式不受本地网络波动影响,提交作业后可以关闭本地电脑。sbatch 命令没有屏幕输出,默认输出日志为提交目录下的 slurm-xxx.out 文件,可以使用tail -f slurm-xxx.out 实时查看日志,其中 xxx 为作业号。
sbatch 命令示例
新建job.sh并写入内容如下
#!/bin/bash
#SBATCH -N 2
#SBATCH -n 4
#SBATCH -c 12
#SBATCH -t 60
run.exe
而后在命令行执行
sbatch job.sh
即可提交作业。
注意: 以#SBATCH开头的行是SLURM约定的作业参数配置行,非#SBATCH开头的常规脚本代码,必须放在#SBATCH开头的行下方,作业脚本才能正常运作,否则会导致设定的参数不被解析等异常情况。
2. 交互式作业提交(采用 srun 命令提交)
- srun命令同时用于资源分配和任务加载。
- 在登录shell中执行srun命令时,该命令首先提交作业请求并等待资源分配。
- 资源分配后,在所分配的节点上加载作业任务。
举例:
srun -p gpu -w g[1100-1101] -N 2 -n 80 -t 20 run.exe
解释:交互式提交 run.exe 程序。如果不关心节点和时间限制,可简写为 srun -p gpu -n 80 run.exe
其中,
-p gpu 指定提交作业到 gpu 队列;
-w g[1100-1101] 指定使用节点 g[1100-1101];
-N 2 指定使用 2 个节点;
-n 40 指定进程数为 40,
-t 20 指定作业运行时间限制为 20 分钟。
srun 的其他选项可通过 srun --help 查看。
3. 分配模式作业(采用 salloc 命令提交)
- 结合了交互式作业和批处理作业模式的特点。
- 用户需指定资源分配需求条件并提交资源管理器的作业资源分配请求。
- 作业排队等待,资源被满足时,在用户提交作业的节点上执行用户指定的命令。
- salloc后如果没有指定脚本或可执行文件,默认使用/bin/sh,提供合适环境变量的shell环境。
- salloc与sbatch的主要区别在于资源请求满足时的作业执行位置。salloc是在提交作业的节点上执行任务,而sbatch则在分配的第一个节点上执行任务。
- salloc适合于需要特定运行节点和其他资源限制,且有特定命令需求的作业。
这三种模式提供了灵活的作业管理和资源分配方式,以满足不同用户和任务的需求。
管理节点部署
- 安装OS,使用准备的系统镜像进行安装
- 配置系统
- SELINUX关闭
- FIRWALLD关闭
- SSH端口优化
- 编写hosts表,配置ip地址
- 配置本地yum源
- 安装docker
- xcat导入
- ntps、dns、http、dhcp、nfs server
- 安装LDAP server、webmin、创建slurm用户
- 导入分发脚本
- 网络配置:ntp、rsyslog自动配置(xcat自带)
- 系统优化、ssh调优、swap调优脚本配置、module安装
- IB网络驱动、GPU显卡自动安装脚本
- ldap server、ldap client自动安装脚本
- 作业调度server、client自动安装脚本
- 文件系统server、client自动安装脚本
- 自动安装intel编译器、iozone、stream、iperf
Slurm常用命令
命令:sinfo 功能介绍:显示系统资源使用情况
sinfo
命令:squeue 功能介绍:显示作业状态
squeue
命令:sbatch 功能介绍:用于交互式作业提交
srun -N 2 -n 80 -p normal run.exe
命令:salloc 功能介绍:用于分配模式作业提交
salloc -p gpu
命令:scancel 功能介绍:用于取消已提交的作业
scancel JOBID
命令:scontrol 功能介绍:用于查询节点信息或正在运行的作业信息
scontrol show job JOBID
命令:sacct 功能介绍:用于查看历史作业信息
sacct -u user1 -S 03/01/17 -E 03/31/17
上述命令例子后续贴图补充。
【星猿杂谈】:在这里我们共同探索科技新趋势,分享积累的点滴,从编程语言到系统架构,从人工智能到高性能计算,我们追求技术的进步,同时珍视分享的力量。欢迎关注我们,在技术的精彩世界中一起遨游,发现更多未知!