由于冗长的顺序检查作业完成,Snakemake处理大型工作流程变慢? >减速100倍

问题描述 投票:3回答:1

我正在开发一个相当复杂的snakemake工作流程,它可以产生数十万个工作。一切正常......工作流程执行,DAG被创建(感谢新的检查点实现),但速度难以忍受。我认为瓶颈在于检查成功完成的工作,然后继续下一步。更令人讨厌的是,它按顺序为批处理中启动的所有作业执行此操作,而下一批处理仅在所有检查成功时执行。每个作业的执行时间大约需要1或2秒,并且是并行完成的(每个作业1个核心),但是snakemake然后循环完成作业完成检查,每个作业需要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秒用于计算,但随后在继续处理接下来的20个作业之前空闲20x11 = 220秒。

在上面的运行中,我有大约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秒。

我希望我在这里错过一个论点,或者一些参数,但我担心这可能是一件非常重要的事情。

我使用以下标志运行snakemake:snakemake --keep-going --snakefile My.Snakefile --configfile config.yaml -j 23 --max-jobs-per-second 23

我在具有256 GB RAM的24核系统上本地运行我的工作流程。

任何有助于加快速度的帮助都将非常感激!

约翰

workflow bioinformatics snakemake
1个回答
3
投票

我现在通过调用GNU parallel来替换我的工作流程中的“一对多”部分来解决我的问题。

Pro的:

  • 没有文件检查,所以删除了snakemake开销
  • 删除了检查站的必要性
  • 简化日

反对的:

  • 没有文件检查,因此失败的作业不容易检索,并且必须重做整个计算工作流程的重要部分,而不仅仅是失败的文件。
  • 需要深入了解其他日志才能找到确实出错的地方。

我建议使用带有'now,fail = 1'的--halt选项和用于并行的--joblog选项来捕获有问题的文件。

在测试集上,我将计算时间从4小时减少到15分钟。

我仍然觉得snakemake应该能够以某种方式处理这个问题,但我需要继续我的项目。

© www.soinside.com 2019 - 2024. All rights reserved.