如何通过Snakefile中的输入并行化规则(具有多个输出)

CainãMax Couto-Silva

我对Snakemake如何在规则中并行化作业感到非常困惑。我想为每个输入使用一个核心(分别处理输入,它们之间不留空格),为每个输入提供多个输出。

这是我的代码的简化示例:

# Globals ---------------------------------------------------------------------

datasets = ["dataset_S1", "dataset_S2"]
methods = ["pbs", "pbs_windowed", "ihs", "xpehh"]

# Rules ----------------------------------------------------------------------- 

rule all:
    input:
        # Binary files
        expand("{dataset}/results_bin/persnp/{method}.feather", dataset=datasets, method=methods),
        expand("{dataset}/results_bin/pergene/{method}.feather", dataset=datasets, method=methods)


rule bin:
    input:
        "{dataset}/results_bin/convert2feather.R"
    output:
        "{dataset}/results_bin/persnp/{method}.feather",
        "{dataset}/results_bin/pergene/{method}.feather"
    threads:
        2
    shell:
        "Rscript {input}

如果使用来运行上面的代码snakemake -j2,我最终将每个输出方法重新运行每个脚本,这不是我想要的。如果我也将expand()函数用于bin规则中的输入和输出,我最终将使用:

shell:
    """
    Rscript {input[0]}
    Rscript {input[1]}
    """

我认为将无法并行化。

我应该怎么做才能单独使用每个输入,以便每个输入可以使用一个内核?
任何帮助将不胜感激。谢谢!

编辑

试图更好地解释我的脚本的功能以及我对Snakemake的期望。请参阅我的示例文件夹结构:

.
├── dataset_S1
│   ├── data
│   │   └── data.vcf
│   ├── results_bin
│   │   └── convert2feather.R
│   ├── task2
│   │   └── script.py
│   └── task3
│       └── script.sh
└── dataset_S2
    ├── data
    │   └── data.vcf
    ├── results_bin
    │   └── convert2feather.R
    ├── task2
    │   └── script.py
    └── task3
        └── script.sh

如您所见,对于每个数据集,我都有具有相同结构和命名脚本的文件夹(尽管脚本的内容可能有所不同)。在我的示例中,脚本将读取“ data.vcf”文件,进行操作,然后在相应的数据集文件夹中创建新文件夹和文件。它将对两个数据集重复全部任务。我想以某种方式可以对文件夹task2,task3等中的脚本执行相同的操作...

例如,本例中管道的输出将是:

.
├── dataset_S1
│   ├── data
│   │   └── data.vcf
│   └── results_bin
│       ├── convert2feather.R
│       ├── pergene
│       │   ├── ihs.feather
│       │   ├── pbs.feather
│       │   ├── pbs_windowed.feather
│       │   └── xpehh.feather
│       └── persnp
│           ├── ihs.feather
│           ├── pbs.feather
│           ├── pbs_windowed.feather
│           └── xpehh.feather
└── dataset_S2
    ├── data
    │   └── data.vcf
    └── results_bin
        ├── convert2feather.R
        ├── pergene
        │   ├── ihs.feather
        │   ├── pbs.feather
        │   ├── pbs_windowed.feather
        │   └── xpehh.feather
        └── persnp
            ├── ihs.feather
            ├── pbs.feather
            ├── pbs_windowed.feather
            └── xpehh.feather

编辑2

使用的文件和命令:

(snakemake) cmcouto-silva@datascience-IB:~/[email protected]/lab_files/phd_data$ snakemake -j2 -p
# Globals ---------------------------------------------------------------------

datasets = ["dataset_S1", "dataset_S2"]
methods = ["pbs", "pbs_windowed", "ihs", "xpehh"]

# Rules ----------------------------------------------------------------------- 

rule all:
    input:
        # Binary files
        expand("{dataset}/results_bin/persnp/{method}.feather", dataset=datasets, method=methods),
        expand("{dataset}/results_bin/pergene/{method}.feather", dataset=datasets, method=methods)

rule bin:
    input:
        "{dataset}/results_bin/convert2feather.R"
    output:
        expand("{{dataset}}/results_bin/persnp/{method}.feather", method=methods),
        expand("{{dataset}}/results_bin/pergene/{method}.feather", method=methods)
    threads:
        2
    shell:
        "Rscript {input}"

