PBS脚本 Job Submission and Scheduling (PBS Scripts)

参考:

MSI Job Submission and Scheduling (PBS Scripts)

CSDN博客 PBS常用命令和脚本

一 介绍

超算系统使用作业队列来管理 计算任务 的执行。将计算任务提交到作业队列后,它们将在队列中等待,直到有可用的适当的计算资源。

常见的排队系统为PBS(Portable Batch System.)。要将作业提交到PBS队列,用户可以创建PBS作业脚本(PBS job scripts)。 PBS作业脚本包含有关计算所需资源的信息,以及用于执行计算的命令

二 PBS Script格式

PBS作业脚本是一个小型文本文件,其中包含有关作业所需资源的信息,包括时间,节点数和内存。 PBS脚本还包含 让超算系统执行的命令(commands needed to begin executing the desired computation)。比如linux系统命令(由超算的操作系统决定)。

PBS作业脚本示例:

1 #!/bin/bash -l        
2 #PBS -l walltime=8:00:00,nodes=1:ppn=8,mem=10gb 
3 #PBS -m abe 
4 #PBS -M sample_email@umn.edu 
5 cd ~/program_directory
6 module load intel 
7 module load ompi/intel 
8 mpirun -np 8 program_name < inputfile > outputfile

PBS脚本的第一行定义了将使用哪种shell读取脚本(系统将如何读取文件)。建议使第一行#!/ bin / bash -l

用于PBS查询系统的命令以  #PBS 开头。

上面的示例脚本中的第二行包含PBS资源请求。该示例作业将需要8个小时,每个节点8个处理器核(ppn),以及10 GB的内存(mem)。资源请求必须包含适当的值;如果请求的时间,处理器或内存不适合硬件,则该作业将无法运行。

包含#PBS -m abe和#PBS -M sample_email@umn.edu的两行都是与向用户发送邮件电子邮件有关的命令。这些行的第一行指示PBS系统在作业中止,开始或结束时发送消息电子邮件。第二个命令指定要使用的电子邮件地址。可以使用电子邮件中的信息来分析工作失败的原因。

样本PBS脚本的其余部分包含将要开始计算的命令。 PBS脚本应包含适当的更改目录命令以到达job执行位置(该脚本将在用户主目录中启动)。 PBS脚本还需要包含计算可能需要的任何软件模块的模块加载命令。 PBS脚本的最后几行包含用于执行计算的命令。在上面的示例中,最后一行包含执行命令,以启动程序,该程序使用MPI通信在8个处理器内核上运行。

三 提交Script

1. 提交脚本:   qsub -q queuename scriptname 

quename是提交到的队列的名称,scriptname是作业脚本的名称。 该命令的-q quename部分可以省略,在这种情况下,作业将提交到设置为默认队列的任何队列。 或者,可以将队列规范放在作业脚本中(请参见下文)。

   2. 查看提交的任务状态 qstat -u username

此命令将显示指定作业的状态以及相关的作业ID号。 命令qstat本身将显示系统上的所有作业。

  3. 取消提交的作业    qdel jobIDnumber
应使用通过使用qstat命令确定的适当的作业ID号替换jobIDnumber。

四 PBS Script Commands

下表总结了可在PBS作业脚本中使用的一些命令。 前两个命令(解释器规范和资源请求)是必需的,而其他命令是可选的。 下面的每个PBS命令都应在PBS脚本内占一行。

PBS commandEffect
#!/bin/bash -l 如何解读PBS文件,需要在第一行。Specifies how the PBS file should be read (by the bash interpreter). A statement like this is required to be the first line of a PBS script.
#PBS -l walltime=2:00:00,nodes=1:ppn=8,pmem=2500mb 需要的资源。The resource request (required). The resource request must specify the job walltime (hours:minutes:seconds), number of nodes, and processor cores per node (ppn). It is recommended to specify either the required memory per processor core (pmem), or the required total memory (mem).
#PBS -m abe 发送邮件。Makes the PBS system send message emails when the job aborts, begins, or ends.
#PBS -M sample_email@umn.edu 发送邮件。Specifies the email address that should be used when the PBS system sends message emails.
#PBS -N jobname 设定这个任务的名字。Specifies a name for the job that will appear in the job queue.
#PBS -o output_filename 输出文件。Directs the job standard output to be placed in the named file.
#PBS -e error_filename 错误信息文件。Directs the job error output to be placed in the named file.
#PBS -q queue_name 提交到的队列。Specifies that the job should be run in the named queue.

