Ограничение количества одновременных процессов, запланированных кондором
Я использую Кондор, чтобы сделать пакеты из ~100 процессов в течение нескольких часов. После завершения этих процессов мне нужно запустить следующую серию прогонов с результатами из первой партии, и этот процесс повторяется десятки раз. Мой пул кондоров>100 ядер, и я хотел бы ограничить мой кластер кондоров только 100 процессами за раз, так что кондор начинает работать над следующим процессом только после завершения одного из первых процессов. Это возможно?
2 ответа
Вам необходимо использовать DAG Manager - это позволяет вам определять отношения родитель-потомок между заданиями, чтобы вы могли дождаться результатов от первого задания до начала второго задания.
DAGman также имеет параметр MAX_JOBS_RUNNING, который ограничивает общее количество активных заданий для вас.
Все это документировано в разделе 2.10 руководства по 8.4. Скорее всего, вам понадобится использовать какой-нибудь сценарий для создания файла DAG и иметь место для хранения промежуточных результатов прогонов - задания не могут передавать данные напрямую от родителя к потомку. Выходные данные собираются с первого запуска в рабочий каталог, а затем отправляются на следующее задание из рабочего каталога.
Похоже, вы просто запускаете задание с контрольными точками, а затем следующее задание считывает с этой контрольной точки, выполняет некоторые действия и записывает новую контрольную точку и т. Д. 10 раз. Я не уверен, почему вам нужно разбить его так, как у вас, почему бы просто не иметь скрипт-обертку, который ищет файл контрольных точек и использует его, или начинает с нуля?
Другой вариант - использовать "Требования" в файле отправки и перечислить только 100 машин или ядер, на которых может выполняться ваша работа. Что-то вроде:
Requirements = (machine == "astrolab01") || (machine == "astrolab02") || (machine == "astrolab03")
гарантирует, что вы никогда не запустите более 3 заданий одновременно. Если эти машины не имеют нескольких ядер, вам нужно сделать что-то вроде:
Requirements = (name == "slot1@astrolab01") || (name == "slot1@astrolab02")