<>常用术语
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