我正在处理一个相当复杂的snakemake工作流,它产生了数十万个工作。一切正常..。工作流执行,DAG被创建(多亏了新的检查点实现),但是速度慢得令人难以忍受。我认为瓶颈是在继续到下一个工作之前检查成功完成的工作。更令人烦恼的是,它会对批处理中启动的所有作业进行顺序执行,并且下一批只在所有检查都成功时才执行。每个作业的执行时间大约需要1到2秒,并并行完成(每个作业有一个核心),但是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 -保持-snakefile My.Snakefile -configfile config.yaml -j 23 -最大-每秒23次作业
我是在本地运行我的工作流程在一个24核心系统,256 GB内存。
任何帮助,以加快速度将是非常感谢!
约翰
发布于 2019-03-05 16:54:37
我现在已经“解决”了我的问题,用调用GNU并行代替了我工作流程中的“一对多”部分。
专业人士:
康的:
我建议使用“now,fail=1”和--作业日志选项来并行捕获有问题的文件。
在测试集上,我将计算时间从4小时缩短到15分钟。
我仍然觉得snakemake应该能够以某种方式处理这个问题,但是我需要继续我的项目。
https://stackoverflow.com/questions/54922713
复制相似问题