Snakemake обрабатывает большой рабочий процесс медленно из-за длительной последовательной проверки завершения задания?> 100-кратное снижение скорости - PullRequest
0 голосов
/ 28 февраля 2019

Я работаю над довольно сложным рабочим процессом по созданию змей, который порождает несколько сотен тысяч рабочих мест.Все работает ... Рабочий процесс выполняется, создается DAG (благодаря новой реализации контрольной точки), но невыносимо медленно.Я думаю, что узким местом является проверка успешно выполненных заданий, прежде чем перейти к следующему.Более досадно, что он делает это последовательно для всех заданий, которые запускаются в пакете, а следующий пакет выполняется только тогда, когда все проверки успешны.Время выполнения каждого задания занимает около 1 или двух секунд и выполняется параллельно (по 1 ядру на задание), но затем змеевик выполняет циклическую проверку завершения задания по одному, занимая от 5 до 10 секунд на задание.Таким образом, весь процесс на партию занимает минуты.См. Часть журнала ниже, которая показывает различные временные метки последовательных заданий, выполняемых в одном пакете.Разница между временными метками составляет примерно 11 секунд

Finished job 42227. 5853 of 230419 steps (3%) done [Thu Feb 28 09:41:09 2019] Finished job 119645. 5854 of 230419 steps (3%) done [Thu Feb 28 09:41:21 2019] Finished job 161354. 5855 of 230419 steps (3%) done [Thu Feb 28 09:41:32 2019] Finished job 160224. 5856 of 230419 steps (3%) done [Thu Feb 28 09:41:42 2019] Finished job 197063. 5857 of 230419 steps (3%) done [Thu Feb 28 09:41:53 2019] Finished job 200063. 5858 of 230419 steps (3%) done [Thu Feb 28 09:42:04 2019] Finished job 45227. 5859 of 230419 steps (3%) done [Thu Feb 28 09:42:15 2019] Finished job 44097. 5860 of 230419 steps (3%) done [Thu Feb 28 09:42:26 2019] Finished job 5387. 5861 of 230419 steps (3%) done [Thu Feb 28 09:42:37 2019] Finished job 158354. 5862 of 230419 steps (3%) done [Thu Feb 28 09:42:48 2019]

. Таким образом, для 20 параллельных процессов 2 секунды используются для вычислений, но затем они останавливаются на 20x11 = 220 секунд, прежде чем продолжить обработку следующей20 заданий.

В приведенном выше проге у меня было около 200K + заданий.Если я уменьшу время между журналами, станет намного короче:

Finished job 2630. 5 of 25857 steps (0.02%) done [Thu Feb 28 10:14:31 2019] Finished job 886. 6 of 25857 steps (0.02%) done [Thu Feb 28 10:14:31 2019] Finished job 9606. 7 of 25857 steps (0.03%) done [Thu Feb 28 10:14:31 2019] Finished job 4374. 8 of 25857 steps (0.03%) done [Thu Feb 28 10:14:32 2019] Finished job 6118. 9 of 25857 steps (0.03%) done [Thu Feb 28 10:14:32 2019] Finished job 7862. 10 of 25857 steps (0.04%) done [Thu Feb 28 10:14:32 2019] Finished job 278. 11 of 25857 steps (0.04%) done [Thu Feb 28 10:14:32 2019] Finished job 2022. 12 of 25857 steps (0.05%) done [Thu Feb 28 10:14:33 2019]

С 25K заданиями время проверки теперь составляет <1 секунду. </p>

Я надеюсь, что яздесь отсутствует аргумент или какой-либо параметр, но я боюсь, что это может быть что-то нетривиальное.

Я запускаю snakemake со следующими флагами: snakemake --keep-going --snakefile My.Snakefile --configfileconfig.yaml -j 23 --max-jobs-per-second 23

Мой рабочий процесс выполняется локально в 24-ядерной системе с оперативной памятью 256 ГБ.

Любая помощь для ускорения работыбудет принята с благодарностью!

Джон

1 Ответ

0 голосов
/ 05 марта 2019

Я «решил» свою проблему на данный момент, заменив части «один ко многим к одному» моего рабочего процесса параллельным вызовом GNU.

Pro:

  • Нетпроверка файлов, поэтому устранены накладные расходы на создание змей
  • Устранена необходимость в контрольных точках
  • Упрощенный DAG

Con:

  • Проверка файлов отсутствуеттаким образом, неудачные задания легче получить, и нужно будет переделывать целые вычислительные разделы рабочего процесса, а не только файлы, которые дают сбой.
  • Нужно погрузиться в другие журналы, чтобы выяснить, что именно пошло не так.

Я предлагаю использовать опцию --halt с 'now, fail = 1' и опцией --joblog для параллельного поиска проблемных файлов.

В тестовом набореЯ сократил время вычислений с 4 часов до 15 минут.

Я все еще чувствую, что змеиное мастерство должно как-то справиться с этим, но мне нужно двигаться дальше с моим проектом.

...