Я студент-физик, пытающийся запустить исследовательское моделирование, имеющее стохастические элементы. Моделирование можно разбить на несколько невзаимодействующих частей, каждая часть которых эволюционирует случайным образом, поэтому взаимодействие между циклами не требуется.Перезапись и ошибки при запуске нескольких экземпляров кода Python
Я использую другой код/файл для последующего анализа результатов, возвращаемых всеми заданиями (что не связано с проблемой и поставляется только для того, чтобы представить четкое фоновое изображение того, что происходит).
Я использую HPC института (который я назову «кластер») для запуска нескольких копий моего кода, который является единственным .py-файлом, который ничего не читает из какого-либо другого файла (но создает выходные файлы). Каждая копия/реализация кода должна создавать уникальный рабочий каталог для каждой отдельной реализации кода, используя os.makedirs(path,exist_ok=True)
, а затем os.chdir(path)
. Я сделал уже многочисленные попытки запуска этого, заканчивая со следующими типами поведения:
- Некоторые из массива заданий, выполняющихся и ведут себя хорошо.
- Другие, перезаписывают друг друга (то есть как job1, так и job2 оба записывают в .txt-файл в каталоге job1)
- Другие просто не создают директорию вообще, но не умирают, поэтому я предполагаю, что они продолжают работать и, возможно, записывая мои данные где-то, о которых я не знаю и не могу получить доступ.
Эти поведения кажутся мне совершенно случайными, в том смысле, что я не знаю заранее, какое массивное задание будет работать безупречно и у которого будут рабочие места, такие как поведение 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
Я бы очень признателен за любую помощь, которую я могу получить решить эту проблему, как это удерживая нас от продвижения наших исследований. Если вам понадобится какая-то дополнительная информация, я буду рад предоставить их.
Спасибо!
Является ли ваша проблема по существу «В этом случае по какой-то причине два разных задания записываются в один и тот же файл».? – Evert
Гарантировано ли, что все «LSB_JOBINDEX» envvars уникальны внутри каждого процесса? Вы изучили (напечатали) 'os.environ ['LSB_JOBINDEX']'? – Evert
@Evert: проблема в том, что в некоторых случаях по некоторым причинам два разных задания записываются в одни и те же файлы (а не только в текстовый файл, но я думаю, что и в других файлах данных тоже очень плохо), но также что в некоторых случаях не все каталоги создаются. Я не знаю, связаны ли они или отдельные проблемы. –