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