华为多瑙作业调度系统简单使用

华为参与建设的超算中心,使用的调度系统通常为其自研的多瑙调度器(Donau),与Slurm的使用相近,现将多瑙调度器的简单使用方法记录于此:

初次使用以及间隔一段时间再次使用的时候,需要先执行dconfig命令,并输入密码,以获取调度器的使用权限。

作业提交方式

1
dsub -s 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
#!/bin/bash
#DSUB -n jobName # 作业名称
#DSUB -A XXXX # 账户
#DSUB -l labelName # 队列名称
#DSUB -N 1 # 请求的节点数
##DSUB -pn gnodexxx # 把作业分配到节点gnodexxx,支持表达式[]和!,[]表示范围,!表示排除。若包含!,则整体必须使用单引号引起来
##DSUB -p 1 # 指定作业的优先级,默认为1,取值范围为1-9999
#DSUB -R "cpu=1;gpu=1" # 请求的资源
#DSUB --job_type cosched # 作业类型
#DSUB -oo ./out-%J.txt # STDOUT的输出位置
#DSUB -eo ./err-%J.txt # STDERR的输出位置

# 作业监控
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
2
3
4
5
6
7
8
9
10
11
12
13
djob                # 查询作业
djob -T jobid # 停止作业
djob -L jobid.0 # 查询作业详细信息(包括已经死掉的作业)
djob -x jobid # 查询作业运行节点
dnode -l labelName # 查询节点状态
djob -W/dnode -W # 用于查看详细信息
dacct # 查看当前用户组织信息,-W参数可显示完整信息,-L参数显示详细信息

alias dj="djob -CO 'JOB_ID JOB_NAME JOB_STATE JOB_CREATE_TIME JOB_START_TIME REQ_CPU REQ_GPU TASK_EXEC_NODES STDERR_REDIRECT_PATH' "
alias dT="djob -T"
alias ds="dsub -s"
alias dn="dnode -l LabelName|grep -v CLOSED|sort -k10 -r"


References: