Как быстро можно отправлять последовательные и независимые задания с помощью qsub?

Этот вопрос связан сPBS работа не выводится, когда занят, Т.е. некоторые задания, которые я отправляю, не выводят, когда PBS / Torque установлен 'занятый', Я полагаю, что это более загруженный процесс, когда многие задания представляются одна за другой, и, как это происходит, из заданий, представленных таким образом, я часто получаю такие, которые не производят никакого вывода.

Вот'некоторые коды.

Предположим, у меня есть скрипт на языке Python "x_analyse.py» он принимает в качестве входных данных файл, содержащий некоторые данные, и анализирует данные, хранящиеся в файле:

./x_analyse.py data_1.pkl

Теперь предположим, что мне нужно: (1) Подготовить N таких файлов данных: data_1.pkl, data_2.pkl, ..., data_N.pkl (2) Have "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 submit для анализа этого набора данных, отправляет задание на его выполнение и затем снова выполняет то же самое со следующим набором данных. , и так далее.

Таким образом, при запуске сценария список идентификаторов заданий выводится на стандартный вывод по мере отправки заданий. '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,0 с, ни один из которых не помог. Мне сказали, что время ожидания 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: я

с использованием Torque версии 2.4.7 и Maui версии 3.3.

Кроме того, предположим, что задание с идентификатором задания 1184430.mgt1 не производит вывод, а задание с идентификатором задания 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 'в обработке файла после работы. Отправив сотни тестовых заданий, я смог определить количество узлов, которые выдают сбойные задания. ОтsshНаходясь на них, я могу найти отсутствующие файлы вывода PBS в/var/spool/torque/spoolгде я также могу видеть выходные файлы, принадлежащие другим пользователям. Одна странная вещь в этих проблемных узлах состоит в том, что если они являются единственным узлом, выбранным для использования, задание на них работает нормально. Проблема возникает только тогда, когда они смешаны с другими узлами.

Так как я не знаю, как исправить обработку пост работы "Устаревший дескриптор файла NFS 'Я избегаю этих узлов, отправляяманекен» рабочие места для них

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

перед отправкой реальных работ. Теперь все задания выдают результат, как и ожидалось, и нет необходимости ждать последовательных представлений.

Ответы на вопрос(1)

Ваш ответ на вопрос