이 질문은 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
에 '더미'작업을 제출하여 이러한 노드를 피하십시오. 이제는 모든 작업이 예상대로 출력을 내고 연속 제출 전에 기다릴 필요가 없습니다.
답변을 모르지만 지연시키지 않고 여러 작업을 제출 한 다음 60 초 지연과 함께 동일한 수의 작업을 제출하는 것이 가장 좋습니다. 생산량을 창출하는 일자리의 비율에 큰 차이가 없다면 타이밍은 문제가 아닐 수도 있습니다. 아마 당신의'x_analyse.py'에 때때로 출력이 나오지 않는 문제가있을 것입니다. –
어떤 토크 버전입니까? 어떤 스케줄러. 토크는 세계에서 읽을 수있는 로그의 작업에 대한 일부 데이터를 남깁니다. 작업이 완료된 후에'tracejob'을 사용하여 그 중 일부를 가져올 수 있습니다. –
@DmitriChubarov 토크 버전 2.4.7과 마우이 버전 3.3을 사용하고 있습니다. – Jack