多瑙调度器
命令行¶
参考
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
-n
指定作业名称。
-R
作业申请的资源, -R 'cpu=2
申请 2 个 CPU 核。
-nl
指定作业运行的节点,如 #DSUB -nl 'agent-ARM-01'
;也可以指定作业运行的节点范围,#DSUB -nl 'agent-ARM-0[1-9]'
。
-o
指定作业日志。-o
以追加的方式写入,-oo
以覆盖的方式写入。日志文件名可以使用特殊变量: %U
表示 userName
;%J
表示 JobID
;%G
表示 TaskGroupName
;%I
表示 Index
;%A
表示 UserName_JobID_TaskGroupName_Index
。
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
选项,如下所示。使用其它类型的节点,指定对应的资源标签即可。
提交作业到 x86 节点。
#!/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
内存限制: 为了防止作业使用过多内存导致计算节点崩溃,调度系统对所有作业按核数强制限制了作业能使用内存的最大值,如 标签为 arm
的节点限制为每核 5GB
,超过限制作业会被系统杀掉,同时日志文件内会有相关提示 Job was terminated due to reaching the mem limit, errCode: 143
,如果程序需要使用 50GB
内存,则应该申请 10
个核, -R 'cpu=10'
。各节点对应的内存限制如下:
Warning
由于强制了作业每核内存使用限制,因此作业脚本中 -R
选项中不应再指定作业使用的内存,除了可能会导致作业排队时间较长外无其他意义。
标签 | 节点 | 每核内存限制(GB) |
---|---|---|
arm | agent-ARM-{01-43} | 5 |
x86 | agent-X86-{01-65} | 10 |
AI | AI-01 | 10 |
fat_x86 | fat-agent-X86-{01-03} | 32 |
fat_arm | fat-agent-ARM-{01-03} | 16 |
交互作业¶
使用 -I
选项可以提交交互作业,用于程序调试等。
$ dsub -q interactive -I bash
交互模式进入 AI 节点。
$ dsub -q interactive --label AI -I bash
MPI 并行作业¶
提交MPI跨节点并行作业时,需要使用 --mpi
选项指定支持的MPI类型,支持 openmpi
,intelmpi
,hmpi
和mpich
。
这里以 lammps 为例。
#DSUB -n lammps
#DSUB -N 256
#DSUB -nn 2
#DSUB --mpi hmpi
#DSUB -o lammps_arm_%J.out
module load arm/lammps/29Aug2024_hmpi
# 以下三行打印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
提交 NPU 作业¶
NPU 作业脚本,使用 -R 'npu=1'
选项申请 NPU 资源。
#!/bin/bash
#DSUB -n jobname
#DSUB -R 'npu=1'
#DSUB -o jobname_%J.out
python npu.py
dnode --npu
命令可以查看集群 NPU 的使用情况。 $ dnode --npu
NAME NPU_ID DEVICE_ID NPU_NAME STATUS AICORE_UTIL DDR_USAGE HBM_USAGE
AI-01 0 0 Atlas A2 OK 0% 0/0 64433/655*
AI-01 1 0 Atlas A2 OK 0% 0/0 64890/655*
AI-01 2 0 Atlas A2 OK 0% 0/0 63353/655*
AI-01 3 0 Atlas A2 OK 0% 0/0 63353/655*
AI-01 4 0 Atlas A2 OK 0% 0/0 63359/655*
AI-01 5 0 Atlas A2 OK 0% 0/0 63353/655*
AI-01 6 0 Atlas A2 OK 0% 0/0 63353/655*
AI-01 7 0 Atlas A2 OK 0% 0/0 63355/655*
批量作业提交¶
一般用于使用同一个应用程序处理多个数据样本、或运行不同参数的场景,以提高作业提交效率、避免手工提交失误。
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 其它选项¶
查看作业¶
基本使用¶
提交作业后,查看作业运行状态: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
查看作业的运行时详情,了解失败原因。
定制 djob 输出¶
为方便查看作业的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
作业实际 CPU 消耗¶
部分作业申请了使用多核,但由于程序本身无法充分利用多核,因此建议关注作业是否实际使用了申请的核,并以此为依据申请作业使用的核数,以免浪费核时,产生不必要的费用。
cpuUtil
:值格式:avg/recent
,表示作业的总CPU利用率,即从作业开始运行到最近一次采样。
avg
:平均CPU使用率,从作业开始运行到最近一次采样的平均使用率;MPI作业为节点上该作业所有任务的平均值。recent
:最近一次上报的CPU使用率;
如下作业所示,当前使用了 98 核,作业从运行到目前平均使用了 9.7 核
$djob -ll jobid
...
Runtime Details:
...
nodeUsages
execNode resGroup resIndex utime stime wallclockDuration sstopedTime cpuUtil gpuUtil memResource
agent-ARM-42 0 0 200370 71784 27882 0 976/9820 - 329394/0/0/397740/397740/363698/329640
nodePids
execNode pids
agent-ARM-42 3107938
...
djob 其它选项¶
查看作业日志¶
dpeek
终止作业¶
dkill jobid
终止作业
dkill --force jobid
强制终止作业
作业控制¶
djctl stop JobID
挂起作业
djctl resume JobID
恢复作业
djctl requeue JobID
重启作业
djctl resubmit JobID
重新提交作业
修改作业资源¶
资源查看¶
节点信息¶
dnode
查看所有可用的节点及每个节点的状态、CPU、内存等资源;
状态 | 状态说明 |
---|---|
OK | 节点正常,允许关闭节点。 |
CLOSE_ADMIN | 节点被管理员关闭,无法接收作业下发任务,允许开启节点。 |
CLOSE_LOCK | 节点上作业批量失败,被隔离,需要管理员手动开启。 |
CLOSE_BUSY | 节点繁忙,资源使用达到阈值,停止下发新作业,阈值下降后恢复为OK状态。 |
CLOSE_FAULT | 节点局部故障,通信、网卡、磁盘等异常,停止下发新作业需要管理员检查处理,检测到故障解除后恢复为OK。 |
UNAVAILABLE | 节点无法连接,或出现严重故障(共享存储故障/所有CX网卡掉线等),长期未收到节点心跳,无法接收作业下发任务,允许开启/关闭/删除节点,但是节点状态不发生变化。 |
REGISTERING | 节点注册中,无法接收作业下发任务,不允许开启/关闭/删除节点。 |
UNLICENSED | 在线下场景,表示系统中没有可用License文件、License文件中无计算节点资源项(CCSU-00-E01R/CCSU-00-E02R)或License文件中计算节点资源项(CCSU-00-E01R/CCSU-00-E02R)数量不足。 |
SUSPENDED_ADMIN | 管理员手动休眠节点,无法接收作业下发任务,不允许开启/关闭/删除节点。 |
SUSPENDED_AUTO | 节点自动进入休眠状态,可以接收作业下发任务,不允许开启/关闭/删除节点。 |
CLOSE_EXIT | 节点即将删除状态。无法接收作业下发任务,但是正在运行的作业不受影响。该节点上的所有作业运行完成后,会自动被删除。该状态的节点仅支持强制删除操作,此时节点上的作业会被终止。 |
CLOSE_FULL | CPU核数和GPU卡数全部分配完毕,停止下发新作业,资源释放后恢复为OK。 |
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
用于显示集群中节点、作业及队列等信息
流程软件¶
snakemake¶
v8 之前的版本
snakemake --cluster 'dsub -R "cpu={threads}"' -s Snakemake
本站总访问量 次