作业定义和管理¶
用户通过作业定义来向系统请求资源,用户也可用命令查看系统信息,作业及任务的状态等。
系统命令¶
SkyForm AIP的命令接口是aip。
普通用户能够使用aip cluster, aip host, 和aip queue来查询系统中的资源,用aip job来运行和管理自身的作业。
系统管理员除了可以运行以上命令外,还可以运行aip admin来重启远程的AIP服务和让AIP服务重读修改过的系统配置。
aip的例子:
运行作业¶
作业需要一个JSON格式的作业定义。
直接运行命令aip job run会启动默认的文本编辑器让用户编辑JSON作业定义。最基本必填的作业定义参数是作业命令行Command。如下例子:
aip job run
写入文件退出后,作业开始运行并显示作业命令的输出:
高性能计算作业命令¶
SkyForm AIP提供了一组高性能计算作业管理命令。具体使用请参考在线man page。
查看作业¶
运行作业后,可以执行以下命令aip job info查看作业:
命令aip job info -l输出作业JSON格式的详细信息。
命令aip job log看作业的输出。如:
aip j log 5902
另一组作业查看命令是cjobs和bjobs。具体命令使用请参考cjobs的man page(用命令man cjobs)。
例子1:作业434处于暂停状态:
例子2:作业437正在运行,是有远程任务的MPI作业。
作业控制¶
杀掉作业:aip job kill jobid
重运行作业,即杀掉目前正在运行的作业,让其重新排队:aip job rerun {jobid}
暂停和恢复后台运行作业:aip job stop jobid; aip job resume jobid
SkyForm AIP的作业状态和说明见下表:
状态 |
说明 |
|---|---|
WAIT或PEND |
作业在队列中等待。等待原因可用命令aip j i -l或cjobs -lp查看 |
RUN |
作业在运行 |
FINISH或DONE |
作业运行结束,exit码为0 |
WSTOP或PSUSP |
作业在队列等待时被暂停调度。恢复可用aip j rs |
EXIT |
作业被杀掉,或以非0的exit码结束 |
USRSTOP或USUSP |
运行作业被用户或系统管理员暂停 |
SYSSTOP或SSUSP |
运行作业被调度器按调度策略暂停 |
作业状态间的关系见下图。
作业状态间的关系¶
阵列作业¶
阵列作业是指同一作业定义的多个实例。阵列作业的每个实例称为一个子作业。阵列作业的子作业共享同一份作业定义。阵列作业共享一个作业号,调度时按每个子作业单独调度。
提交阵列作业¶
例子1:普通阵列10个子作业:
$ csub -q medium -J job[1-10] sleep 1h
Job <532288> is submitted to queue <medium>.
cjobs看到的是10行,同一个作业号532288。JOB_NAME带子作业号:
$ cjobs -l 532288
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
532288 user1 RUN medium host1 host2 job[1] 2024-06-01 10:00:00
532288 user1 RUN medium host1 host3 job[2] 2024-06-01 10:00:00
...
532288 user1 RUN medium host1 host11 job[10] 2024-06-01 10:00:00
例子2:带间隔的阵列作业和控制同时运行的作业数:
$ csub -q medium -J job[1-10:2]%3 sleep 1h
Job <532289> is submitted to queue <medium>.
子作业号为1 3 5 7 9,最多同时运行3个子作业,剩下的PEND排队:
$ cjobs -l 532289
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
532289 user1 RUN medium host1 host2 job[1] 2024-06-01 10:00:00
532289 user1 RUN medium host1 host3 job[3] 2024-06-01 10:00:00
532289 user1 RUN medium host1 host4 job[5] 2024-06-01 10:00:00
532289 user1 PEND medium host1 - job[7] 2024-06-01 10:00:00
532289 user1 PEND medium host1 - job[9] 2024-06-01 10:00:00
作业脚本里区分每个子作业¶
阵列子作业公用一个作业脚本,作业脚本里可以用环境变量来CB_JOBINDEX区分每个子作业:
#!/bin/bash
./program -i data_$CB_JOBINDEX.dat -o result_$CB_JOBINDEX.dat
输出/日志文件名带$CB_JOBINDEX区分每个子作业的输出文件, 否则多个子作业写入同一个文件。
查询这列作业¶
例子:
cjobs 532289 # 查询整个阵列作业
cjobs -l 532289[3] # 查询单个子作业的详细信息:状态、队列、命令、提交/启动时间、运行主机、执行目录、和子作业实际占用的资源等。排查"某个子作业为什么没跑/跑在哪台机"。
cjobs -r 532289 # 查询运行中的阵列作业子作业
cjobs -a 532289 # 查询所有子作业,包括已完成的子作业
cjobs -A 532289 # 查询整个阵列作业的统计
终止阵列作业¶
只杀某个子作业的例子:
$ ckill 532290[1]
Job <532290[1]> is being terminated
杀完立刻 bjobs 复查:[1] 消失,原本 PEND 的 [7] 被自动提上来 RUN —— 这是 %3 并发闸门的正常表现,不是杀错了。
杀整个阵列的例子:
$ ckill 532290
Job <532290>: Operation is in progress
查看系统资源¶
集群例子的资源情况可以用命令aip来查看。
查看集群配置¶
命令:
aip cluster info
aip cluster res
例子:
查看系统配置的资源,包括通过从个主机上RESS得到的定制资源:cinfo
查看各主机负载和资源使用¶
命令:
aip host info
aip host res
例子:
查看主机详细信息:
chosts -l
查看队列情况¶
命令:
aip queue info
例子:
队列详细信息:
cqueues -l
LSF兼容命令¶
SkyForm AIP提供与LSF兼容的命令。具体使用可参考LSF的使用说明:
bsub :提交作业
bjobs:查看作业状态
bkill:杀掉作业
bqueues:查看队列状态
bpost/bread:发布与作业有关的消息,读取与作业有关的消息
bpeek:查看实时作业输出
lsid:产品和集群信息
blaunch:MPI的远程任务执行工具
SLURM兼容命令¶
sbatch: 作业提交
salloc: 交互作业提交
srun: 作业中执行的远程任务管理(常用于MPI)
sinfo: 集群概况
squeue: 队列信息
scontrol: 主机、作业信息详情和控制
scancel: 杀作业
sacct: 作业计量和历史
PBS兼容命令¶
qsub: 作业提交
qstat:作业、队列状态
qdel: 杀作业
pbsnodes: 主机详情
作业提交资源需求¶
参考 csub 里-R参数的说明。