Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何立即将所有Snakemake作业提交到slurm集群_Python_Bioinformatics_Pipeline_Slurm_Snakemake - Fatal编程技术网

Python 如何立即将所有Snakemake作业提交到slurm集群

Python 如何立即将所有Snakemake作业提交到slurm集群,python,bioinformatics,pipeline,slurm,snakemake,Python,Bioinformatics,Pipeline,Slurm,Snakemake,我正在使用snakemake构建一个可以在SLURM集群上运行的变量调用管道。集群有登录节点和计算节点。任何实际计算都应该以srun或sbatch作业的形式在计算节点上进行。作业的运行时间限制为48小时。我的问题是,处理许多样本,特别是在队列繁忙时,处理每个样本的所有规则需要48小时以上。对于snakemake的传统集群执行会让主线程运行,该主线程只在所有规则的依赖项都运行完之后才将规则提交到队列。我应该在一个计算节点上运行这个主程序,所以这将整个管道的运行时间限制为48小时 我知道SLURM作

我正在使用
snakemake
构建一个可以在SLURM集群上运行的变量调用管道。集群有登录节点和计算节点。任何实际计算都应该以
srun
sbatch
作业的形式在计算节点上进行。作业的运行时间限制为48小时。我的问题是,处理许多样本,特别是在队列繁忙时,处理每个样本的所有规则需要48小时以上。对于
snakemake
的传统集群执行会让主线程运行,该主线程只在所有规则的依赖项都运行完之后才将规则提交到队列。我应该在一个计算节点上运行这个主程序,所以这将整个管道的运行时间限制为48小时


我知道SLURM作业有依赖项指令,告诉作业等待运行,直到其他作业完成。由于
snakemake
工作流是一个DAG,是否可以一次提交所有作业,并且每个作业的依赖项都由DAG中规则的依赖项定义?提交所有作业后,主线程将完成,绕过48小时限制。snakemake是否可以实现这一点,如果可以,它是如何工作的?我已经找到了
--立即提交
命令行选项,但我不确定这是否有我正在寻找的行为以及如何使用该命令,因为我的集群在作业提交到队列后打印
提交的批处理作业[id]
,而不仅仅是作业id。

立即提交不幸的是无法立即执行,但是需要一些调整才能工作。这是因为在集群系统之间传递作业之间的依赖关系的方式不同。不久前,我也遇到了同样的问题。正如即时提交文件所说:

立即将所有作业提交到群集,而不是等待 显示输入文件。这将失败,除非您让集群知道 作业依赖关系,例如通过:$snakemake–集群的sbatch –依赖项{依赖项}。假设您的提交脚本(此处 sbatch)将生成的作业id输出到第一个标准输出行, {dependencies}将由此作业的空格分隔的作业ID填充 看情况而定

因此问题在于
sbatch
不会将生成的作业id输出到第一个标准输出行。但是,我们可以使用自己的shell脚本来避免这种情况:

parseJobID.sh:

#!/bin/bash
# helper script that parses slurm output for the job ID,
# and feeds it to back to snakemake/slurm for dependencies.
# This is required when you want to use the snakemake --immediate-submit option

if [[ "Submitted batch job" =~ "$@" ]]; then
  echo -n ""
else
  deplist=$(grep -Eo '[0-9]{1,10}' <<< "$@" | tr '\n' ',' | sed 's/.$//')
  echo -n "--dependency=aftercorr:$deplist"
fi;

请注意,这将同时提交最多100个作业。您可以将其增加或减少到任意数量,但要知道,大多数群集系统不允许每个用户同时执行超过1000个作业。

有点相关。我倾向于使用(有时使用nohup)在登录/主节点上运行我的管道,因为snakemake的计算量不应该太大(snakemake的作者)。
--立即提交
似乎可以满足您的要求。你能显示你正在使用的蛇行命令吗?什么是snakemake版本?我倾向于同意@ManavalanGajapathy,re:从登录节点运行。我要注意的是,如果您使用的是Conda环境,那么您可能希望先在计算节点上运行
snakemake——仅创建环境——使用Conda
来预创建Conda环境;否则,该步骤可能对登录节点有点要求。@ManavalanGajapathy我将不得不尝试在登录节点上运行
snakemake
,因为我还没有正式尝试过它。我更愿意使用这种方法,因为
--immediate submit
不支持临时文件,但我的集群的用户指南说登录节点进程有时间限制。我得看看是否强制执行:)谢谢你简单明了的回答!在运行<代码> SnAkMaKe命令之前,我必须用“代码> CHMOD+X PARSEJOBID.S/<代码>来修复权限。在整个集群中,这样做的必要性可能不同。我还从LuxEngbg的HPC网站上发现了一个类似的Python脚本,用于处理具有额外配置选项的作业ID依赖性。它在标题为“(可选)的部分立即提交所有作业“不,这是我的错,您将始终需要给予它执行权限。我在答案中改变了它。
snakemake --cluster 'sbatch $(./parseJobID.sh {dependencies})' --jobs 100 --notemp --immediate-submit