输出日志:

(snakemake) cmcouto-silva@datascience-IB:~/[email protected]/lab_files/phd_data$ snakemake -j2 -p
Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cores: 2
Rules claiming more threads will be scaled down.
Job counts:
    count   jobs
    1   all
    2   bin
    3

[Wed Sep 30 23:47:55 2020]
rule bin:
    input: dataset_S1/results_bin/convert2feather.R
    output: dataset_S1/results_bin/persnp/pbs.feather, dataset_S1/results_bin/persnp/pbs_windowed.feather, dataset_S1/results_bin/persnp/ihs.feather, dataset_S1/results_bin/persnp/xpehh.feather, dataset_S1/results_bin/pergene/pbs.feather, dataset_S1/results_bin/pergene/pbs_windowed.feather, dataset_S1/results_bin/pergene/ihs.feather, dataset_S1/results_bin/pergene/xpehh.feather
    jobid: 1
    wildcards: dataset=dataset_S1
    threads: 2

Rscript dataset_S1/results_bin/convert2feather.R
  Package "data.table" successfully loaded!
  Package "magrittr" successfully loaded!
  Package "snpsel" successfully loaded!
[Wed Sep 30 23:48:43 2020]
Finished job 1.
1 of 3 steps (33%) done

[Wed Sep 30 23:48:43 2020]
rule bin:
    input: dataset_S2/results_bin/convert2feather.R
    output: dataset_S2/results_bin/persnp/pbs.feather, dataset_S2/results_bin/persnp/pbs_windowed.feather, dataset_S2/results_bin/persnp/ihs.feather, dataset_S2/results_bin/persnp/xpehh.feather, dataset_S2/results_bin/pergene/pbs.feather, dataset_S2/results_bin/pergene/pbs_windowed.feather, dataset_S2/results_bin/pergene/ihs.feather, dataset_S2/results_bin/pergene/xpehh.feather
    jobid: 2
    wildcards: dataset=dataset_S2
    threads: 2

Rscript dataset_S2/results_bin/convert2feather.R
  Package "data.table" successfully loaded!
  Package "magrittr" successfully loaded!
  Package "snpsel" successfully loaded!
[Wed Sep 30 23:49:41 2020]
Finished job 2.
2 of 3 steps (67%) done

[Wed Sep 30 23:49:41 2020]
localrule all:
    input: dataset_S1/results_bin/persnp/pbs.feather, dataset_S1/results_bin/persnp/pbs_windowed.feather, dataset_S1/results_bin/persnp/ihs.feather, dataset_S1/results_bin/persnp/xpehh.feather, dataset_S2/results_bin/persnp/pbs.feather, dataset_S2/results_bin/persnp/pbs_windowed.feather, dataset_S2/results_bin/persnp/ihs.feather, dataset_S2/results_bin/persnp/xpehh.feather, dataset_S1/results_bin/pergene/pbs.feather, dataset_S1/results_bin/pergene/pbs_windowed.feather, dataset_S1/results_bin/pergene/ihs.feather, dataset_S1/results_bin/pergene/xpehh.feather, dataset_S2/results_bin/pergene/pbs.feather, dataset_S2/results_bin/pergene/pbs_windowed.feather, dataset_S2/results_bin/pergene/ihs.feather, dataset_S2/results_bin/pergene/xpehh.feather
    jobid: 0

[Wed Sep 30 23:49:41 2020]
Finished job 0.
3 of 3 steps (100%) done
Complete log: /home/cmcouto-silva/[email protected]/lab_files/phd_data/.snakemake/log/2020-09-30T234755.741940.snakemake.log

(snakemake) cmcouto-silva@datascience-IB:~/[email protected]/lab_files/phd_data$ cat /home/cmcouto-silva/[email protected]/lab_files/phd_data/.snakemake/log/2020-09-30T234755.741940.snakemake.log
Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cores: 2
Rules claiming more threads will be scaled down.
Job counts:
    count   jobs
    1   all
    2   bin
    3

[Wed Sep 30 23:47:55 2020]
rule bin:
    input: dataset_S1/results_bin/convert2feather.R
    output: dataset_S1/results_bin/persnp/pbs.feather, dataset_S1/results_bin/persnp/pbs_windowed.feather, dataset_S1/results_bin/persnp/ihs.feather, dataset_S1/results_bin/persnp/xpehh.feather, dataset_S1/results_bin/pergene/pbs.feather, dataset_S1/results_bin/pergene/pbs_windowed.feather, dataset_S1/results_bin/pergene/ihs.feather, dataset_S1/results_bin/pergene/xpehh.feather
    jobid: 1
    wildcards: dataset=dataset_S1
    threads: 2

Rscript dataset_S1/results_bin/convert2feather.R
[Wed Sep 30 23:48:43 2020]
Finished job 1.
1 of 3 steps (33%) done

[Wed Sep 30 23:48:43 2020]
rule bin:
    input: dataset_S2/results_bin/convert2feather.R
    output: dataset_S2/results_bin/persnp/pbs.feather, dataset_S2/results_bin/persnp/pbs_windowed.feather, dataset_S2/results_bin/persnp/ihs.feather, dataset_S2/results_bin/persnp/xpehh.feather, dataset_S2/results_bin/pergene/pbs.feather, dataset_S2/results_bin/pergene/pbs_windowed.feather, dataset_S2/results_bin/pergene/ihs.feather, dataset_S2/results_bin/pergene/xpehh.feather
    jobid: 2
    wildcards: dataset=dataset_S2
    threads: 2

Rscript dataset_S2/results_bin/convert2feather.R
[Wed Sep 30 23:49:41 2020]
Finished job 2.
2 of 3 steps (67%) done

[Wed Sep 30 23:49:41 2020]
localrule all:
    input: dataset_S1/results_bin/persnp/pbs.feather, dataset_S1/results_bin/persnp/pbs_windowed.feather, dataset_S1/results_bin/persnp/ihs.feather, dataset_S1/results_bin/persnp/xpehh.feather, dataset_S2/results_bin/persnp/pbs.feather, dataset_S2/results_bin/persnp/pbs_windowed.feather, dataset_S2/results_bin/persnp/ihs.feather, dataset_S2/results_bin/persnp/xpehh.feather, dataset_S1/results_bin/pergene/pbs.feather, dataset_S1/results_bin/pergene/pbs_windowed.feather, dataset_S1/results_bin/pergene/ihs.feather, dataset_S1/results_bin/pergene/xpehh.feather, dataset_S2/results_bin/pergene/pbs.feather, dataset_S2/results_bin/pergene/pbs_windowed.feather, dataset_S2/results_bin/pergene/ihs.feather, dataset_S2/results_bin/pergene/xpehh.feather
    jobid: 0

[Wed Sep 30 23:49:41 2020]
Finished job 0.
3 of 3 steps (100%) done
Complete log: /home/cmcouto-silva/[email protected]/lab_files/phd_data/.snakemake/log/2020-09-30T234755.741940.snakemake.log
贾福斯

我是否正确,您为此规则有两个输入文件(您的脚本,每个数据集一个),并且希望它们并行运行?如果是这样,您需要给snakemake调用两倍于您在规则中定义的核心数量。

threads规则中字段提供了每个输入/迭代要在此规则上使用的核心数。因此,第一个数据集将使用2个核心,第二个数据集还将使用2个核心。要并行运行它们,您需要致电snakemake -j4

我希望我能理解您的问题,如果没有,请随时纠正我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在R中并行化具有多个参数的函数

来自分类Dev

我可以停止在snakefile中并行执行的规则吗

来自分类Dev

如何在D3中可视化具有不同输入文件的多个图形?

来自分类Dev

具有多个输入/输出的 sklearn 管道

来自分类Dev

Python:如何并行化在具有许多函数输入的嵌套 for 循环中使用的函数?

来自分类Dev

GNU Make:如何使具有多个触发器的规则在并行模式下运行一次?

来自分类Dev

具有多个输入和多个输出的 Keras 模型

来自分类Dev

如何使用Keras构建具有多个输入和单个输出的模型

来自分类Dev

