Snakemake 进程 Kllled
Snakemake process Kllled
我正在尝试 运行 Snakefile
,我检查过它适用于少量文件,但是当我尝试 运行 它时它总是给我这个错误使用更多的输入文件:
Building DAG of jobs...
Killed
澄清一下,我有 726 个蛋白质文件和 19634 个 hmm 文件。
snakefile
看起来像这样:
ARCHIVE_FILE = 'output.tar.gz'
# a single output file
OUTPUT_FILE = 'output_{hmm}/{species}_{hmm}.out'
# a single input file
INPUT_FILE = 'proteins/{species}.fasta'
# a single hmm file
HMM_FILE = 'hmm/{hmm}.hmm'
# a single cat file
CAT_FILE = 'cat/cat_{hmm}.txt'
# a single lines file
LINE_FILE = 'lines/lines_{hmm}.txt'
# a single bit file
BIT_FILE = 'bit_scores/bit_{hmm}.txt'
# Build the list of input files.
INP = glob_wildcards(INPUT_FILE).species
# Build the list of hmm files.
HMM = glob_wildcards(HMM_FILE).hmm
# The list of all output files
OUT = expand(OUTPUT_FILE, species=INP, hmm=HMM)
# The list of all CAT files
CAT = expand(CAT_FILE, hmm=HMM)
# The list of all lines files
LINE = expand(LINE_FILE, hmm=HMM)
# The list of all lines files
BIT = expand(BIT_FILE, hmm=HMM)
# pseudo-rule that tries to build everything.
# Just add all the final outputs that you want built.
rule all:
input: ARCHIVE_FILE
# hmmsearch
rule hmm:
input:
species=INPUT_FILE ,
hmm=HMM_FILE
output:
OUTPUT_FILE,
params:
cmd='hmmsearch --noali -E 99 --tblout'
shell:
'{params.cmd} {output} {input.hmm} {input.species} '
# concatenate output per hmm
rule concatenate:
input:
expand(OUTPUT_FILE, species=INP, hmm="{hmm}"),
output:
CAT_FILE,
params:
cmd="cat",
shell:
"{params.cmd} {input} > {output} "
# clean cat files
rule clean_cats:
input:
cmd='/home/agalvez/bin/remove_lines_starting_with_#.pl',
values=CAT_FILE
output: LINE_FILE
shell:
'{input.cmd} -input {input.values} -output {output}'
# create an archive with all results
rule create_archive:
input: OUT, CAT, LINE,
output: ARCHIVE_FILE
shell: 'tar -czvf {output} {input}'
有谁知道如何解决这个问题?
给定问题中的数字,OUTPUT_FILE
中将有 14,254,284
个文件(并且由于每个文件都是由规则创建的,因此有很多规则实例,不考虑其他规则)。这可能仍然可行,但它也很重要 运行 snakemake
。如果您 运行 在集群的登录节点上进行此操作,那么登录节点的资源通常不足以 运行 大型工作流程,并且该进程将由于内存不足而被终止。
一些选项是:
- 运行 具有足够 RAM 的机器上的工作流(例如,为 snakemake 获取一个 long-running 计算节点);
- re-format 批处理某些组合的工作流(可能规则
concatenate
可以与规则 hmm
组合,但取决于 resource-intensive 如何规则 hmm
是);
- 运行 一次只是工作流程的一部分。
我 认为 您可以将所有蛋白质序列连接到一个单一的 fasta 文件中,然后 运行 根据 hmm 配置文件。通过这种方式,您有 19634 个作业,而不是 19634 x 726。但我认为您也可以将 hmm 配置文件合并到一个文件中,并有一个 hmmsearch
作业。
此外,即使您成功地 运行ning snakemake 按照您的计划进行,处理 14M 文件也会很糟糕。我不知道......但我觉得你正在尝试做的事情,运行将许多蛋白质与许多配置文件结合起来并不罕见,但你让事情变得比必要的更复杂。
我正在尝试 运行 Snakefile
,我检查过它适用于少量文件,但是当我尝试 运行 它时它总是给我这个错误使用更多的输入文件:
Building DAG of jobs...
Killed
澄清一下,我有 726 个蛋白质文件和 19634 个 hmm 文件。
snakefile
看起来像这样:
ARCHIVE_FILE = 'output.tar.gz'
# a single output file
OUTPUT_FILE = 'output_{hmm}/{species}_{hmm}.out'
# a single input file
INPUT_FILE = 'proteins/{species}.fasta'
# a single hmm file
HMM_FILE = 'hmm/{hmm}.hmm'
# a single cat file
CAT_FILE = 'cat/cat_{hmm}.txt'
# a single lines file
LINE_FILE = 'lines/lines_{hmm}.txt'
# a single bit file
BIT_FILE = 'bit_scores/bit_{hmm}.txt'
# Build the list of input files.
INP = glob_wildcards(INPUT_FILE).species
# Build the list of hmm files.
HMM = glob_wildcards(HMM_FILE).hmm
# The list of all output files
OUT = expand(OUTPUT_FILE, species=INP, hmm=HMM)
# The list of all CAT files
CAT = expand(CAT_FILE, hmm=HMM)
# The list of all lines files
LINE = expand(LINE_FILE, hmm=HMM)
# The list of all lines files
BIT = expand(BIT_FILE, hmm=HMM)
# pseudo-rule that tries to build everything.
# Just add all the final outputs that you want built.
rule all:
input: ARCHIVE_FILE
# hmmsearch
rule hmm:
input:
species=INPUT_FILE ,
hmm=HMM_FILE
output:
OUTPUT_FILE,
params:
cmd='hmmsearch --noali -E 99 --tblout'
shell:
'{params.cmd} {output} {input.hmm} {input.species} '
# concatenate output per hmm
rule concatenate:
input:
expand(OUTPUT_FILE, species=INP, hmm="{hmm}"),
output:
CAT_FILE,
params:
cmd="cat",
shell:
"{params.cmd} {input} > {output} "
# clean cat files
rule clean_cats:
input:
cmd='/home/agalvez/bin/remove_lines_starting_with_#.pl',
values=CAT_FILE
output: LINE_FILE
shell:
'{input.cmd} -input {input.values} -output {output}'
# create an archive with all results
rule create_archive:
input: OUT, CAT, LINE,
output: ARCHIVE_FILE
shell: 'tar -czvf {output} {input}'
有谁知道如何解决这个问题?
给定问题中的数字,OUTPUT_FILE
中将有 14,254,284
个文件(并且由于每个文件都是由规则创建的,因此有很多规则实例,不考虑其他规则)。这可能仍然可行,但它也很重要 运行 snakemake
。如果您 运行 在集群的登录节点上进行此操作,那么登录节点的资源通常不足以 运行 大型工作流程,并且该进程将由于内存不足而被终止。
一些选项是:
- 运行 具有足够 RAM 的机器上的工作流(例如,为 snakemake 获取一个 long-running 计算节点);
- re-format 批处理某些组合的工作流(可能规则
concatenate
可以与规则hmm
组合,但取决于 resource-intensive 如何规则hmm
是); - 运行 一次只是工作流程的一部分。
我 认为 您可以将所有蛋白质序列连接到一个单一的 fasta 文件中,然后 运行 根据 hmm 配置文件。通过这种方式,您有 19634 个作业,而不是 19634 x 726。但我认为您也可以将 hmm 配置文件合并到一个文件中,并有一个 hmmsearch
作业。
此外,即使您成功地 运行ning snakemake 按照您的计划进行,处理 14M 文件也会很糟糕。我不知道......但我觉得你正在尝试做的事情,运行将许多蛋白质与许多配置文件结合起来并不罕见,但你让事情变得比必要的更复杂。