2012-12-12 7 views
4

이 질문은 pbs job no output when busy과 관련 있습니다. PBS/Torque가 'busy'일 때 제출 한 작업 중 일부는 출력을 생성하지 않습니다. 나는 많은 일자리가 차례로 제출 될 때 그것이 더 바쁘다고 생각한다. 그렇게 그렇게되면, 이런 방식으로 제출 된 일자리 중 일부는 결과물을 산출하지 못한다.qsub에서 연속적이고 독립적 인 작업을 얼마나 빨리 수행 할 수 있습니까?

여기에 몇 가지 코드가 있습니다. 나는 그것의 입력으로 일부 데이터를 포함하는 파일을 소요하고, 파일에 저장된 데이터 분석 "x_analyse.py"라는 파이썬 스크립트가 있다고 가정

: 이제

./x_analyse.py data_1.pkl 

을, 내가 필요 가정 : (1) 데이터 파일 N 개를 준비하십시오 : data_1.pkl, data_2.pkl, ..., data_N.pkl (2) 각각에 대해 "x_analyse.py"를 실행하고 각각에 대해 결과를 파일에 작성하십시오 그들의. (3) 다른 데이터 파일의 분석은 모두 서로 독립적이므로 PBS/Torque를 사용하여 시간을 절약하기 위해 병렬로 실행합니다. (나는이 본질적으로 '쩔쩔 매게 병렬 문제'라고 생각합니다.)

내가 할 수있는이 파이썬 스크립트가 위의 : 스크립트는에 저장, 분석 할 데이터 세트를 준비

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"가 생성 한 결과 파일보다 적음을 보여줍니다. 결과적으로 일부 작업에서는 출력이 생성되지 않습니다. 내가 모든 것을 지우고 위의 스크립트를 다시 실행한다면 출력을 생성하지 않는 작업 (지난 번과 같은 작업은 필요하지 않음)을 사용하여 동일한 동작을 얻을 수 있습니다.

연속 작업 제출 사이의 대기 시간을 늘리면 상황이 개선 될 것이라고 제안되었습니다.

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

는하지만 내가 노력했기 때문에 이것이 가장 만족하지 기분이 0.1 초, 0.5 초, 1.0s, 2.0s를, 3.0s, 아무도 정말 도움이되지 않습니다. 나는 50 초 대기 시간이 잘 작동하는 것 같다고 들었다. 그러나 내가 100 개의 일자리를 제출해야한다면, 대기 시간은 약 5000 초가 될 것이고, 이것은 오랜 시간이 걸릴 것으로 보인다.

작업 배열을 제출하여 '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을 사용하고 있습니다.

[[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]gt1 
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 

: 나는 다음과 같은 가져 오려면 다음에 'tracejob'를 사용할 때

또한, 작업 ID 1184430.mgt1와 가정하자 작업, 1184431.mgt1 예상대로 출력을 생성 작업 ID와 아무 출력 작업을 생성하지 편집 2 :

[[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 

출력을 생성하는 작업에 비해 : 더 출력, 'qstat를 -f'을 생산하지 작업의 경우는 다음을 반환

하나의 종료 상태는 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 

에 '더미'작업을 제출하여 이러한 노드를 피하십시오. 이제는 모든 작업이 예상대로 출력을 내고 연속 제출 전에 기다릴 필요가 없습니다.

+0

답변을 모르지만 지연시키지 않고 여러 작업을 제출 한 다음 60 초 지연과 함께 동일한 수의 작업을 제출하는 것이 가장 좋습니다. 생산량을 창출하는 일자리의 비율에 큰 차이가 없다면 타이밍은 문제가 아닐 수도 있습니다. 아마 당신의'x_analyse.py'에 때때로 출력이 나오지 않는 문제가있을 것입니다. –

+1

어떤 토크 버전입니까? 어떤 스케줄러. 토크는 세계에서 읽을 수있는 로그의 작업에 대한 일부 데이터를 남깁니다. 작업이 완료된 후에'tracejob'을 사용하여 그 중 일부를 가져올 수 있습니다. –

+0

@DmitriChubarov 토크 버전 2.4.7과 마우이 버전 3.3을 사용하고 있습니다. – Jack

답변

2

나는 실패한 작업의 tracejob 출력의 두 가지 문제를 참조하십시오.

첫째는 Exit_status=135입니다. 이 종료 상태는 Torque 오류 코드가 아니지만 스크립트에 의해 반환 된 종료 상태 인 x_analyse.py입니다. 파이썬은 sys.exit() 함수 사용 규칙을 가지고 있지 않으며 135 코드의 소스는 스크립트에서 사용 된 모듈 중 하나에있을 수 있습니다.

두 번째 문제는 작업 파일 처리 후 실패입니다. 이는 잘못 구성된 노드를 나타낼 수 있습니다.

지금부터 나는 추측하고 있습니다. 성공적인 일자리는 00:00:16 정도 걸리므로, 50 초의 지연으로 모든 직업을 첫 번째 가용 노드에 착륙시키는 것이 사실 일 것입니다. 지연이 작을수록 더 많은 노드가 관련되어 결국에는 잘못 구성된 노드에 충돌하거나 단일 노드에서 두 개의 스크립트가 동시에 실행됩니다. 나는이 .sub 파일을 생성 파이썬 스크립트에 선

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

를 추가하는 스크립트를 제출 수정할 것입니다. 이렇게하면 실행 호스트의 이름이 debug.log에 추가됩니다.이 호스트 이름은 설치가 올바르게 이해되면 일반적인 파일 시스템에 상주합니다.

그런 다음 (또는 Torque 관리자) 장애 노드의 MOM spool 디렉토리에있는 처리되지 않은 출력 파일을 찾아 추가 진단을위한 정보를 얻을 수 있습니다.