Slurm简介¶
Slurm(Simple Linux Utility for Resource Management,http://slurm.schedmd.com/)是 开源的、具有容错性和高度可扩展大型和小型Linux集群资源管理和作业调度系统。超 级计算系统可利用Slurm进行资源和作业管理,以避免相互干扰,提高运行效率。所有 需运行的作业无论是用于程序调试还是业务计算均必须通过交互式并行srun、批处理 式sbatch或分配式salloc等命令提交,提交后可以利用相关命令查询作业状态等。请不 要在登录节点直接运行作业(编译除外),以免影响其余用户的正常使用。
1.1**三种模式区别**
• 批处理作业(采用sbatch命令提交,最常用方式): 对于批处理作业(提交后立即返回该命令行终端,用户可进行其它操作)使 用sbatch命令提交作业脚本,作业被调度运行后,在所分配的首个节点上执行作 业脚本。在作业脚本中也可使用srun命令加载作业任务。提交时采用的命令行终 端终止,也不影响作业运行。
• 交互式作业提交(采用srun命令提交): 资源分配与任务加载两步均通过srun命令进行:当在登录shell中执行srun命令时,
srun首先向系统提交作业请求并等待资源分配,然后在所分配的节点上加载作业 任务。采用该模式,用户在该终端需等待任务结束才能继续其它操作,在作业结 束前,如果提交时的命令行终端断开,则任务终止。一般用于短时间小作业测试。
• 实时分配模式作业(采用salloc命令提交): 分配作业模式类似于交互式作业模式和批处理作业模式的融合。用户需指定所需 要的资源条件,向资源管理器提出作业的资源分配请求。提交后,作业处于排队, 当用户请求资源被满足时,将在用户提交作业的节点上执行用户所指定的命令, 指定的命令执行结束后,运行结束,用户申请的资源被释放。在作业结束前,如 果提交时的命令行终端断开,则任务终止。典型用途是分配资源并启动一个shell, 然后在这个shell中利用srun运行并行作业。
salloc后面如果没有跟定相应的脚本或可执行文件,则默认选择/bin/sh,用户获得 了一个合适环境变量的shell环境。
salloc和sbatch最主要的区别是salloc命令资源请求被满足时,直接在提交作业的 节点执行相应任务,而sbatch则当资源请求被满足时,在分配的第一个节点上执 行相应任务。
salloc在分配资源后,再执行相应的任务,很适合需要指定运行节点和其它资源 限制,并有特定命令的作业。
1.2**基本用户命令**
• sacct:显示激活的或已完成作业或作业步的记账(对应需缴纳的机时费)信息。
• salloc:为需实时处理的作业分配资源,典型场景为分配资源并启动一个shell,然 后用此shell执行srun命令去执行并行任务。
• sattach:吸附到运行中的作业步的标准输入、输出及出错,通过吸附,使得有能 力监控运行中的作业步的IO等。
• sbatch:提交作业脚本使其运行。此脚本一般也可含有一个或多个srun命令启动 并行任务。
• sbcast:将本地存储中的文件传递分配给作业的节点上,比如/tmp等本地目录;对 于/home等共享目录,因各节点已经是同样文件,无需使用。
• scancel:取消排队或运行中的作业或作业步,还可用于发送任意信号到运行中的 作业或作业步中的所有进程。
• scontrol:显示或设定Slurm作业、队列、节点等状态。
• sinfo:显示队列或节点状态,具有非常多过滤、排序和格式化等选项。
• speek:查看作业屏幕输出。注:该命令是本人写的,不是slurm官方命令,在其它 系统上不一定有。
• squeue:显示队列中的作业及作业步状态,含非常多过滤、排序和格式化等选项。
• srun:实时交互式运行并行作业,一般用于段时间测试,或者与sallcoc及sbatch结合。
1.3**基本术语**
• socket:CPU插槽,可以简单理解为CPU。
• core:CPU核,单颗CPU可以具有多颗CPU核。
• job:作业。
• job step:作业步,单个作业(job)可以有个多作业步。
• tasks:任务数,单个作业或作业步可有多个任务,一般一个任务需一个CPU核, 可理解为所需的CPU核数。
• rank:秩,如MPI进程号。
• partition:队列、分区。作业需在特定队列中运行,一般不同队列允许的资源不一 样,比如单作业核数等。
• stdin:标准输入文件,一般指可以通过屏幕输入或采用<文件名方式传递给程序 的文件,对应C程序中的文件描述符0。
• stdout:标准输出文件,程序运行正常时输出信息到的文件,一般指输出到屏幕 的,并可采用>文件名定向到的文件,对应C程序中的文件描述符1。
• stderr:标准出错文件,程序运行出错时输出信息到的文件,一般指也输出到屏 幕,并可采用2>定向到的文件(注意这里的2),对应C程序中的文件描述符2。
1.4**常用参考**
• 作业提交:
– salloc:为需实时处理的作业分配资源,提交后等获得作业分配的资源后运 行,作业结束后返回命令行终端。
– sbatch:批处理提交,提交后无需等待立即返回命令行终端。
– srun:运行并行作业,等获得作业分配的资源并运行,作业结束后返回命令 行终端。 常用参数:
– begin=:设定作业开始运行时间,如begin=“18:00:00”。
– constraints:设定需要的节点特性。
– cpupertask:需要的CPU核数。
– error=:设定存储出错信息的文件名。
– exclude=:设定不采用(即排除)运行的节点。
– dependency=:设定只有当作业号的作业达到某状态时才运行。
– exclusive[=user|mcs]:设定排它性运行,不允许该节点有它人或某user用户 或mcs的作业同时运行。
– export=:输出环境变量给作业。
– gres=:设定需要的通用资源。
– input=:设定输入文件名。
– jobname=:设定作业名。
– label:设定输出时前面有标记(仅限srun)。
– mem=:设定每个节点需要的内存。
– mempercpu=:设定每个分配的CPU所需的内存。
– N:设定所需要的节点数。
– n:设定启动的任务数。
– nodelist=:设定需要的特定节点名。
– output=:设定存储标准输出信息的文件名。
– partition=:设定采用的队列。
– qos=:设定采用的服务质量(QOS)。
– signal=[B:][@time]:设定当时间到时发送给作业的信号。
– time=:设定作业运行时的墙上时钟限制。
– wrap=:将命令封装在一个简单的sh shell中运行(仅限sbatch)。
• 记账信息:sacct
– endtime=:设定显示的截止时间之前的作业。
– format=:格式化输出。
– name=:设定显示作业名的信息。
– partition=:设定采用队列的作业信息。
– state=:显示特定状态的作业信息。
• 作业管理
– scancel:取消作业
* jobid:设定作业号。
* name=:设定作业名。
* partition=:设定采用队列的作业。
* qos=:设定采用的服务质量(QOS)的作业。
* reservation=:设定采用了预留测略的作业。
* nodelist=:设定采用特定节点名的作业。
– squeue:查看作业信息
* format=:格式化输出。
* jobid:设定作业号。
* name=:设定作业名。
* partition=:设定采用队列的作业。
* qos=:设定采用的服务质量(QOS)的作业。
* start:显示作业开始时间。
* state=:显示特定状态的作业信息。
– scontrol:查看作业、节点和队列等信息
* details:显示更详细信息。
* oneline:所有信息显示在同一行。
* show ENTITY ID:显示特定入口信息,ENTITY可为:job、node、partition等,ID可为作业号、节点名、队列名等。
* update SPECIFICATION:修改特定信息,用户一般只能修改作业的。