這個問題與pbs job no output when busy。即當PBS/Torque「忙」時,我提交的一些工作不會輸出。我認爲,當許多工作一個接一個地提交時,以及以這種方式提交的工作時,它會變得更加繁忙,我經常會遇到一些不會產生任何輸出的工作。用qsub提交連續和獨立的作業有多快?
這裏有一些代碼。
假設我有一個名爲「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/Torque並行運行以節省時間。 (我認爲這基本上是一個「尷尬的並行問題」。)
我有這樣的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提交文件,提交作業來完成它,然後移動到與下一組數據一樣的地方,等等。
事實上,腳本運行時,作業標識列表會在作業提交時打印到標準輸出。 'ls'表示有N個.sub文件和N個.pkl數據文件。 'qstat'表示所有作業正在運行,狀態爲'R',然後完成,狀態爲'C'。但是,之後,'ls'顯示少於N .out輸出文件,並且少於N個由「x_analyse.py」生成的結果文件。實際上,一些工作不會產生任何產出。如果我要清除所有內容,然後重新運行上面的腳本,我會得到相同的行爲,但有一些作業(但不必與上次相同)不產生任何輸出。
有人建議,通過增加提交連續作業之間的等待時間,事情會改善。
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」對這些我得到如下:
[[email protected] 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 [email protected], owner = [email protected], job name = analysis_1, queue = compute
12/13/2012 13:53:13 S Job Run at request of [email protected]
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 [email protected] failed: Child process '/usr/lib/sendmail -f adm [email protected]' returned 67 (errno 10:No child processes)
[[email protected] 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 [email protected], owner = [email protected], job name = analysis_2, queue = compute
12/13/2012 13:53:13 S Job Run at request of [email protected]
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' 工作返回以下結果:
[[email protected] tmp]$qstat -f 1184687.mgt1
Job Id: 1184687.mgt1
Job_Name = analysis_1
Job_Owner = [email protected]
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
:作爲與產生輸出的作業相比
[[email protected] tmp]$qstat -f 1184673.mgt1
Job Id: 1184673.mgt1
Job_Name = analysis_7
Job_Owner = [email protected]
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
看起來一個的退出狀態是0而不是另一個。
編輯3:
從「qstat命令-f」輸出像以上這樣的,看來這個問題有事情做與「陳舊NFS文件handle'in後作業文件處理。通過提交數百個測試作業,我可以識別出許多產生失敗作業的節點。通過ssh
這些,我可以在/var/spool/torque/spool
找到丟失的PBS輸出文件,我也可以看到屬於其他用戶的輸出文件。關於這些有問題的節點的一個奇怪的事情是,如果它們是選擇使用的唯一節點,那麼作業對它們運行良好。這個問題只有在與其他節點混合時纔會出現。
因爲我不知道如何解決後作業處理「陳舊NFS文件句柄」,我提交了真正的工作之前提交「虛擬」的工作給他們
echo sleep 60 | qsub -lnodes=badnode1:ppn=2+badnode2:ppn=2
避免這些節點。現在所有的工作都按預期產出產量,並且在連續提交之前不需要等待。
我不知道答案,但我會嘗試的第一件事是立即提交幾份工作,然後提交相同數量的工作,比如說,延遲60秒。如果您在產出產出的職位比例中看不到顯着差異,那麼計時可能不是問題。也許你的'x_analyse.py'有一個問題,有時會導致它沒有輸出。 –
哪個版本的扭矩?哪個調度程序。扭矩會在日誌中留下一些有關世界可讀的作業的數據。作業完成後,你可以用'tracejob'來取一些。 –
@DmitriChubarov我使用扭矩版本2.4.7和茂宜版本3.3 – Jack