#memory #snakemake
#память #snakemake
Вопрос:
Мне нужно прогнать 20 геномов с помощью snakemake. Поэтому я использую основные шаги, такие как выравнивание, дубликаты разметки, перестройка, повторная калибровка базового вызова и так далее в snakemake. На компьютере, который я использую, до 40 виртуальных ядер и 70 ГБ памяти, и я запускаю программу следующим образом.
snakemake -s Snakefile -j 40
Это работает нормально, но как только он запускает markduplicates вместе с другими программами, он останавливается, поскольку я думаю, что он перегружает 70 доступных гигабайт и выходит из строя.
Есть ли способ установить в snakemake ограничение памяти на 60 ГБ для всех запущенных программ? Я бы хотел, чтобы snakemake выполнял меньше заданий, чтобы оставаться ниже 60 гигабайт, некоторые из шагов требуют много памяти. Приведенная ниже командная строка также вышла из строя и использовала больше памяти, чем выделено.
snakemake -s Snakefile -j 40 --resources mem_mb=60000
Ответ №1:
Недостаточно указать --resources mem_mb=60000
в командной строке, вам также необходимо указать mem_mb
правила, которые вы хотите контролировать. Например.:
rule markdups:
input: ...
ouptut: ...
resources:
mem_mb= 20000
shell: ...
rule sort:
input: ...
ouptut: ...
resources:
mem_mb= 1000
shell: ...
При этом задания будут отправляться таким образом, чтобы общий объем не превышал 60 ГБ за один раз. Например. это будет продолжаться не более 3 markdups
заданий, или 2 задания markdups, и 20 sort
заданий, или 60 sort
заданий.
Правила без mem_mb
этого не будут учитываться при использовании памяти, что, вероятно, нормально для правил, которые, например, копируют файлы и не требуют много памяти.
Сколько назначить каждому правилу, в основном зависит от вашего предположения. top
а команды htop помогают отслеживать задания и определять, сколько памяти им нужно. Можно было бы разработать более сложные решения, но я не уверен, что оно того стоит… Если вы используете планировщик заданий, такой как slurm, файлы журналов должны указывать максимальное использование памяти для каждого задания, чтобы вы могли использовать их для будущих рекомендаций. Возможно, у других есть лучшие предложения.
Комментарии:
1. Большое спасибо.. Что, если у меня есть 10 правил? Должен ли я включать mem_mb во все правила, а также как я могу рассчитать, сколько нужно поместить в каждое правило? Извините, что на данном этапе это немного сбивает меня с толку.
2. @user3224522 Не беспокойтесь — я отредактировал ответ, чтобы ответить на ваш комментарий.
3. Спасибо! если для bwa mem у меня есть threads = 3 и mem_mb = 30000, будет ли это означать 30000 * 3? или для всех заданий независимо от потоков оно не будет превышать 30G?
4. Я почти уверен
thread=3
, что аргумент не будет учитываться при вычислении использования памяти… Просто поэкспериментируйте с этим и посмотрите…