分批提交snakemake作业

问题描述

我有一个运行 python 脚本的 Snakefile,它在一个目录中输出许多文件。我写了下面的 Snakefile 脚本来执行这个

MODELS = ["A","B","C"]
SEEDS = [1,2,3]

rule all: 
    input:
        expand("outputs/{model}/seed{seed}",model=MODELS,seed=SEEDS)

rule sub: 
    input: 
        {model}.py
    output: 
        directory("outputs/{model}/seed{seed}")
    run: 
        command = "python3 {} --seed {}".format(input,wildcards.seed)
        shell(command) 

每个 python 脚本文件 A.pyB.pyC.py 都会执行数小时。 我希望能够使用 sbatch 提交作业,而无需等待它完成执行。

$ snakemake --cluster "sbatch --job-name=snakemake" --jobs 200 --latency-wait 1000

当我执行以下命令时,某些文件没有运行,Snakemake 也没有终止。 我尝试编写一个包含上述蛇形命令并执行 sbatch script.sh 的 bash 脚本,但没有在 Snakefile 中提交作业。

有没有办法不用snakemake等待sbatch作业完成执行?

解决方法

这不是一个完美的解决方案,但您是否尝试过 --immediate-submit 标志?它只会将所有作业提交给 slurm,而不考虑依赖项,也无需等待。通常,您会为 sbatch 提供一个包装器,它将蛇形依赖项转换为 SLURM 依赖项,但对于像这样的简单工作流(即只有一个规则运行多次),如果没有它,您可能会逃脱。