生信流程搭建有多难?行业为解决这一问题提出了各种各样的配方,有你熟悉的吗?
一、困境 - 乱
无数机构投入大量人力物力,以期获得一条条可用的生信流程。而有些流程,由于种种原因,存在着巨大的缺陷:
没有标准,不同的人设计出来的流程,开发、使用方法都不一样。
将软件/脚本、计算资源以及业务逻辑混在一起,导致代码结构混乱。
由于上述原因,导致非常严重的后果:
开发周期无限拉上,成本被无限放大。这是由于流程本身的缺陷,导致既难开发,也难维护。代码永远都存在 Bug,一直在修复的路上。
由于流程的结构不合理,导致想升级、优化某些步骤,或者增加新功能,难如登天。
君不见有些公司的内部数据库或软件 5、6 年不更新,甚至接近 10 年不更新也不鲜见。
比如 Python 还停留在 Python2.x 时代,R 还停留在 3.x 甚至 2.x时代,GATK 是 3.x 甚至 2.x,数据库落后官方好几年等等不一而足。主打的就是能跑就行,流程能跑就跑,不能跑我跑。
有一些软件/数据库,官方都停止维护了,甚至在其网站明确声明不再维护,建议换其他软件/数据库。而有的企业内部却一直不更新,为什么?因为原来流程能跑得通,没人愿意去更新,也怕更新了出错,于是干脆就维持现状。
由于没有标准,导致每一条流程的使用都得有一个SOP,新人入手极其困难。
困境是:乱,很乱,怎一个乱字了得。
二、传统 - 串
传统的生信流程搭建,关键词就是:串。
用 Shell script / Perl / Python 等脚本语言将需要跑的命令串起来。比如这个基因家族分析:A pipeline for identification of olfactory receptor(OR) gene family
https://github.com/jianzuoyi/orfam
该流程仿的是发了 Nature method 的 Speedseq 。
这种最原始的流程搭建方式,其特点是将流程中要运行的命令、计算资源和业务逻辑绑定在一起。针对一些业务逻辑简单的任务没什么问题,但是对于比较复杂的情况就无能为力了。
三、标准 - 理想丰满
为了解决搭流程的问题,生物信息学领域是很拼的。不少机构都下场,誓要将这一问题彻底给解决。
都号称自己能将生信流程轻松拿捏。 由此多家单位都推出了自己的标准。
下面仅列举常见的四个:
CWL,全称是通用流程语言(Common Workflow Language)。
WDL,全称是流程描述语言(Workflow Description Language)。
Nextflow,专注于开发生信流程的社区,其 nf-core 有一些现成可用的流程。
Snakemake,make 风格的流程搭建。
这是目前大浪淘沙之下剩余下来有一定影响力的。我对这些标准的评价是:浓浓的学院风,非常不接地气。大白话讲就是:难用。
大家有没有见到过一种现象,就是网上有很多介绍各种流程框架的使用教程,大多都虎头蛇尾。一开始雄心壮志,说要掌握某某流程框架,写了几篇之后,发现没法继续了,大都停留在 Helllo World 阶段,然后就没有然后了。
或者最后说一句:遇到了点问题。哈哈哈。。。仅仅是一点问题么。。。
写写 Hello world,各种框架还是很丝滑的。遗憾的是,仅此而已。
四、现实 - 却很骨感
我曾重度使用过 WDL,尝试把公司内自己负责的所有生信流程都用 WDL 重写。因为当年博德研究所联合华大等单位一起在国内大力推广 WDL,当年还成立了所谓的“生物信息协作组”,大概叫这么一个名字,其目的是制定流程搭建标准,大家如果都按照统一标准来,就可以方便流程共享,减少重复工作。多美好的愿望啊。
所以我就躬身入局了。后来发现,这玩意不仅开发麻烦,运行过程中还经常报莫名其妙的错误,根本排查不出原因。这是生产环境的大忌,忍无可忍之后,遗憾放弃。
客观来说,所有标准的出发点都是好的,它们最终的目标都是天下一统,就像秦统一六国:
六王毕,四海一。
遗憾的是,各种标准的提出,本身又成了一个又一个的小王国。所有标准都希望开发者尽入吾彀中,现实却是很骨感的。
这个标准不好,于是又提出一个新的标准。标准之争,最终演变成了标准泛滥。
五、破局 - 返璞归真
什么才是真正通用的生信流程语言?其实不是别的,正是 Linux,准确地说是 Linux shell,更具体点,可以说是 Bash 脚本语言。
为什么?因为我们是通过 Shell 去调用 Linux 服务器上的生信软件的,Shell 是调用 Linux 命令通用的语言,自然也是通用的生信流程语言了。明白了这一点,就清楚我们搭建生信流程需要坚持的原则了:
尽量直接使用 Shell 脚本
如果流程复杂度上升,可以借助胶水语言如 Python / Perl,但是第一步也是要先生成 Shell 脚本
这两个原则,还可以用来判断一个流程框架是否合理。为什么流程框架的第一步必须先生成 Shell 脚本?原因如下:
灵活性。生成 Shell 脚本,可以向任何后端集群投任务。而向集群投任务,IT 行业已经解决得非常好了,任何集群,都有成熟的任务投递工具。反观一些流程框架,负责任务生成和投递,除了徒增复杂性和向外行表示自己的强大之外,没有任何好处。
问题排查。如果任务执行失败,直接查看相应 Shell 脚本是否正确就行了,非常方便。有的流程框架不生成 Shell 脚本,有的生成了 Shell 脚本但是放在非常混乱的文件夹下,不利于排查问题。
结果复现/溯源。Shell 脚本与分析结果放在一起,方便未来复现结果,或者追溯当时生成结果的相关软件及其参数设定。
六、zflow - 让你极度爽
现有标准都不好,于是又提出一个新的+1。
基于一个理念:Linux 才是通用的生信流程语言。zflow 是流程中的一个核心组件,负责生成 Shell 脚本,其支持:
单样本流程搭建:如转录组标准分析、WGS、WES 重测序等。
配对样本流程搭建:如肿瘤 NGS 变异检测等。
支持加测:即支持一个样本多个文库,一个文库多条Lane的实验设计。
凡是任务之间有复杂依赖关系的流程,都可以通过 zflow 简单实现。
zflow 生成 Shell 脚本后,可以通过插件向不同集群投递任务。如何做到这一点?这得益于 zflow 生成的 Shell 脚本有以下几个特点:
一个脚本是一个任务。
纯的 Shell 脚本,可以直接运行。
附带 Cpu 和 内存需求说明。
附带任务之间的依赖关系。
因此,zflow 生成的脚本,可以被后续的插件纳入 DAG (有向无环图)中,从而向任意集群投递任务。
最后顺便解释一下 zflow 的命名:z,是字母 a-z 的最后一个,暗含终极之意,zflow,可以称之为:终极 flow。
七、许可证 - 学术免费
zflow 支持学术免费使用,官网地址为:
https://github.com/jianzuoyi/zflow
欢迎 Fork、加星和下载。
如需商用,请联系【简说基因】团队获得授权。商用权利:
获取程序所有源码。
可协助适配任意集群的任务投递,保证真正落地可用。
赠送两条成熟的生信流程:转录组 Hisat2 + Stringtie 定量(Galaxy 平台同款)、肿瘤 WES 变异检测。可直接用于生产,也是单样本和配对样本流程搭建的范例。
一年内使用 zflow 流程搭建相关的问题咨询。
很多生信流程,值得用 zflow 重写一遍。
云上转录组分析流程(点击图片跳转)
一文读懂scRNA-seq数据分析(点击图片跳转)
如何自学生物信息学:从菜鸟到专家(点击图片跳转)
往期精彩:
生信人的自我修养:Linux 命令速查手册
经典教程:全转录数据分析实战
网上最全的 R 语言图库(建议收藏)| 简说基因 Recommend
清华大学生物信息学课件资料分享
生物信息学软件:两种风格
新年第一课:从零开始入门Galaxy生信云平台
生物信息学必备的R语言相关参考书 | 简说基因 Recommand
从单细胞数据分析的最佳实践看R与Python两个阵营的博弈
涉嫌侵权,容我解(jiao)释(bian)一下
生物信息学中的可重复性研究
关于简说基因
生信平台
Galaxy中国(UseGalaxy.cn)致力于打造中国人的云上生物信息基础设施。大量在线工具免费使用。无需安装,用完即走。活跃的用户社区,随时交流使用心得。
联系方式
QQ交流群(免费):925694514
微信交流群(免费):加微信好友,注明“Galaxy交流群”
客服微信:usegalaxy