如何在具有多个模式的Makefile中制定模式规则?

来自分类Dev

如何通过管道将awk输出(具有周期性,连续输入)传输到输出文件?

来自分类Dev

具有多个输入和输出的fplot功能

来自分类Dev

具有多个输入和输出的fplot功能

来自分类Dev

如何为多个目标创建一个makefile作为输入,每个目标在输出中具有相同的标识符?

来自分类Dev

单个规则的多个文件类型输出:无法从输出文件确定输入文件中的通配符

来自分类Dev

是否有一种简单的方法可以通过R中的并行化一次运行多个循环试验?

来自分类Dev

Java中具有多个参数的重载方法的选择规则

来自分类Dev

如何通过jq从现有json中的值输出具有新键名的json

来自分类Dev

如何仅通过具有多个条目的列来对DataFrame进行子集化?

来自分类Dev

如何在 Tensorflow 中构建具有输入和输出变量的可重用图?

来自分类Dev

如何通过查询构建器在laravel中插入具有多个值的多个数组

来自分类Dev

如何在SSIS中调用具有多个输入(在脚本组件中)的Web服务?

来自分类Dev

如何通过具有默认值的annotate()在输出中创建新字段?

来自分类Dev

对于在Keras中具有一个输出的模型,如何使用多个变量作为损失?

来自分类Dev

如何使用熊猫在Excel输出文件中合并具有相同内容的多个列

来自分类Dev

在bash中捕获多个并行的grep输出

来自分类Dev

如何具有未定义的输入和输出?

来自分类Dev

具有相同名称的多个输入的Yii2验证规则

来自分类Dev

如何通过输入文件从具有特定值的文本文件中删除行?

来自分类Dev

如何在yii中处理具有多个模型和表格输入的复杂表格

Related 相关文章

  1. 1

    无法在R中并行化具有多个参数的函数

  2. 2

    我可以停止在snakefile中并行执行的规则吗

  3. 3

    如何在D3中可视化具有不同输入文件的多个图形?

  4. 4

    具有多个输入/输出的 sklearn 管道

  5. 5

    Python:如何并行化在具有许多函数输入的嵌套 for 循环中使用的函数?

  6. 6

    GNU Make:如何使具有多个触发器的规则在并行模式下运行一次?

  7. 7

    具有多个输入和多个输出的 Keras 模型

  8. 8

    如何使用Keras构建具有多个输入和单个输出的模型

  9. 9

    如何在具有多个模式的Makefile中制定模式规则?

  10. 10

    如何通过管道将awk输出(具有周期性,连续输入)传输到输出文件?

  11. 11

    具有多个输入和输出的fplot功能

  12. 12

    具有多个输入和输出的fplot功能

  13. 13

    如何为多个目标创建一个makefile作为输入,每个目标在输出中具有相同的标识符?

  14. 14

    单个规则的多个文件类型输出:无法从输出文件确定输入文件中的通配符

  15. 15

    是否有一种简单的方法可以通过R中的并行化一次运行多个循环试验?

  16. 16

    Java中具有多个参数的重载方法的选择规则

  17. 17

    如何通过jq从现有json中的值输出具有新键名的json

  18. 18

    如何仅通过具有多个条目的列来对DataFrame进行子集化?

  19. 19

    如何在 Tensorflow 中构建具有输入和输出变量的可重用图?

  20. 20

    如何通过查询构建器在laravel中插入具有多个值的多个数组

  21. 21

    如何在SSIS中调用具有多个输入(在脚本组件中)的Web服务?

  22. 22

    如何通过具有默认值的annotate()在输出中创建新字段?

  23. 23

    对于在Keras中具有一个输出的模型,如何使用多个变量作为损失?

  24. 24

    如何使用熊猫在Excel输出文件中合并具有相同内容的多个列

  25. 25

    在bash中捕获多个并行的grep输出

  26. 26

    如何具有未定义的输入和输出?

  27. 27

    具有相同名称的多个输入的Yii2验证规则

  28. 28

    如何通过输入文件从具有特定值的文本文件中删除行?

  29. 29

    如何在yii中处理具有多个模型和表格输入的复杂表格

热门标签

归档