四川大学新能源与低碳技术研究院
高性能计算中心(以鸣计算实验室)
首页
|
联系我们
Toggle navigation
高性能计算中心
中心简介
要闻快讯
评测报告
专题课程
开放资源
仪器设备简介
实验室服务器申请
计算资源申请
线下专题课程预约
线上专题课程预约
合作产品
专题文档
专题文档库
# 第六章 作业提交 [TOC]   高性能计算系统常见的作业调度软件有PBS Pro,Torque,Slurm,SGE等。PBS Pro和Torque都属于PBS的衍生版本,命令和作业脚本格式基本相同,Slurm是超算中心常用的作业调度系统,以鸣计算实验室AMD计算集群安装的作业调度软件是Slurm-24.05.3版本,这里为大家介绍Slurm常用命令和作业脚本的编写。 ## sinfo   用户在使用计算资源时,首先需要了解哪些队列可以使用。使用sinfo命令查询队列信息。根据命令输出,可以看到当前节点所在集群的作业调度系统的队列情况,并可看到每个队列可访问的空闲节点数量、节点名称。 ``` PARTITION AVAIL TIMELIMIT NODES STATE NODELIST amd7742 up 7-00:00:00 2 idle compute-0-[2-3] batch* up 7-00:00:00 1 idle compute-0-1 ```   命令的默认输出中,PARTITION表示分区、NODES表示节点数、STATE表示节点运行状态、NODELIST表示节点列表。其中状态一列中idle表示节点处于空闲状态,可接收新的作业;allocated表示节点已经分配了一个或者多个作业且所有核心用满,在作业释放前不能再被分配作业;mix状态为使用部分核心,仍可以被分配作业;drain状态表示对应节点已经下线;drng表示已下线但仍有作业在运行。需要关注的是PARTITION和STATE两列。PARTITION指示任务可提交到的队列。下表列出关于sinfo命令常用选项,更多选项可通过man sinfo命令查看sinfo手册。 | sinfo | | | -------------------------------------- | -------------------------- | | -a, --all | 查看所有分区信息 | | -d, --dead | 查看处于dead状态的详细信息 | | -l, --long | 查看分区详细信息 | | -N, --Node | 查看节点信息 | | -p <patition>, --partition=<partition> | 查看指定分区信息 | | -t <states>, --state=<state> | 查看指定状态的节点 | ## srun   交互式提交作业,就是使用命令行方式,用参数定义作业规则的方式提交作业。   命令格式如下:srun [options] program **使用示例** 1)在amd7742队列上指定2个线程运行 hostname命令,如下所示: ``` srun -p amd7742 -n 2 hostname ``` 输出如下 ``` compute-0-2 compute-0-2 ``` 2)在amd7742队列,指定节点运行 hostname命令,如下所示: ``` srun -p amd7742 -N 1 -n 2 -w compute-0-3 hostname ``` 输出如下 ``` compute-0-3 compute-0-3 ``` 3)在amd7742队列上指定节点数1,6线程独占运行 hostname命令,如下图所示: ``` srun -p amd7742 -N 1 -n 6 --exclusive hostname ``` 输出如下 ``` compute-0-2 compute-0-2 compute-0-2 compute-0-2 compute-0-2 compute-0-2 ``` ## sbatch   使用sbatch命令提交作业脚本,注意,sbatch和srun命令的不同主要是sbatch的必要参数是作业脚本,而srun没有。其基本格式为sbatch jobfile。jobfile为作业脚本文件。在作业脚本中,脚本第一行以“#!”字符开头,并指定脚本文件的解释程序,如 sh,bash。接下来写作业使用到的调度系统参数,以#开头,最后写作业运行的程序命令。   使用sbatch命令提交用户作业脚本。示例如下: ``` sbatch xxx.sbatch ```   作业提交脚本格式编写如下,作业控制指令以“#SBATCH”开头,其他注释以“#”开头。 ### 串行作业示例: ``` #!/bin/bash #SBATCH –J TestSerial #SBATCH -p normal #SBATCH -N 1 #SBATCH –n 1 #SBATCH -o log/%j.loop #SBATCH -e log/%j.loop echo “SLURM_JOB_PARTITION=$SLURM_JOB_PARTITION” echo “SLURM_JOB_NODELIST=$SLURM_JOB_NODELIST” srun ./calc_serial 1000000 ``` ### mpi作业示例:   OpenMPI支持多种方式与作业调度集成,其中最推荐的方式是使用srun直接启动任务。   在作业脚本中使用srun ``` #!/bin/bash #SBATCH -o %j #SBATCH -J MPI #SBATCH -t 00:10:00 #SBATCH -p hpc #SBATCH --mem-per-cpu=3G #SBATCH --tasks-per-node=32 #SBATCH -N 2 #load env source /opt/cluster_share/envs/vasp.5.4.4+openmpi-4.1.5+intel2019u4+pmix-3.2.3 #running app srun --mpi=pmix_v3 vasp_std >& result.log ``` ## salloc   该命令支持用户在提交作业前,先获取所需计算资源。   **使用示例**   首先申请资源,如图所示: ``` salloc -n 4 -p amd7742 ```   输出 ``` salloc: Granted job allocation 716 ```   注意,716是作业编号。   至此,我们通过salloc命令,向计算系统申请了4个CPU核心的计算资源,计算系统划拨了4个CPU核心出来,此次划拨的资源任务编号是716.   使用squeue命令+作业编号查询作业状态 ``` squeue --job 716 ```   输出 ``` JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 716 amd7742 interact scudt_du R 0:14 1 compute-0-2 ```   可以看到,系统划拨的计算资源是在compute-0-2节点上,我们可以ssh到compute-0-2节点,sun或mpirun等命令运行软件。   执行exit退出此次作业,作业资源释放   更多选项,用户可以通过salloc --help 命令查看。 ## squeue   用户使用squeue命令可以查看作业信息,例如scudt_duyong账号执行命令,输出如下: ``` JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 716 amd7742 interact scudt_du R 10:00 1 compute-0-2 ```   普通用户只能看到自己提交的作业状态,看不到其它用户的。   其中JOBID表示任务ID编号,PARTITION表示作业所在队列(分区),NAME表示任务名称,USER为用户,ST为作业状态,TIME为已运行时间,NODES表示占用节点数,NODELIST(REASON)为任务运行的节点列表或者原因说明。另外,状态列中R-Runing(正在运行),PD-PenDing(资源不足,排队中),CG-COMPLETING(作业正在完成中),CA-CANCELLED(作业被人为取消),CD-COMPLETED(作业运行完成),F-FAILED 作业运行失败,NF-NODE_FAIL节点问题导致作业运行失败,PR 作业被抢占,S 作业被挂起,TO 作业超时被杀。 ## scontrol   查看、修改SLURM配置和状态,此处仅介绍常用的查看命令。 **查看节点信息** ``` scontrol show node[=node_name] ```   查看节点的详细信息,如果不指定ndoe_name默认会显示所有节点信息,如果指定node_name,则仅显示指定节点的信息。 **查看作业信息** scontrol show job [jod_id]   查看作业的详细信息,如果指定job_id,则仅显示指定作业的信息。 ## scancel   作业删除命令:scancel“作业号”   普通用户只能查看、删除自己提交的作业;