Slurm作业调度系统简单使用
国内多数超算中心使用的调度系统均为Slurm,现将Slurm的简单使用方法记录于此:
作业提交方式
1 | sbatch sub.sh |
sub.sh 脚本的内容如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#!/bin/bash
#SBATCH -J jobName # 作业名称
#SBATCH -p pName # 队列名称
##SBATCH --exclude=node1,node2 # 不要把作业分配到节点node1和node2
##SBATCH --nodelist=node3,node4 # 把作业分配到节点node3和node4,多个节点之间使用逗号分隔
##SBATCH --priority=1000 # 设定作业的优先级
#SBATCH -N 1 # 请求的节点数
#SBATCH --cpus-per-task=1 # 请求的cpu数
#SBATCH --gres=gpu:1 # 请求的gpu数
#SBATCH --error=out-%J.txt # STDERR的输出位置
#SBATCH --output=out-%J.txt # STDOUT的输出位置
#SBATCH --no-requeue # 出错之后不再重新计算
# 作业监控
STATE_FILE="state_${SLURM_JOB_ID}"
/usr/bin/touch ${STATE_FILE}
hostname > ${STATE_FILE}
function gcpus_collection(){
while [[ `cat "${STATE_FILE}" | grep "over" | wc -l` == "0" ]]; do
/usr/bin/sleep 60
nvidia-smi >> "gpu_${SLURM_JOB_ID}.log"
/usr/bin/top -bn 1 -i -u $USER >> "cpu_${SLURM_JOB_ID}.log"
done
}
gcpus_collection &
echo "Hello world!"
echo "over" >> "${STATE_FILE}"
作业管理
1 | sancel jobid # 取消作业 |
References: