2016-04-01 6 views
0

Я студент-физик, пытающийся запустить исследовательское моделирование, имеющее стохастические элементы. Моделирование можно разбить на несколько невзаимодействующих частей, каждая часть которых эволюционирует случайным образом, поэтому взаимодействие между циклами не требуется.Перезапись и ошибки при запуске нескольких экземпляров кода Python

Я использую другой код/​​файл для последующего анализа результатов, возвращаемых всеми заданиями (что не связано с проблемой и поставляется только для того, чтобы представить четкое фоновое изображение того, что происходит).

Я использую HPC института (который я назову «кластер») для запуска нескольких копий моего кода, который является единственным .py-файлом, который ничего не читает из какого-либо другого файла (но создает выходные файлы). Каждая копия/реализация кода должна создавать уникальный рабочий каталог для каждой отдельной реализации кода, используя os.makedirs(path,exist_ok=True), а затем os.chdir(path). Я сделал уже многочисленные попытки запуска этого, заканчивая со следующими типами поведения:

  1. Некоторые из массива заданий, выполняющихся и ведут себя хорошо.
  2. Другие, перезаписывают друг друга (то есть как job1, так и job2 оба записывают в .txt-файл в каталоге job1)
  3. Другие просто не создают директорию вообще, но не умирают, поэтому я предполагаю, что они продолжают работать и, возможно, записывая мои данные где-то, о которых я не знаю и не могу получить доступ.

Эти поведения кажутся мне совершенно случайными, в том смысле, что я не знаю заранее, какое массивное задание будет работать безупречно и у которого будут рабочие места, такие как поведение 2, поведение 3 или оба (это может быть случай, который для большого массива заданий, у меня будут некоторые работы, которые работают хорошо, некоторые показывают поведение 2, а некоторые показывают поведение 3, а также всего 2 или только 3).

Я довольно много попробовал все, что я мог бы найти в Интернете, например, я где-то читал, что общая проблема использования os.makedirs что-то о umask вопроса и что добавление os.umask(0) перед вызовом является его хорошей практикой и поэтому я добавил его. Я также читал, что иногда кластер может повесить трубку и, таким образом, называть time.sleep в течение нескольких секунд, и попытка повторения может работать, поэтому я тоже это сделал. Ничто не решило проблему еще ...

Я прикрепляю часть кода, которая может быть виновницей для проверки, где N,L,T и DT являются числами, которые я установил ранее в коде, где я также импортирую библиотеки и такие (Примечание что офис компьютер работает под управлением ОС Windows, в то время как кластер работает Linux, поэтому я использую os.name просто установить свои каталоги в соответствии с операционной системой я бегу, так что код может работать без изменений на обеих системах):

when = datetime.datetime.now() 
date = when.date() 
worker_num = os.environ['LSB_JOBINDEX'] 
pid = os.environ['LSB_JOBID'] 
work = 'worker'+worker_num 
txt_file = 'N{}_L{}_T{}_DT{}'.format(N, L,T, DT) 
if os.name == 'nt': 
    path = 'D:/My files/Python Scripts/Cluster/{}/{}/{}'.format(date,txt_file,work) 
else: 
    path = '/home/labs/{}/{}/{}'.format(date,txt_file,work) 
    os.umask(0)  
try: 
    os.makedirs(path, exist_ok=True) 
    os.chdir(path) 
except OSError: 
    time.sleep(10) 
    with open('/home/labs/error_{}_{}.txt'.format(txt_file,work),'a+') as f: 
     f.write('In {}, at time {}, job ID: {}, which was sent to queue: {}, working on host: {}, failed to create path: {} '.format(date, hour, pid,os.environ['LSB_QUEUE'], os.environ['LSB_HOSTS'], path))  
    os.makedirs(path, exist_ok=True) 
    os.chdir(path) 

кластера среда - среда LSF. Чтобы выполнить несколько реализаций моего кода, я использую команду «arrayjob», то есть используя LSF для отправки нескольких экземпляров (в этом случае 100) этого же кода нескольким различным ЦП на разных (или одинаковых) хостах в кластере.

Я также прилагаю примеры, показывающие ошибки, описанные выше. Примера поведения 2 является следующим выходным файлом:

Stst progress = 10.0% after 37 seconds 

Stst progress = 10.0% after 42 seconds 

Stst progress = 20.0% after 64 seconds 

Stst progress = 20.0% after 75 seconds 

Stst progress = 30.0% after 109 seconds 

Stst progress = 40.0% after 139 seconds 

worker99 is 5.00% finished after 0.586 hours and will finish in approx 11.137 hours 
worker99 is 5.00% finished after 0.691 hours and will finish in approx 13.130 hours 
worker99 is 10.00% finished after 1.154 hours and will finish in approx 10.382 hours 
worker99 is 10.00% finished after 1.340 hours and will finish in approx 12.062 hours 
worker99 is 15.00% finished after 1.721 hours and will finish in approx 9.753 hours 
worker99 is 15.00% finished after 1.990 hours and will finish in approx 11.275 hours 
worker99 is 20.00% finished after 2.287 hours and will finish in approx 9.148 hours 
worker99 is 20.00% finished after 2.633 hours and will finish in approx 10.532 hours 
worker99 is 25.00% finished after 2.878 hours and will finish in approx 8.633 hours 
worker99 is 25.00% finished after 3.275 hours and will finish in approx 9.826 hours 
worker99 is 30.00% finished after 3.443 hours and will finish in approx 8.033 hours 
worker99 is 30.00% finished after 3.921 hours and will finish in approx 9.149 hours 
worker99 is 35.00% finished after 4.015 hours and will finish in approx 7.456 hours 
worker99 is 35.00% finished after 4.566 hours and will finish in approx 8.480 hours 
worker99 is 40.00% finished after 4.616 hours and will finish in approx 6.924 hours 
worker99 is 45.00% finished after 5.182 hours and will finish in approx 6.334 hours 
worker99 is 40.00% finished after 5.209 hours and will finish in approx 7.814 hours 
worker99 is 50.00% finished after 5.750 hours and will finish in approx 5.750 hours 
worker99 is 45.00% finished after 5.981 hours and will finish in approx 7.310 hours 
worker99 is 55.00% finished after 6.322 hours and will finish in approx 5.173 hours 
worker99 is 50.00% finished after 6.623 hours and will finish in approx 6.623 hours 
worker99 is 60.00% finished after 6.927 hours and will finish in approx 4.618 hours 
worker99 is 55.00% finished after 7.266 hours and will finish in approx 5.945 hours 
worker99 is 65.00% finished after 7.513 hours and will finish in approx 4.046 hours 
worker99 is 60.00% finished after 7.928 hours and will finish in approx 5.285 hours 
worker99 is 70.00% finished after 8.079 hours and will finish in approx 3.463 hours 
worker99 is 65.00% finished after 8.580 hours and will finish in approx 4.620 hours 
worker99 is 75.00% finished after 8.644 hours and will finish in approx 2.881 hours 
worker99 is 80.00% finished after 9.212 hours and will finish in approx 2.303 hours 
worker99 is 70.00% finished after 9.227 hours and will finish in approx 3.954 hours 
worker99 is 85.00% finished after 9.778 hours and will finish in approx 1.726 hours 
worker99 is 75.00% finished after 9.882 hours and will finish in approx 3.294 hours 
worker99 is 90.00% finished after 10.344 hours and will finish in approx 1.149 hours 
worker99 is 80.00% finished after 10.532 hours and will finish in approx 2.633 hours 

.txt файл, как это сделали с целью отслеживания прогресса Кодекса, обычно создаются по каждой работе в отдельности и хранится в его собственном каталог. В этом случае по какой-то причине два разных задания записываются в один и тот же файл.Это проверяется при наблюдении другой .txt файл, который создается сразу после создания каталога и рабочего каталога определяется:

In 2016-04-01, at time 02:11:51.851948, job ID: 373244, which was sent to 
queue: new-short, working on host: cn129.wexac.weizmann.ac.il, has created 
path: /home/labs/2016-04-02/N800_L1600_T10_DT0.5/worker99 

In 2016-04-01, at time 02:12:09.968549, job ID: 373245, which was sent to 
queue: new-medium, working on host: cn293.wexac.weizmann.ac.il, has created 
path: /home/labs/2016-04-02/N800_L1600_T10_DT0.5/worker99 

Я бы очень признателен за любую помощь, которую я могу получить решить эту проблему, как это удерживая нас от продвижения наших исследований. Если вам понадобится какая-то дополнительная информация, я буду рад предоставить их.
Спасибо!

+0

Является ли ваша проблема по существу «В этом случае по какой-то причине два разных задания записываются в один и тот же файл».? – Evert

+0

Гарантировано ли, что все «LSB_JOBINDEX» envvars уникальны внутри каждого процесса? Вы изучили (напечатали) 'os.environ ['LSB_JOBINDEX']'? – Evert

+0

@Evert: проблема в том, что в некоторых случаях по некоторым причинам два разных задания записываются в одни и те же файлы (а не только в текстовый файл, но я думаю, что и в других файлах данных тоже очень плохо), но также что в некоторых случаях не все каталоги создаются. Я не знаю, связаны ли они или отдельные проблемы. –

ответ

0

Глядя на журнал ошибок вы указали это показывает, что два рабочих места (373244 и 373245) направляются к двум разным очередям:

В 2016-04-01, во время 02: 11: 51,851948, вакансии ID: 373244, который был отправлен в очереди: новый-короткий ...

в 2016-04-01, во время 02: 12: 09,968549, работа ID: 373245, который был отправлен в очереди : new-medium, ...

Это говорит о том, что задание массива bei ng выдается дважды в две отдельные очереди. Вы можете посмотреть код, выдающий задание массива, чтобы он работал только один раз, отправляя задание в одну очередь.

Выдача задания массива более одного раза приведет к поведению, которое вы видите, я думаю.