image.png
Snakemake是一款基于Python语言开发的可复现可扩展的数据分析工具
snakemake的特点包括但不限于:

  • 简单易用
  • 可直接使用python代码
  • 内置分布式运算集群支持(SGE, LSF, etc.)
  • 内置Conda环境部署支持
  • 内置容器支持(注意这个容器不是docker)
  • 自动处理依赖并进行断点重启
  • 内置测试功能(benchmark)
  • make完全一样的执行逻辑, 有相关基础的人可快速上手

    安装

    Full installation

    1. conda install -n base -c conda-forge mamba
    2. conda activate base
    3. mamba create -c conda-forge -c bioconda -n snakemake snakemake
    4. conda activate snakemake
    5. snakemake --help

    Minimal installation

    1. conda activate base
    2. mamba create -c bioconda -c conda-forge -n snakemake snakemake-minimal

    执行命令

    普通参数

    一般讲所有的参数配置写入Snakefile后直接在Snakefile所在路径执行snakemake命令即可开始执行流程任务。一些常用的参数:

    1. --snakefile, -s 指定Snakefile,否则是当前目录下的Snakefile
    2. --dryrun, -n 不真正执行,一般用来查看Snakefile是否有错
    3. --printshellcmds, -p 输出要执行的shell命令
    4. --reason, -r 输出每条rule执行的原因,默认FALSE
    5. --cores, --jobs, -j 指定运行的核数,若不指定,则使用最大的核数
    6. --force, -f 重新运行第一条rule或指定的rule
    7. --forceall, -F 重新运行所有的rule,不管是否已经有输出结果
    8. --forcerun, -R 重新执行Snakefile,当更新了rule时候使用此命令

    可视化命令

    1. snakemake --dag | dot -Tpdf > dag.pdf # 输出流程图为pdf图片
    2. snakemake --dag | dit -Tpdf > dag.pdf
    3. # --dag: 生成依赖的有向图
    4. snakemake --gui 0.0.0.0:2468
    5. # --gui: 通过网页查看运行状态

    集群投递

    1. snakemake --cluster "qsub -V -cwd -q 节点队列" -j 10
    2. # --cluster /-c CMD: 集群运行指令
    3. # qusb -V -cwd -q, 表示输出当前环境变量(-V),在当前目录下运行(-cwd), 投递到指定的队列(-q), 如果不指定则使用任何可用队列
    4. # --local-cores N: 在每个集群中最多并行N核
    5. # --cluster-config/-u FILE: 集群配置文件

    项目构架

    1. ├── .gitignore
    2. ├── README.md
    3. ├── LICENSE.md
    4. ├── workflow
    5. ├── rules
    6. | ├── module1.smk
    7. | └── module2.smk
    8. ├── envs
    9. | ├── tool1.yaml
    10. | └── tool2.yaml
    11. ├── scripts
    12. | ├── script1.py
    13. | └── script2.R
    14. ├── notebooks
    15. | ├── notebook1.py.ipynb
    16. | └── notebook2.r.ipynb
    17. ├── report
    18. | ├── plot1.rst
    19. | └── plot2.rst
    20. | └── Snakefile
    21. ├── config
    22. ├── config.yaml
    23. └── some-sheet.tsv
    24. ├── results
    25. └── resources

    部分使用注意事项

  • 在运行的命令行中,snakemake会将 {} 认为是变量,因此需要使用 {{}} 来区分

  • snakemake中的 wildcards 在输入和输出中必须能够相互对应才能输出,缺一不可

常用规则组成

  1. rule all : 不同于其他的rule,在rule all里面一般不会去定义要执行的命令,他一般用来定义最后的输出结果文件.
  2. wildcards : 来获取通配符匹配到的部分,例如对于通配符"{dataset}/file.{group}.txt"匹配到文件101/file.A.txt,则{wildcards.dataset}就是101,{wildcards.group}就是A。
  3. threads : 通过在rule里面指定threads参数来指定分配给程序的线程数,eg: threads: 8
  4. resources : 可用来指定程序运行的内存,eg. resources: mem_mb=800