snakemake介绍

snakemake分享ppt

Snakemake介绍
官方文档

其他材料:
blog: snakemake-vs-nextflow
article: Sustainable data analysis with Snakemake

任务投递

示例:

1
2
3
4
5
6
7
snakemake -s LowFreqConsencus.Pipeline.split.smk  -p \
# 向流程传递参数
-C S=/ifstj2/B2C_RD_H1/Project/Halos_VersionUpdate_test/v1.4.4.2/InterTest/4Pipe.path O=/ifstj2/B2C_RD_H1/Project/Halos_VersionUpdate_test/v1.4.4.2/InterTest \
# 设置任务投递方式(使用集群sge示例)
--cluster "qsub -clear -V -cwd -P P18Z11900N0299 -q bc_b2c.q,b2c_rd.q -l num_proc={threads} -l vf={resources.mem_mb}M -binding linear:{threads}"
# 设置snakemake调度任务的指标
--rerun-incomplete --jobs 1000 --restart-times 5 --keep-going --rerun-incomplete --latency-wait 60 --stats runtime.json

常用参数:

  • -C
    向流程传递参数
    例如 -C S=”string” 则在smk中可以通过使用 config[‘S’] 调用相关参数完成参数传递。 -C 传递的值统一保存在字典 “config” 中。

  • –jobs
    设置并行的最大任务数目。

  • –config
    向snakemake传递参数(字典形式),会保存在 config 中

  • –configfile
    指定配置文件路径(可以支持多个)

  • –cores
    设置任务最多使用的核数

  • –resources
    设置任务最多使用的内存

  • –forceall
    强制执行某条Rule及它的依赖。

  • –list
    展示smk脚本中所能获得的所有Rule
  • –dag
1
2
3
4
5
6
生成流程逻辑框架图:
snakemake xxxx(流程本身的参数) --dag | dot -Tsvg > dag.svg
#如果snakemake流程本身会打印输出内容,则需要单独处理如下:
snakemake xxxx(流程本身的参数) --dag >tmp.txt
# 删除tmp.txt文档中流程自身打印的内容,然后生成图片
dot -Tsvg tmp.txt > dag.svg
  • –touch
    更新文件的时间戳(不会重新跑)
  • –force, -f
    重新运行第一条或指定的某条Rule

  • –forcerun, -R
    强制执行snakefile,更新rule时,使用此命令。会同步更新后续的所有结果

  • –dry-run, -n
    生成相关分析路径的shell脚本,但是不进行实际的执行。

  • –keep-going,
    在某个任务失败后,继续运行其他的独立任务;

  • –cluster
    针对集群投递到计算节点的参数设置;

    1
    --cluster "qsub -clear -cwd  -P P18Z11900N0299  -l num_proc={threads} -l vf={params.resources}  -binding linear:{threads}"
  • –restart-times
    任务失败后,重投的次数

    1
    --restart-times 5
  • –rerun-incomplete,
    针对结果不完整的数据,重跑所有的rules;

  • –unlock
    解锁被异常锁定的目录

  • –stats
    记录任务的执行状态,输出到指定文件

  • –nocolor
    不输出彩色的结果

  • –drmaa-log-dir
    仅限使用 -drmaa 进行任务调度时有效。 指定shell的log(.e 和 .o)输出目录.

资源配置

SGE

以SGE为例,可以通过设置配置文件,调整每个任务运行时所需要的资源

1
qsub -clear -cwd -l vf=${mem}g,num_proc=${cpu} -P ${Project_ID} -binding linear:${cpu} -q ${Queue_ID} work.sh -o work.sh.o -e work.sh.e

创建资源配置文件 cluster.yaml 编辑各个任务资源的相关资源需求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
localrules: all
__default__: # 默认标准
queue: "Queue_ID"
project: "Project_ID"
workdir: "./"
mem: "1G"
cores: 1

trim: ...

rmhost:
mem: "4G"
cores: 4
output: "cluster_logs/{rule}.{wildcards}.o"
error: "cluster_logs/{rule}.{wildcards}.e"

为任务单独设置运行环境

通过conda

为计算规则设置单独的计算环境

不同的计算规则中依赖的软件之间可能有冲突,无法在同一个环境中配置好。
使用conda指令,smk可以为每个计算规则新建conda环境,并在其中运行计算。

为rmhost规则新建一个环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mkdir envs
cat > envs/rmhost.yaml
channels:
- bioconda
dependencies:
- bowtie2=2.3.5.1
- samtools=1.10

修改Snakefile文件:

rule rmhost:
input: ...
output: ...
conda:
"envs/rmhost.yaml"
shell: ...

运行smk时,加上–use-conda参数即可为每个规则建立conda的独立环境。

1
snakemake --use-conda

rule内的函数

  • protected

    1
    在文件生成后,将文件权限改为 只读文件。
  • priority
    设置任务优先级,从而一定调整各个rule的运行的顺序。

-------------本文结束感谢您的阅读-------------