slurm作业提交系统常用命令

常用术语

user:用户名
node:计算节点
core:cpu 核
job:作业
job step:作业步,单个作业可以有多个作业步
partition:分区,作业需在特定分区中运行
QOS:服务质量,可理解为用户可使用的 CPU、内存等资源限制
tasks:任务数,默认一个任务使用一个 cpu 核,可理解为作业所需的 cpu 核数
socket:cpu 插槽,可理解为物理 cpu 颗数
stdout:标准输出文件,程序运行正常时输出信息的文件,一般指输出到屏幕的信息
stderr:标准错误文件,程序运行出错时输出信息的文件,一般指输出到屏幕的信息

基本命令:

sacct: 显示激活的或已完成作业或作业步的记账信息。

salloc:为需实时处理的作业分配资源,典型场景为分配资源并启动一个shell,然 后用此shell执行srun命令去执行并行任务。

sbatch:提交作业脚本使其运行。此脚本一般也可含有一个或多个srun命令启动并行任务。

scancel:取消排队或运行中的作业或作业步。

scontrol:显示或设定Slurm作业、队列、节点等状态。

sinfo:显示队列或节点状态。

squeue:显示队列中的作业及作业步状态。

srun:实时交互式运行并行作业,一般用于段时间测试,或者与sallcoc及sbatch结合。

Slurm 提交作业有 3 种模式,分别为交互模式,批处理模式,分配模式,这三种方式只是用户使用方式的区别,在管理,调度,记账时同等对待。

交互模式

命令 srun

简介:交互式作业提交,提交命令后,等待作业执行完成之后返回命令行窗口。

例1:

srun hostname

例2:
slurm最基本的命令是srun,比如上面一行是指定-p分区,-w节点名称运行一个run.py的文件,当然还有更高级的,指定gpu的数量和指定进程的数量。
–gres=gpu:8表示每个节点上用几个gpu,-n表示有多少个进程,一般多线程的时候,用到多卡的时候会这么操作

srun -p compute -w c1  python3 /software/pipeline/test/test.py
srun -p control -w m1  python3 /software/pipeline/test/test.py

命令 sbatch

简介:
批处理作业是指用户编写作业脚本,指定资源需求约束,提交后台执行作业。提交批处理作业的命令为 sbatch,用户提交命令即返回命令行窗口,但此时作业在进入调度状态,在资源满足要求时,分配完计算结点之后,系统将在所分配的第一个计算结点(而不是登录结点)上加载执行用户的作业脚本。批处理作业的脚本为一个文本文件,脚本第一行以 “#!” 字符开头,并制定脚本文件的解释程序,如 sh,bash。由于计算节点为精简环境,只提供 sh 和 bash 的默认支持。

计算开始后,工作目录中会生成以 slurm 开头的.out 文件为输出文件。

作业脚本为文本文件,首行一 “#!” 开头,指定解释程序
脚本中可通过 srun 加载计算任务
一个作业可包含多个作业步
脚本在管理节点上提交,实际在计算节点上执行
脚本输出写到输出文件中

以下是一些常见的作业资源需求参数,使用#SBATCH -xx xxx 的方式写入脚本中即可:

-J,--job-name:指定作业名称
-N,--nodes:节点数量
-n,--ntasks:使用的CPU核数
--mem:指定每个节点上使用的物理内存
-t,--time:运行时间,超出时间限制的作业将被终止
-p,--partition:指定分区
--reservation:资源预留
-w,--nodelist:指定节点运行作业
-x,--exclude:分配给作业的节点中不要包含指定节点
--ntasks-per-node:指定每个节点使用几个CPU核心
--begin:指定作业开始时间
-D--chdir:指定脚本/命令的工作目录

创建脚本 array.slurm

#!/bin/bash
#SBATCH -J array
#SBATCH -p compute
#SBATCH -N 1

input=(foo bar baz)
echo "This is job #${SLURM_ARRAY_JOB_ID}, with parameter ${input[$SLURM_ARRAY_TASK_ID]}"
echo "There are ${SLURM_ARRAY_TASK_COUNT} task(s) in the array."
echo "  Max index is ${SLURM_ARRAY_TASK_MAX}"
echo "  Min index is ${SLURM_ARRAY_TASK_MIN}"
sleep 5

作业 ID 是 81,而作业数组 ID 中的每个元素的命名方式为 JOBID_TASKID,非常 容易分辨。
以下是其中某个作业的输出:
slurm-81.out

This is job #, with parameter foo
There are  task(s) in the array.
  Max index is 
  Min index is 

分配模式

命令 salloc

简介:
结点资源抢占命令。该命令支持用户在提交作业前,抢占所需计算资源(此时开始计算所用机时)。

执行分为四步

1.提交资源分配请求,作业排队等待资源分配,作业开始运行,开始计费;

2.执行用户指定的命令;

3.命令执行结束;

4.退出作业释放资源,作业停止运行,停止计费。

向集群提交作业并检查队列状态:

squeue

终止一个作业步骤:

scancel 命令与这个作业 ID 来终止该作业步骤

查看gpu使用情况:

swatch +节点名称+nv

查看cpu:

swatch+节点名称+top

查看内存:

swatch+节点名称+free

修改节点状态:

scontrol update NodeName=m1 State=idle

你可能感兴趣的:(分布式架构,slurm)