2012-12-12 33 views
4

這個問題與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 

避免這些節點。現在所有的工作都按預期產出產量,並且在連續提交之前不需要等待。

+0

我不知道答案,但我會嘗試的第一件事是立即提交幾份工作,然後提交相同數量的工作,比如說,延遲60秒。如果您在產出產出的職位比例中看不到顯着差異,那麼計時可能不是問題。也許你的'x_analyse.py'有一個問題,有時會導致它沒有輸出。 –

+1

哪個版本的扭矩?哪個調度程序。扭矩會在日誌中留下一些有關世界可讀的作業的數據。作業完成後,你可以用'tracejob'來取一些。 –

+0

@DmitriChubarov我使用扭矩版本2.4.7和茂宜版本3.3 – Jack

回答

2

我看到tracejob失敗作業的輸出有兩個問題。

首先它是Exit_status=135。此退出狀態不是扭矩錯誤代碼,而是由腳本返回的退出狀態,即x_analyse.py。 Python在使用sys.exit()函數時沒有約定,代碼的來源可能在腳本中使用的其中一個模塊中。

第二個問題是發佈作業文件處理失敗。這可能表示配置錯誤的節點。

從現在開始我猜測。由於成功的工作大約需要00:00:16,所以延遲50秒可能會讓所有工作都落在第一個可用節點上。延遲時間越短,涉及的節點就越多,最終會遇到錯誤配置的節點,或者在單個節點上同時執行兩個腳本。我將修改提交腳本添加一行

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

到生成.sub文件的Python腳本。如果我正確理解了你的設置,這會將執行主機的名稱添加到debug.log中,該名稱將駐留在通用文件系統上。

然後,您(或Torque管理員)可能需要查找故障節點上MOM spool目錄中的未處理輸出文件,以獲取進一步診斷的一些信息。