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 文件也会很糟糕。我不知道......但我觉得你正在尝试做的事情,运行将许多蛋白质与许多配置文件结合起来并不罕见,但你让事情变得比必要的更复杂。