多瑙调度器
命令行¶
参考
Warning
第一次使用多瑙调度器之前需要执行 dlogin ,输入用户密码后获取用户token。
作业提交¶
dsub
命令行提交作业¶
dsub -n jobname -q arm -aa -R 'cpu=4' -o jobname_%J.out sleep 100
脚本提交作业¶
#!/bin/bash
#DSUB -n jobname
#DSUB -R 'cpu=2'
#DSUB -o jobname_%J.out
#DSUB -aa
#DSUB -q arm
date
echo "this is script job"
sleep 10
date
提交
# 作业脚本需要有可执行权限
$ chmod +x submit.sh
$ dsub -s submit.sh
-n指定作业名称。-R作业申请的资源,-R 'cpu=2申请 2 个 CPU 核。-aa使用任意 CPU 架构的计算节点。-q指定作业列,-q arm指定使用 arm 队列,作业队列的详细说明见下文的 作业队列。-q选项和-aa选项需一起使用。
-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 作用相同。
Warning
目前已弃用使用标签对资源进行分类使用的方式,请使用队列的方式将作业提交到 arm 或 x86 节点。作业队列
资源标签:集群有多种硬件资源,arm 节点、x86 节点、ai 节点以及胖节点,集群上使用不同的资源标签代表不同类型的节点,以方便作业提交到对应类型的节点运行,可以使用 dadmin label show 查看资源标签及对应的节点。
交互作业¶
使用 -I 选项可以提交交互作业,用于程序调试等。
$ dsub -q interactive -I bash
交互模式进入 AI 节点,AI 节点使用需要向管理员申请。
$ dsub -aa -q 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
#DSUB -aa
#DSUB -q arm
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
#DSUB -aa
#DSUB -q AI
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}" -aa -q 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.
作业队列¶
Warning
目前已弃用使用标签对资源进行分类使用的方式,请使用队列的方式将作业提交到 arm 或 x86 节点。
为了对资源和作业进行管理,将节点分成了不同的队列,使用 dqueue 查看队列。
$ dqueue
NAME STATUS PRIORITY RUNNING_JOBS PENDING_JOBS SSTOPPED_JOBS
default OPEN,ACTIVE 1 266 2140 0
x86 OPEN,ACTIVE 1 146 143 0
AI OPEN,ACTIVE 1 0 0 0
interactive OPEN,ACTIVE 1 9 0 0
fat_x86 OPEN,ACTIVE 1 6 10 0
arm OPEN,ACTIVE 1 202 335 0
fat_arm OPEN,ACTIVE 1 30 523 0
| 队列 | 对应的节点 | 节点CPU核数 | 节点内存(GB) |
|---|---|---|---|
| arm | agent-ARM-{01-43} | 128 | 512 |
| x86 | agent-X86-{01-65} | 64 | 512 |
| AI | AI-01 | 192 | 1024 |
| fat_arm | fat-agent-ARM-{01-03} | 128 | 2048 |
| fat_x86 | fat-agent-X86-{01-03} | 64 | 2048 |
-q 选项和 -aa 选项需一起使用,否则作业无法调度至计算节点运行。
- 提交作业到普通 x86 节点,需要指定 x86 队列
#DSUB -n jobname # 指定作业名,可自定义
#DSUB -R 'cpu=2' # 每节点使用的资源,示例表示每节点使用2个cpu核心
#DSUB -o jobname_%J.out # 指定错误输出日志,%J为固定写法,表示作业ID
#DSUB -aa # 任意架构
#DSUB -q x86 # 指定 x86 队列
program # 用户自己的程序
- 提交作业到普通 arm 节点,需要指定 arm 队列
#DSUB -n jobname # 指定作业名,可自定义
#DSUB -R 'cpu=2' # 每节点使用的资源,示例表示每节点使用2个cpu核心
#DSUB -o jobname_%J.out # 指定错误输出日志,%J为固定写法,表示作业ID
#DSUB -aa # 任意架构
#DSUB -q arm # 指定 arm 队列
program # 用户自己的程序
- 提交作业到 x86 大内存节点,需要指定 fat_x86 队列
#DSUB -n jobname # 指定作业名,可自定义
#DSUB -R 'cpu=2' # 每节点使用的资源,示例表示每节点使用2个cpu核心
#DSUB -o jobname_%J.out # 指定错误输出日志,%J为固定写法,表示作业ID
#DSUB -aa # 任意架构
#DSUB -q fat_x86 # 指定 x86 队列
program # 用户自己的程序
- 提交作业到 arm 大内存节点,需要指定 fat_arm 队列
#DSUB -n jobname # 指定作业名,可自定义
#DSUB -R 'cpu=2' # 每节点使用的资源,示例表示每节点使用2个cpu核心
#DSUB -o jobname_%J.out # 指定错误输出日志,%J为固定写法,表示作业ID
#DSUB -aa # 任意架构
#DSUB -q fat_arm # 指定 arm_fat 队列
program # 用户自己的程序
内存限制¶
为了防止作业使用过多内存导致计算节点崩溃,调度系统对所有作业按核数强制限制了作业能使用内存的最大值,如 arm 队列的节点限制为每核 5GB,超过限制作业会被系统杀掉,同时日志文件内会有相关提示 EXIT_MESSAGE: Job was terminated due to reaching the mem limit, errCode: 143,详细说明见后文的 查看作业日志。如果程序需要使用 50GB 内存,则应该申请 10 个核, -R 'cpu=10' 。各节点对应的内存限制如下:
| 队列 | 节点 | 每核内存限制(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 |
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 查看运行作业的输出。
也可以在作业结束后查看日志文件,其中日志文件末尾会显示作业的各种信息,如运行时间、消耗的内存等,如下所示,其中几个信息说明如下:
EXEC_NODE: agent-X86-26作业运行的计算节点。EXIT_MESSAGE: Job execution succeeded作业退出信息,这里显示作业运行成功。内存不够异常退出时显示为EXIT_MESSAGE: Job was terminated due to reaching the mem limit, errCode: 130。MRUN_TIME: 3373作业运行时间,单位为秒。MEM_MAX_SUM: 26080作业使用的最大内存。
全部信息说明见:taskInfo及rusage信息说明
$ cat jobname_112345.out
TASK_INFO:
JOB_ID: 25866930
JOB_NAME: GB12
TASK_NAME: rg0.0
REPLICA: 1
TASKGROUP_NAME: rg0
SUBMIT_NODE: cli-X86-01
EXEC_NODE: agent-X86-26
EXIT_CODE: 0
EXIT_MESSAGE: Job execution succeeded
RESOURCE_USAGE_SUMMARY:
REQ_CPU: 20
REQ_MEM: 128
REQ_GPU: 0
REQ_NPU: 0
USER_CPU_TIME: 66703
SYSTEM_CPU_TIME: 550
MEMSW_MAX: 26080
SWAP_MAX: 0
MEM_MAX: 26080
MEM_AVG: 20302
MRUN_TIME: 3373
SSTOPPED_TIME: 0
CPU_UTIL_AVG(%): 1993
CPU_UTIL_RECENT(%): 1375
USER_CPU_TIME_SUM: 66703
SYSTEM_CPU_TIME_SUM: 550
MEMSW_MAX_SUM: 26080
SWAP_MAX_SUM: 0
MEM_MAX_SUM: 26080
MEM_AVG_SUM: 20302
CPU_UTIL_AVG_SUM(%): 1993
CPU_UTIL_RECENT_SUM(%): 1375
GPU_SM_UTIL_AVG(%): -
GPU_SM_UTIL_RECENT(%): -
NPU_SM_MEM_SUM(MB): -
NPU_SM_AICORE_UTIL(%): -
终止作业¶
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 查看集群可用的作业队列
其它¶
drun 使用不同的作业步骤(Job Step)提交不同的任务
dattach 用于支持用户直接连接作业执行节点或Docker容器
drespool 用于显示资源池信息
dacct 显示组织帐户作业统计和资源等信息
duser 用于显示用户作业统计等信息
dcluster 用于显示集群中节点、作业及队列等信息
作业资源申请规则¶
程序分类:
- 并行程序:可以使用多个计算节点同时运行的程序,一般使用 MPI 库编写,使用 mpirun 命令运行,如 vasp、gromacs等;生物信息中并行程序极少,常用的并行程序只有maker。
- 串行程序:只能在单个节点上运行的程序,不能跨节点运行。串行程序又可以分为单线程程序和多线程程序,单线程程序只能使用一个CPU核运行,速度较慢;多线程程序可以使用多个CPU核运行,速度相对较快,多线程程序有专用选项用于设置线程数。
原则上,作业申请的CPU核数应与程序使用的线程数相等,以免资源浪费或节点压力过大。
一般串行程序作业,申请的CPU核心数不能超过节点的核心数,否则作业永远排不上队,如 arm 队列上的作业,申请的CPU核心数不能超过128核。
如果需要较大内存(500G 以下),可以使用申请更多CPU核心数;如果需要的内存达到 500G 以上,可以使用 fat_x86 或 fat_arm 队列,不建议500G内存以下的作业使用这2个队列,以免排队时间过长。
多瑙使用 SKILL¶
介绍及配置¶
通过将多瑙使用文档等提炼为 skills,可以协助用户更好得使用本集群。
Note
skills 会根据实际情况更新进化,因此下面安装多瑙 skill 时建议使用软连接而不是拷贝的方式,以保证使用的 skill 一直是最新版本。
这里以 Claude Code 为例,其它 AI agent 使用原则类似。安装配置 Claude Code,参考 Claude Code 使用。
或使用集群安装的 claude code,module load x86/nodejs/25.9.0 或 module load x86/nodejs/22.14.0,claude -h。
安装配置完成后,将多瑙使用的 skill 链接安装到自己的 Claude Code 下。
$ mkdir ~/.claude/skills/
$ ln -s /share/software/skills/hpc-donau ~/.claude/skills/
❯ 当前安装了哪些skill
● 当前可用的 skill 分为以下几类:
内置 Skill
┌──────────────────┬───────────────────────────────────┐
│ Skill │ 用途 │
├──────────────────┼───────────────────────────────────┤
│ hpc-donau │ 多瑙调度器作业提交和管理 │
├──────────────────┼───────────────────────────────────┤
│ update-config │ 配置 Claude Code harness settings │
├──────────────────┼───────────────────────────────────┤
│ simplify │ 代码审查与优化 │
├──────────────────┼───────────────────────────────────┤
│ loop │ 定时循环任务 │
├──────────────────┼───────────────────────────────────┤
│ claude-api │ Claude API / Anthropic SDK 开发 │
└──────────────────┴───────────────────────────────────┘
使用方式:/skill-name 或通过 Skill 工具调用。
使用举例¶
集群资源查看¶
❯ 查看当前集群的可用资源
● Skill(hpc-donau)
⎿ Successfully loaded skill
● Bash(dnode | head -20)
⎿ NAME STATUS CPU CPU_FREE UTIL MEM MEM_FREE GPU GPU_FREE
AI-01 OK 192 192 1.08% 1030495 882842 0 0
agent-ARM-01 OK 128 118 1.93% 514199 412956 0 0
… +15 lines (ctrl+o to expand)
● Bash(dqueue)
⎿ NAME STATUS PRIORITY RUNNING_JOBS PENDING_JOBS SSTOPPED_JOBS
fat_x86 OPEN,ACTIVE 1 4 1 0
default OPEN,ACTIVE 1 6 76 0
… +4 lines (ctrl+o to expand)
● 当前集群资源状况如下:
节点概况(前20个)
┌─────────────────┬──────┬─────────────┬────────┬───────────────┐
│ 节点 │ 状态 │ 总核/空闲 │ 利用率 │ 内存/空闲(MB) │
├─────────────────┼──────┼─────────────┼────────┼───────────────┤
│ AI-01 │ OK │ 192/192 │ 1% │ 1030G/882G │
├─────────────────┼──────┼─────────────┼────────┼───────────────┤
│ agent-ARM-01~18 │ 混合 │ 128/ varies │ 0~52% │ 514G/ varies │
└─────────────────┴──────┴─────────────┴────────┴───────────────┘
ARM 节点中大量空闲的(128核全空闲):
- agent-ARM-02, ARM-05, ARM-07, ARM-08, ARM-17, ARM-18 — 完全空闲
- agent-ARM-13 — 108核空闲
- agent-ARM-01, ARM-09 — 约118核空闲
- agent-ARM-12 — 68核空闲
接近满载的:
- ARM-10(1核空闲), ARM-11(2核), ARM-14(8核), ARM-16(2核)
CLOSE_FULL:ARM-03, ARM-04, ARM-06, ARM-15(不可调度)
队列情况
┌─────────────┬────────────┬────────────┬───────────────────────────────────┐
│ 队列 │ 运行中作业 │ 等待中作业 │ 说明 │
├─────────────┼────────────┼────────────┼───────────────────────────────────┤
│ arm │ 444 │ 9 │ ARM队列,作业较多但有大量空闲节点 │
├─────────────┼────────────┼────────────┼───────────────────────────────────┤
│ x86 │ 176 │ 1274 │ 严重拥堵,等待作业极多 │
├─────────────┼────────────┼────────────┼───────────────────────────────────┤
│ fat_arm │ 6 │ 0 │ 空闲 │
├─────────────┼────────────┼────────────┼───────────────────────────────────┤
│ fat_x86 │ 4 │ 1 │ 空闲 │
├─────────────┼────────────┼────────────┼───────────────────────────────────┤
│ interactive │ 3 │ 0 │ 空闲 │
├─────────────┼────────────┼────────────┼───────────────────────────────────┤
│ default │ 6 │ 76 │ 有排队 │
└─────────────┴────────────┴────────────┴───────────────────────────────────┘
建议
- arm 队列当前资源充足,多个节点完全空闲,申请较高核数(如 16-40 核)可以快速调度
- x86 队列拥堵严重,不建议使用
- 如需大内存(≥500G),fat_arm 队列空闲可直接使用
编写作业脚本¶
编写多瑙作业脚本并提交
❯ 写一个多瑙测试脚本并提交
● Write(donau_test.dsub)
⎿ Wrote 30 lines to donau_test.dsub
1 #!/bin/bash
2 #DSUB -n test_job
3 #DSUB -R 'cpu=2'
4 #DSUB -q arm
5 #DSUB -aa
6 #DSUB -o %J.out
7
8 echo "=== Donau Test Job ==="
9 echo "Job started at: $(date)"
10 echo "Hostname: $(hostname)"
… +20 lines (ctrl+o to expand)
● Bash(chmod +x /share/home/software/work/skills/test/donau_test.dsub && dsub -s /share/home/software/work/skills/test/donau_test.dsub)
⎿ Submit job <36864222> successfully.
● 作业已提交成功,Job ID: 36864222。
脚本位置:/share/home/software/work/skills/test/donau_test.dsub
作业内容:打印主机信息、CPU/内存信息,执行一个简单计算(用 bc 计算 pi)。
查看状态和日志:
djob 36864222 # 查看作业状态
dpeek 36864222 # 查看实时输出
cat 36864222.out # 查看完整日志
作业问题查看及建议¶
查看作业排队原因并给出解决方案
❯ 36866963 这个作业为何一直在排队没有运行
● Bash(djob -l 36866963)
⎿ Basic Details:
jobId 36866963
name test_job
… +32 lines (ctrl+o to expand)
● 原因很清楚:
申请了 200 核,但 arm 队列每个节点只有 128 核,所以任何单节点都无法满足需求,作业永远排不到。
reqCPU 200
mainStateReasonMsg: The number of available CPUs on the node does not meet requirements
arm 队列单节点最大 128 核,所以 -R 'cpu=N' 的 N 不能超过 128。
需要我帮你把这个作业 kill 掉然后重新提交一个合理的吗?
流程软件¶
snakemake¶
v8 之前的版本
snakemake --cluster 'dsub -R "cpu={threads}"' -s Snakemake
常见故障¶
- 故障现象:作业提交后立即结束,没有日志输出
查看作业详细信息 djob -ll jobid,可以看到关键报错信息 Job execution environment build failed, err: container save failed failureHost: agent-ARM-03,大概率可能是节点的根目录写满了,请联系管理员及时处理。查看作业详细日志
$ djob -ll 25670440
Basic Details:
jobId 25670440
name arm_STAR
state FAILED
user username
queue default
account default
cmd module load arm/stringtie/3.0.0;stringtie -p 12 -G /share/home/username/biobase/p_clarkii/pc_v2.0_ncbi_v20631_agat.gtf -o M_N_zx_1.gtf -i M_N_zx_1Aligned.sortedByCoord.q20.bam
submitNode cli-ARM-01
createTime 2025/09/03 17:31:37
startTime 2025/09/03 17:31:39
lastModifiedTime -
endTime 2025/09/03 17:31:39
currentOperation EMPTY
jobRequeueMaxCnt 0
jobRequeueCurrentCnt 0
mpiType DEFAULT
interactionMode DEFAULT
assistJob DEFAULT
x11ForwardEnabled false
description -
transferType LOCAL
forwardTime -
recallTime -
autoResize false
Scheduling Details:
exclusive false
priority 1
adminPriority -1
expectSchedTime -
startTimeEstimated -
reserveRes -
backfillRes -
backfilledRes -
Resource Details:
reqJobLicense -
allocJobLicense -
resGroup[0]:
minReplica 1
replica 1
labels arm aarch64
preferNodes -
reqNodeSelectPolicy -
effNodeSelectPolicy SEQUENCE
reqCPU 12
reqMem 128
reqGPU nvidia:0
reqNPU 0
allocCPU 12
allocMem 128
allocGPU nvidia:0
allocNPU 0
allocSdr -
reqTaskLicense -
allocTaskLicense -
limitMem 61440
allocAffinity
execNode resGroup resIndex hwThreads gpuIds npuIds
agent-ARM-03 0 0/1 - - -
Runtime Details:
execNodes agent-ARM-03
execNodeCnt 1
execPath /share/home/username/biodata/wgcna/bam_2pass
resizeCmd -
timeout 0
stderrRedirectPath /share/home/username/biodata/wgcna/bam_2pass/M_N_zx_1_star_arm_%J.err
stderrRedirectType append
stdoutRedirectPath /share/home/username/biodata/wgcna/bam_2pass/M_N_zx_1_star_arm_%J.out
stdoutRedirectType append
totalUtime 0
totalStime 0
totalMaxMemSwp 0
totalMaxMem 0
preHookRunTime 0
jobWallclockDuration 0
postHookRunTime 0
jobSstoppedTime 0
jobExitCode 0
systemExitCode 12008
exitMessage Job execution environment build failed, err: container save failed failureHost: agent-ARM-03
nodeUsages
execNode resGroup resIndex utime stime wallclockDuration sstoppedTime cpuUtil gpuUtil npuUtil memResource
agent-ARM-03 0 0/1 0 0 0 0 0/0 - - 0/0/0/0/0/0/0/0
nodePids
execNode pids
agent-ARM-03 -
traceMessages 2025/09/03 17:31:37 : [JOB_ADD] Job 25670440 is submitted by username, job state is PENDING.
2025/09/03 17:31:38 : [JOB_START] Job 25670440 start message has been sent, job state is PENDING.
2025/09/03 17:31:38 : [JOB_START_ACK] Job 25670440 start message has been received by agent agent-ARM-22.
2025/09/03 17:31:38 : [JOB_EXECUTION] Job 25670440 state is from PENDING to RUNNING.
2025/09/03 17:31:38 : [JOB_FINISH] Job 25670440 state is from RUNNING to FAILED, reason: job build failed.
2025/09/03 17:31:38 : [JOB_RETRY] Job 25670440 will retry for the 1st time, and max retry times is 1, and retry type is cluster requeue.
2025/09/03 17:31:38 : [JOB_STATE_CHANGE] Job 25670440 state is from FAILED to PENDING.
2025/09/03 17:31:39 : [JOB_START] Job 25670440 start message has been sent, job state is PENDING.
2025/09/03 17:31:39 : [JOB_START_ACK] Job 25670440 start message has been received by agent agent-ARM-03.
2025/09/03 17:31:39 : [JOB_EXECUTION] Job 25670440 state is from PENDING to RUNNING.
2025/09/03 17:31:39 : [JOB_FINISH] Job 25670440 state is from RUNNING to FAILED, reason: job build failed.
本站总访问量 次