目前生物信息领域游非常多的生物信息流程开发框架 Snakemake、Ruffus、WDL、CWL、nextflow 等等。每种框架都有自己的优缺点。因为各种不同的业务需求,自己也接触和落地了其中一些框架的流程开发和产品落地。所以开一个系列来记录以下各种不同流程框架的概念和应用流程开发的原理和逻辑,更主要的也是借机整理自己之前进行相关产品开发过程中随手记录的笔记。希望对后来的开发人员能有所帮助。截至目前,其实我自己主要深度使用过的框架主要是 Snakemake 和 WDL。
流程构建逻辑
snakemake 和 wdl 两个框架其实在底层逻辑上其实是相反的:
snakemake 是由果及因的框架结构,在snakemake中,首先需要知道最终想要得到的结果文件Z(第一个rule的输出结果),然后我们梳理流程逻辑发现执行ruleA得到Z,那么我们首先需要获得ruleA的输入文件X和Y; 而此时 X和Y 成为我们想要的结果,然后我们需要梳理流程逻辑,确定我们需要得到X和Y,那么我们首先需要获得A和B然后执行ruleB。 依次类推,直到我们需要的文件都已经存在,然后从我们已经拥有的文件开始执行流程,依次生成X和Y,再根据X和Y 生成Z。 所以snakemake 的流程是从结果开始,逐步反推,直到需要的信息已经完备。
wdl 是由因及果的框架结构,在wdl中,我们首先知道我们要执行任务taskA,然后检查执行taskA所需的文件 A和B是否存在,执行taskA运行得到C,然后发现我们需要执行 taskB,发现taskB需要的文件是否依赖taskA,如果依赖就等待taskA结束,如果不依赖就直接执行。然后执行taskB 获得结果文件 D ,以此类推,检查下一个task。另外wdl中文件依赖关系是继承自流程的,会直接基于每个task的output属性获得结果并在下游通过对应的具体属性进行文件命名或其他变量的继承。
执行的依赖
- WDL
wdl的执行依赖于womtools(进行校验和输入文件的生成)和cromwell(进行业务的执行)。 - snakemake
Snakemake 本身就是其执行的依赖软件命名,任务的执行也是基于Snakemake。
流程语言的支持特性
| 框架 | docker | singularity | conda | SGE | 配置文件 |
|---|---|---|---|---|---|
| Snakemake | √ | √ | √ | √ | yaml |
| WDL | √ | √ | √ | √ | json |
对应关系
| - | WDL | Snakemake |
|---|---|---|
| 最小任务逻辑单元 | task | rule |
| 引用 | import | include |
| 执行逻辑 | call | 基于rule的IO自构建 |
| 资源配置 | runtime | resources |
| 配置文件 | json | yaml,命令行 -C 指定 |
| 数据处理 | wdl自建语法逻辑 | 支持python语法 |
任务的投递
| 框架 | 中断位置续跑 | 中间启动分析 | 单独跑某一部 | 配置文件 |
|---|---|---|---|---|
| Snakemake | √ | √ | √ | yaml |
| WDL | √ | × | × | json |
目前的一些流程开发框架: