Duonao
命令行¶
Warning
第一次使用多瑙调度器之前需要执行 dlogin ,输入用户密码后获取用户token。
作业提交¶
dsub
命令行提交作业¶
dsub -n 'jobname' -q 'QueueName' -R 'cpu=4' -o jobname_%J.out sleep 100
脚本提交作业¶
#!/bin/bash
#DSUB -n jobname
#DSUB -R 'cpu=2'
#DSUB -o jobname_%J.out
date
echo "this is script job"
sleep 10
date
提交
# 作业脚本需要有可执行权限
$ chmod +x submit.sh
$ dsub -s submit.sh
如果作业有内存需求,可以申请内存,如 #DSUB -R 'cpu=2:mem=50G'。
指定作业节点范围,#DSUB -nl 'agent-ARM-0[1-9]'。
dsub -w 提交阻塞式作业,提交作业并等待作业结束,用于写分析流程,与 lsf -K 作用相同;
集群有多种硬件资源,arm 节点、x86 节点、ai 节点以及胖节点,不同类型的节点划分到不同的资源池,可以使用 dadmin label show 查看资源池及对应的节点。
$ dadmin label show
NAME TYPE NODES
AI exclusive AI-01
aarch64 shared AI-01,agent-ARM-[01-43],fat-agent-ARM-[01-03]
arm shared agent-ARM-[01-43]
fat_arm exclusive fat-agent-ARM-[01-03]
fat_x86 exclusive fat-agent-X86-[01-03]
x86 shared agent-X86-[01-58]
x86_64 shared agent-X86-[01-58],fat-agent-X86-[01-03]
在 arm 登录节点提交的作业默认提交到 arm 资源池,如果想提交到 x86 资源池,可使用 --label x86 指定提到 x86资源池,同时需要加上 -aa 选项,如下所示。使用其它资源池,指定对应的资源池标签即可。
#!/bin/bash
#DSUB -n x86_job
#DSUB -R 'cpu=2'
#DSUB -aa
#DSUB --label x86
#DSUB -o x86_job_%J.out
date
echo "this is script job"
sleep 10
date
提交作业到 x86 的胖节点的脚本如下。
#!/bin/bash
#DSUB -n fat_job
#DSUB -R 'cpu=2'
#DSUB -aa
#DSUB --label fat_x86
#DSUB -o fat_job_%J.out
date
echo "this is script job"
sleep 10
date
交互作业¶
使用 -I 选项可以提交交互作业
$ dsub -q interactive -I bash
MPI 并行作业¶
以 lammps 为例
#DSUB -n lammps
#DSUB -N 128
#DSUB --mpi hmpi
#DSUB -o lammps_arm_%J.out
module load arm/lammps
# 以下三行打印hostfile文件,用于debug,正常运行可以不需要
echo $CCS_MPI_OPTIONS
hostfile=$(echo $CCS_MPI_OPTIONS| sed s'/-hostfile //g')
cat $hostfile
mpirun $CCS_MPI_OPTIONS -x OMP_NUM_THREADS=1 lmp_mpi -in in.lj
# 3d Lennard-Jones melt
variable x index 4
variable y index 4
variable z index 4
variable xx equal 20*$x
variable yy equal 20*$y
variable zz equal 20*$z
units lj
atom_style atomic
lattice fcc 0.8442
region box block 0 ${xx} 0 ${yy} 0 ${zz}
create_box 1 box
create_atoms 1 box
mass 1 1.0
velocity all create 1.44 87287 loop geom
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify delay 0 every 20 check no
fix 1 all nve
run 10000
批量作业提交¶
for sample in /share/home/username/work/lsf_bwait/raw_data/*_R1.fastq.gz;do
index=$(basename $sample |sed 's/_R1.fastq.gz//')
prefix=$(dirname $sample)
dsub -n "bwa_${prefix}" --label arm -R 'cpu=40' -o bwa_${prefix}_%J.out "module load arm/bwa/0.7.18 arm/samtools/1.21;bwa mem -t 40 -R "@RG\tID:${prefix}\tPL:illumina\tLB:library\tSM:humen146" hg38.fa ${prefix}_R1.fastq.gz ${prefix}_R2.fastq.gz |samtools sort -@ 40 -o ${prefix}_srt.bam"
作业依赖¶
用于提交作业时,指定作业间的依赖关系,当被依赖的作业达成约定的状态后依赖的作业将会被调度。
dsub -D "key=value"
输入的参数值必须满足
key=value格式。key支持jobid和JobName,value值只能是STARTED、RUNNING、SUCCEEDED、FAILED、ENDED,如'2=ENDED'。STARTED表示RUNNING、STOPPED、SSTOPPED、SUCCEEDED和FAILED。ENDED表示SUCCEEDED和FAILED。
jobid约束如下:
- 必须满足jobid的限制条件,即1~12位正整数。
- 支持指定同一个jobid的多种状态,但指定同一作业的不同状态为与逻辑时,将导致依赖无法达成。
JobName约束如下:
- 若包含特殊字符
%=()|,需要使用\对特殊字符进行转义。 - 支持使用通配符
(*)模糊查询,可放置开头、中间或结尾,分别对应的匹配方式为后缀匹配、关键字匹配和前缀匹配。 - 只能依赖本用户提交的作业。
- 若包含特殊字符
多个匹配条件组合时,支持多匹配条件间的
“与(&&)/或(||)”逻辑,且支持以分号表示与逻辑,分号和逻辑符(&&、||)不支持混用。不加单引号的纯数字按
jobid处理;加单引号的纯数字按JobName处理。
使用举例:
示例一:
按照jobid指定单个作业依赖关系
dsub -D "1=RUNNING" "echo 'hello world'"显示如下:
Submit job <2> successfully.示例二:
按照JobName指定依赖关系
dsub -D "job1=RUNNING" "echo 'hello world'"显示如下:
Submit job <3> successfully.示例三:
按照jobid指定多个作业依赖关系
dsub -D "(1=RUNNING||2=SUCCEEDED)&&3=ENDED" "echo 'hello world'"显示如下:
Submit job <4> successfully.示例四:
按照JobName指定依赖关系(支持通配符*)
dsub -D "job_*=SUCCEEDED" "echo 'hello world'"显示如下:
Submit job <5> successfully.示例五:
指定JobName包含特殊字符(特殊字符需要转义)
dsub -D "job\(202306\)=SUCCEEDED" "echo 'hello world'"显示如下:
Submit job <6> successfully.示例六:
指定纯数字的JobName
dsub -D "'12'=RUNNING" "echo 'hello world'"显示如下:
Submit job <7> successfully.
dsub 命令详细选项¶
--prehook
--prehook 用于提交作业时指定 preHook 的执行命令,preHook 是为作业执行前进行准备工作。
--posthook
--posthook 用于提交作业时,指定 postHook 的执行命令,postHook 是为作业执行后进行收尾工作。
-n | --name提交作业时,指定作业的名称。
-A | --account提交作业时,提交作业到指定Account下。
-q | --queue提交作业时,提交作业到指定队列下。
-N | --replica提交作业时,指定作业的任务副本数量。
-R | --resource提交作业时,指定作业的资源需求。
-mR | --min-resource提交作业时,指定作业的最小资源需求。
--mpi提交MPI作业时,指定作业的类型,Donau Scheduler会根据指定的作业类型来调度执行MPI作业。
-rpn | --replica-per-node提交MPI作业时,指定作业在每个节点运行的最大任务数。
-nn | --nnodes提交MPI作业时,指定作业运行的节点数。
-nl | --node-list提交作业时,指定节点或资源池偏好。
支持表达式[]和!,[]表示范围,!表示排除。若包含!,则整体必须使用单引号引起来。
支持关键字others,表示可优先运行在指定的节点或资源池上,若指定的节点或资源池不满足,则可以运行在其他节点。
--label提交作业时,指定标签,Donau Scheduler会根据指定标签来分配任务在指定主机节点上运行。
-o | --output-oo | --output-override提交作业时,重定向该作业的标准输出日志路径。
-o以追加写入的方式,-oo以覆盖写入的方式。绝对路径支持使用
%U表示userName,%J表示JobID,%G表示TaskGroupName,%I表示Index,%A表示UserName_JobID_TaskGroupName_Index。-e | --error-eo | --errlog-overide提交作业时,重定向该作业的错误输出日志路径。
-e以追加写入的方式,-eo以覆盖写入的方式。绝对路径支持使用
%U表示userName,%J表示JobID,%G表示TaskGroupName,%I表示Index,%A表示UserName_JobID_TaskGroupName_Index。-s | --script提交作业时,以脚本方式提交作业。
--topology提交作业时,指定作业调度的网络拓扑信息。
-jr | --job-requeue提交作业时,指定作业重排队次数和退出码范围。
--container提交作业时,指定作业运行的容器。
--array提交一个数组作业,并指定数组的大小。
-ar | --adv-reservation提交作业时,指定需要使用的预约。
-h | --help用于指导
dsub各个命令的使用规则以及具体功能,返回支持的参数信息。
查看作业¶
提交作业后,查看作业运行状态:djob djob jobid。
$ djob
ID NAME STATE USER ACCOUNT QUEUE START_TIME END_TIME EXEC_NODES
9 gatk RUNNING usrename default default 2024/10/09 08:49:52 - agent-ARM-15
| 字段 | 含义 |
|---|---|
| ID | 作业ID |
| NAME | 作业名称,若未指定作业名称,则默认为default。 |
| STATE | 作业状态,包含WAITING、PENDING、RUNNING、STOPPED、SSTOPPED、FAILED、SUCCEEDED。 |
| USER | 提交该作业的用户名。 |
| ACCOUNT | 作业所在组织帐户。若未指定组织帐户提交或该用户未配置defaultAccount,则默认提交至default。 |
| QUEUE | 作业所在队列。若未指定队列提交或该用户未配置 defaultQueue,则默认提交至default。 |
| START_TIME | 作业开始时间。 |
| END_TIME | 作业结束时间。 |
| EXEC_NODES | 作业执行节点。 |
作业状态:
WAITING:调度器接收用户提交的作业,作业的初始状态是WAITING,等待调度器调度作业。RUNNING:调度作业后,其状态产生两种变化:如果计算资源分配成功,作业标识为RUNNING,并分发到执行节点运行;PENDING:如果资源未分配成功,作业标识为PENDING,调度器将作业挂起,并发布具体原因。使用djob -l查看作业的调度详情,了解挂起原因。SUCCEED:如果作业正确执行完成,标识为SUCCEED。通过查看作业输出数据了解业务计算结果。FAILED:如果执行失败,标识为FAILED。使用djob -l查看作业的运行时详情,了解失败原因。
为方便查看作业的CPU时间、内存消耗,可以改写 djob 的输出,将下面这行 alias 命令写入 ~/.bashrc 中。
alias dbs="djob --output 'jobId:8 name:8 user:8 state:8 queue:8 startTime:20 execNodes:15 totalMaxMem:15 totalUtime:15 totalStime:15'"
$ dbs
jobId name user state queue startTime execNodes totalMaxMem totalUtime totalStime
13 gatk liuhao RUNNING default 2024/10/09 11:28:57 agent-ARM-15 151168 156416 2560
djob 其它选项:
| 功能 | 命令 |
|---|---|
| 按jobid查询 | djob 1 |
| 按jobid批量查询 | djob 1 2 |
| 宽格式显示 | djob -w 1 |
| 长格式显示 | djob -l 1 |
| JSON格式显示 | djob -J 1 |
| 自定义字段查询 | djob --output "jobid user state" 1 |
| 自定义字段查询并指定列宽 | djob --output "jobid:15 user:15 state:15" 1 |
| 自定义字段查询并指定分隔符 | djob --output "jobid user state delimiter='%'" 1 |
| 分页查询 | djob -p 1 -ps 10 |
| 按作业名称模糊查询 | djob -n xxx |
| 按用户查询 | djob -u test |
| 按用户组查询 | djob -ug usergroup |
| 按队列查询 | djob -q q1 |
| 按组织账户查询 | djob -A users |
| 按作业状态查询 | djob -s FAILED |
| 按提交时间段查询 | djob -t submit -st '2019/10/28 9:30:00' -et '2019/10/28 21:19:00' |
| 按开始时间段查询 | djob -t start -st '2019/10/28 9:30:00' -et '2019/10/28 21:19:00' |
| 按结束时间段查询(只能查询出完成态作业,且必须配合状态过滤选项使用,如-s、-D) | djob -t end -st '2019/10/28 9:30:00' -et '2019/10/28 21:19:00' |
| 组合查询 | djob -u all -s SUCCEEDED -p 1 -ps 2 |
| 查询本用户提交的未完成的作业 | djob |
| 查询本用户提交的已完成的作业 | djob -D |
| 查询本用户提交的所有状态的作业 | djob -s all |
| 查询所有用户提交的未完成的作业(管理员身份执行) | djob -u all |
| 查询所有用户提交的已完成的作业(管理员身份执行) | djob -D -u all |
| 查询所有用户提交的所有状态的作业(管理员身份执行) |
查看作业日志¶
dpeek
终止作业¶
dkill jobid
作业控制¶
djctl stop JobID 挂起作业
djctl resume JobID 恢复作业
djctl requeue JobID 重启作业
djctl resubmit JobID 重新提交作业
修改作业资源¶
dmod
资源查看¶
dnode 查看所有可用的节点及每个节点的资源
dqueue 查看集群可用的作业队列
资源池¶
$ dadmin label show
NAME TYPE NODES
AI shared AI-01
aarch64 shared AI-01,agent-ARM-[01-43],fat-agent-ARM-[01-03]
arm shared agent-ARM-[01-38]
fat_arm exclusive fat-agent-ARM-[01-03]
x86 shared agent-X86-[01-07]
x86_64 shared agent-X86-[01-58],fat-agent-X86-[01-03]
其它¶
drun 使用不同的作业步骤(Job Step)提交不同的任务
dattach 用于支持用户直接连接作业执行节点或Docker容器
drespool 用于显示资源池信息
dacct 显示组织帐户作业统计和资源等信息
duser 用于显示用户作业统计等信息
dcluster 用于显示集群中节点、作业及队列等信息
本站总访问量 次