(1) PBS 作业脚本选项 (若无-C 选项,则每项前面加‘#PBS’)
-a date_time : date_time 格式为:[[[[CC]YY]MM]DD]hhmm[.SS]
表示经过date_time 时间后作业才可以运行。
-c interval : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。
-C directive_prefix :在脚本文件中以directive_prefix 开头的行解释为qsub 的命
令选项。(若无此选项,则默认为’#PBS’ )
-e path :将标准错误信息重定向到path
-I :以交互方式运行
-j join :将标准输出信息与标准错误信息合并到一个文件join 中去。
-k keep :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。
keep 为o 表示保留前者,e 表示后者,oe 或eo 表示二者都保留,
n 表示皆不保留。若忽略此选项,二者都不保留。
-l resource_list : 定义资源列表。以下为几个常用的资源种类。
cput=N : 请求N 秒的CPU 时间; N 也可以是hh:mm:ss 的形式。
mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。
nodes=N:ppn=M :请求N 个结点,每个结点M 个处理器。
-m mail_options :mail_option 为a:作业abort 时给用户发信;为b:作业开始运行发信;为e:
作业结束运行时发信。若无此选项,默认为a。
-M user_list : 定义有关此作业的mail 发给哪些用户。
-N name : 作业名,限15 个字符,首字符为字母,无空格。
-o path : 重定向标准输出到path。
-p priority : 任务优先级,整数,[-1024,1023],若无定义则为0.
-q destination : destination 有三种形式: queue , @server,queue@server。
-r y|n : 指明作业是否可运行,y 为可运行,n 为不可运行。
-S shell : 指明执行运行脚本所用的shell,须包含全路径。
-u user_list : 定义作业将在运行结点上以哪个用户名来运行。
-v variable_list : 定义export 到本作业的环境变量的扩展列表。
-V : 表明qsub 命令的所有环境变量都export 到此作业。
-W additional_attributes : 作业的其它属性。
-z : 指明qsub 命令提交作业后,不在终端显示作业号。

(2) 运行脚本同LINUX 下一般的运行脚本文件。
[注]:脚本文件中的mpirun_rsh 命令行中的节点列表文件要用环境变量表示
$PBS_NODEFILE,这个环境变量表示由pbs 自动分配给作业的节点列表;
节点数为命令行中指定的进程数。
格式如下:
mpirun_rsh –np 进程数 –hostfile $PBS_NODEFILE 可执行程序名

五 举个栗子

pthread2.pbs(用来执行 pthread2.exe文件,并传递两个main函数参数: 10000000 线程数(此处为申请的系统内核数)

#!/bin/bash
#PBS -N pthread
#PBS -q qstudent
#PBS -l nodes=1:ppn=16
#PBS -j oe

cd $PBS_O_WORKDIR
procs=$(cat $PBS_NODEFILE | wc -l)
date +%s.%N #输出程序开始时间
#./pthread2 1000000000 $procs 
uname -a
date +%s.%N #输出程序结束时间
#此空行不能省略

 提交命令 qsub pthread2.pbs  返回作业ID(此处为20246

查看作业,使用 qstat -R  ,C表示完成状态,Q表示在排队,R表示在运行   此处任务作业转台为C运行完了

作业结果保存在文件(name).o(job_id)中,此处为pthread.o20246

通过cat命令查看作业结果文件的内容。

原文地址:https://www.cnblogs.com/conver/p/12839916.html