一个多快的速度通过qsub提交的连续和独立的工作?(How fast can one submit

2019-08-04 00:22发布

这个问题关系到PBS没有工作时,输出忙碌 。 即一些我提交作业的没有产生输出时,PBS /扭矩是“忙”。 我想,这是繁忙的时候,许多工作正在提交一个又一个,当它恰巧,以这种方式提交的工作,我经常收到一些不产生任何输出。

我这里还有一些代码。

假设我有一个名为“x_analyse.py”一个Python脚本,作为其输入含有一些数据文件,并分析存储在文件中的数据:

./x_analyse.py data_1.pkl

现在,假设我需要:(1)准备N个这样的数据文件:data_1.pkl,data_2.pkl,...,data_N.pkl(2)对他们每个人的“x_analyse.py”的工作,并将结果写入为他们每个人的文件。 (3)由于不同的数据文件的分析都是相互独立的,我将使用PBS /转矩来运行它们平行以节省时间。 (我认为这基本上是一个“尴尬的并行问题”。)

我有这个python脚本上面做:

import os
import sys
import time

N = 100

for k in range(1, N+1):
    datafilename = 'data_%d' % k
    file = open(datafilename + '.pkl', 'wb')
    #Prepare data set k, and save it in the file
    file.close()

    jobname = 'analysis_%d' % k
    file = open(jobname + '.sub', 'w')
    file.writelines( [ '#!/bin/bash\n',
                       '#PBS -N %s\n' % jobname,
                       '#PBS -o %s\n' % (jobname + '.out'),
                       '#PBS -q compute\n' ,
                       '#PBS -j oe\n' ,
                       '#PBS -l nodes=1:ppn=1\n' ,
                       '#PBS -l walltime=5:00:00\n' ,
                       'cd $PBS_O_WORKDIR\n' ,
                       '\n' ,
                       './x_analyse.py %s\n' % (datafilename + '.pkl') ] ) 
    file.close()

    os.system('qsub %s' % (jobname + '.sub')) 

    time.sleep(2.)

该脚本准备要分析一组数据,将其保存到一个文件,写一个PBS提交文件进行分析这组数据,提交工作要做,然后与下一组数据再次移动到做同样的, 等等。

正因为如此,当脚本运行,作业ID列表打印到标准输出作为作业提交。 “ls”的显示,有N个.SUB文件和N .pkl数据文件。 “qstat命令”显示,所有作业正在运行,与状态“R”,然后被完成,状态“C”。 然而,后来,“ls”的显示,有N的.out输出文件不是通过“x_analyse.py”产生的N-结果文件少,少。 实际上,没有输出被一些作业的生产。 如果我要清除一切,并重新运行上面的脚本,我会得到相同的行为,具有一定的作业(但不是必需的那些相同的最后一次)不产生任何输出。

有人建议,通过增加提交的连续作业之间的等待时间,情况有所改善。

time.sleep(10.) #or some other waiting time

但我觉得这不是最满意的,因为我已经试过0.1秒,0.5秒,1.0秒,2.0秒,3.0S,其中没有一个真正的帮助。 我已被告知,50多岁的等待时间似乎做工精细,但如果我必须提交100个职位,等待时间约为5000S,这似乎是相当长的。

我曾尝试减少用于提交作业,而不是数组时代“的qsub”的数量。 我会准备好所有的数据文件和以前一样,但只有一个提交文件,“analyse_all.sub”:

#!/bin/bash                                                                                                                                                    
#PBS -N analyse                                                                                                                            
#PBS -o analyse.out                                                                                                                        
#PBS -q compute                                                                                                                                                
#PBS -j oe                                                                                                                                                     
#PBS -l nodes=1:ppn=1                                                                                                                                          
#PBS -l walltime=5:00:00                                                                                                                                       
cd $PBS_O_WORKDIR

./x_analyse.py data_$PBS_ARRAYID.pkl

然后用提交

qsub -t 1-100 analyse_all.sub

但即使这样,一些工作还没有产生输出。

这是个常见的问题吗? 我做不对的事? 正在作业提交之间等待的最佳解决方案? 我能做些什么来改善呢?

在此先感谢您的帮助。

编辑1:

我使用的是扭力版本2.4.7和毛伊岛的3.3版本。

此外,与作业ID 1184430.mgt1假设工作不产生输出和工作与作业ID预期1184431.mgt1产生输出,当我使用“tracejob”对这些我得到如下:

[batman@gotham tmp]$tracejob 1184430.mgt1
/var/spool/torque/server_priv/accounting/20121213: Permission denied
/var/spool/torque/mom_logs/20121213: No such file or directory
/var/spool/torque/sched_logs/20121213: No such file or directory

Job: 1184430.mgt1

12/13/2012 13:53:13  S    enqueuing into compute, state 1 hop 1
12/13/2012 13:53:13  S    Job Queued at request of batman@mgt1, owner = batman@mgt1, job name = analysis_1, queue = compute
12/13/2012 13:53:13  S    Job Run at request of root@mgt1
12/13/2012 13:53:13  S    Not sending email: User does not want mail of this type.
12/13/2012 13:54:48  S    Not sending email: User does not want mail of this type.
12/13/2012 13:54:48  S    Exit_status=135 resources_used.cput=00:00:00  resources_used.mem=15596kb resources_used.vmem=150200kb resources_used.walltime=00:01:35
12/13/2012 13:54:53  S    Post job file processing error
12/13/2012 13:54:53  S    Email 'o' to batman@mgt1 failed: Child process '/usr/lib/sendmail -f adm batman@mgt1' returned 67 (errno 10:No child processes)
[batman@gotham tmp]$tracejob 1184431.mgt1
/var/spool/torque/server_priv/accounting/20121213: Permission denied
/var/spool/torque/mom_logs/20121213: No such file or directory
/var/spool/torque/sched_logs/20121213: No such file or directory

Job: 1184431.mgt1

12/13/2012 13:53:13  S    enqueuing into compute, state 1 hop 1
12/13/2012 13:53:13  S    Job Queued at request of batman@mgt1, owner = batman@mgt1, job name = analysis_2, queue = compute
12/13/2012 13:53:13  S    Job Run at request of root@mgt1
12/13/2012 13:53:13  S    Not sending email: User does not want mail of this type.
12/13/2012 13:53:31  S    Not sending email: User does not want mail of this type.
12/13/2012 13:53:31  S    Exit_status=0 resources_used.cput=00:00:16 resources_used.mem=19804kb resources_used.vmem=154364kb resources_used.walltime=00:00:18

编辑2:对于不产生输出,“qstat命令-f”工作返回以下内容:

[batman@gotham tmp]$qstat -f 1184673.mgt1
Job Id: 1184673.mgt1   
Job_Name = analysis_7
Job_Owner = batman@mgt1
resources_used.cput = 00:00:16
resources_used.mem = 17572kb
resources_used.vmem = 152020kb
resources_used.walltime = 00:01:36
job_state = C
queue = compute
server = mgt1
Checkpoint = u
ctime = Fri Dec 14 14:00:31 2012
Error_Path = mgt1:/gpfs1/batman/tmp/analysis_7.e1184673
exec_host = node26/0
Hold_Types = n
Join_Path = oe
Keep_Files = n
Mail_Points = a
mtime = Fri Dec 14 14:02:07 2012
Output_Path = mgt1.gotham.cis.XXXX.edu:/gpfs1/batman/tmp/analysis_7.out
Priority = 0
qtime = Fri Dec 14 14:00:31 2012
Rerunable = True
Resource_List.nodect = 1
Resource_List.nodes = 1:ppn=1
Resource_List.walltime = 05:00:00
session_id = 9397
Variable_List = PBS_O_HOME=/gpfs1/batman,PBS_O_LANG=en_US.UTF-8, PBS_O_LOGNAME=batman,
    PBS_O_PATH=/gpfs1/batman/bin:/usr/mpi/gcc/openmpi-1.4/bin:/gpfs1/batman/workhere/instal
    ls/mygnuplot-4.4.4/bin/:/gpfs2/condor-7.4.4/bin:/gpfs2/condor-7.4.4/sb
    in:/usr/lib64/openmpi/1.4-gcc/bin:/usr/kerberos/bin:/usr/local/bin:/bi
    n:/usr/bin:/opt/moab/bin:/opt/moab/sbin:/opt/xcat/bin:/opt/xcat/sbin,
    PBS_O_MAIL=/var/spool/mail/batman,PBS_O_SHELL=/bin/bash,
    PBS_SERVER=mgt1,PBS_O_WORKDIR=/gpfs1/batman/tmp,
    PBS_O_QUEUE=compute,PBS_O_HOST=mgt1
sched_hint = Post job file processing error; job 1184673.mgt1 on host node
    26/0Unknown resource type  REJHOST=node26 MSG=invalid home directory '
    /gpfs1/batman' specified, errno=116 (Stale NFS file handle)
etime = Fri Dec 14 14:00:31 2012
exit_status = 135  
submit_args = analysis_7.sub
start_time = Fri Dec 14 14:00:31 2012
Walltime.Remaining = 1790
start_count = 1
fault_tolerant = False
comp_time = Fri Dec 14 14:02:07 2012

与产生输出工作比较:

[batman@gotham tmp]$qstat -f 1184687.mgt1
Job Id: 1184687.mgt1
Job_Name = analysis_1
Job_Owner = batman@mgt1
resources_used.cput = 00:00:16
resources_used.mem = 19652kb
resources_used.vmem = 162356kb
resources_used.walltime = 00:02:38
job_state = C
queue = compute
server = mgt1
Checkpoint = u
ctime = Fri Dec 14 14:40:46 2012
Error_Path = mgt1:/gpfs1/batman/tmp/analysis_1.e118468
    7
exec_host = ionode2/0
Hold_Types = n
Join_Path = oe
Keep_Files = n
Mail_Points = a
mtime = Fri Dec 14 14:43:24 2012
Output_Path = mgt1.gotham.cis.XXXX.edu:/gpfs1/batman/tmp/analysis_1.out
Priority = 0
qtime = Fri Dec 14 14:40:46 2012
Rerunable = True   
Resource_List.nodect = 1
Resource_List.nodes = 1:ppn=1
Resource_List.walltime = 05:00:00
session_id = 28039 
Variable_List = PBS_O_HOME=/gpfs1/batman,PBS_O_LANG=en_US.UTF-8,
    PBS_O_LOGNAME=batman,
    PBS_O_PATH=/gpfs1/batman/bin:/usr/mpi/gcc/openmpi-1.4/bin:/gpfs1/batman/workhere/instal
    ls/mygnuplot-4.4.4/bin/:/gpfs2/condor-7.4.4/bin:/gpfs2/condor-7.4.4/sb
    in:/usr/lib64/openmpi/1.4-gcc/bin:/usr/kerberos/bin:/usr/local/bin:/bi
    n:/usr/bin:/opt/moab/bin:/opt/moab/sbin:/opt/xcat/bin:/opt/xcat/sbin,
    PBS_O_MAIL=/var/spool/mail/batman,PBS_O_SHELL=/bin/bash,
    PBS_SERVER=mgt1,PBS_O_WORKDIR=/gpfs1/batman/tmp,
    PBS_O_QUEUE=compute,PBS_O_HOST=mgt1
etime = Fri Dec 14 14:40:46 2012
exit_status = 0
submit_args = analysis_1.sub
start_time = Fri Dec 14 14:40:47 2012
Walltime.Remaining = 1784
start_count = 1

看来,对于一个退出状态是0而不是其他。

编辑3:

从“qstat命令-f”输出像以上这样的,看来这个问题有事情做与“陈旧NFS文件handle'in后作业文件处理。 提交成百上千的测试工作,我已经能够确定一些能产生失败的作业节点。 通过ssh荷兰国际集团到这些,我可以找到丢失的PBS输出文件/var/spool/torque/spool ,在这里我也可以看到属于其他用户的输出文件。 关于这些问题的节点的一个奇怪的是,如果他们选择要使用的唯一节点,作业运行在他们的罚款。 这个问题只有当它们与其它节点的混合就产生了。

因为我不知道如何解决后作业处理“陈旧NFS文件句柄”,我避免这些节点通过提交“虚拟”的工作给他们

echo sleep 60 | qsub -lnodes=badnode1:ppn=2+badnode2:ppn=2

之前提交真正的就业机会。 现在,所有的工作产生预期的输出,而且也没有必要连续提交之前要等待。

Answer 1:

我看到两个问题tracejob从发生故障的作业输出。

首先,它是Exit_status=135 。 这个退出状态是不是扭矩错误代码,但它是脚本返回一个退出状态x_analyse.py 。 Python没有对使用的惯例sys.exit()函数和的源135代码可能是在脚本中使用的模块中的一个。

第二个问题是后期的工作文件处理的失败。 这可能表明一个配置错误的节点。

从现在开始,我猜。 由于成功的工作需要大约00:00:16,这可能是真实的,与50秒的延迟你把所有的工作登陆到第一个可用的节点。 以较小的延迟,你涉足多个节点,并最终创下了配置错误的节点或得到两个脚本在单个节点上同时执行。 我将修改提交脚本添加一行

  'echo $PBS_JOBID :: $PBS_O_HOST >> debug.log',

到生成的Python脚本.sub文件。 这将执行主机的名称添加到这将驻留在一个共同的文件系统,如果我理解正确的您的设置的debug.log。

然后,你(或扭矩管理)可能要在MOM未处理的输出文件spool在失败的节点上目录,以获得进一步的诊断一些信息。



文章来源: How fast can one submit consecutive and independent jobs with qsub?