使用glnexus进行joint call的一些经验
AI 摘要
最近在进行一个较大规模群体的变异检测工作,在使用 GATK 完成个体变异检测后,需要进行群体分型,这一步往往非常消耗时间。不管是针对大样本的GenomicsDBImport方案还是传统的 CombineGVCFs 方案,耗时都挺长。通过一番查找,在学校超算集群文档找到了glnexus似乎可以作为加速替代。
简单查阅资料,glnexus (GL, genotype likelihood)用于对大规模 gvcf 进行 joint call,其由DNAnexus公司开发。官方宣称glnexus 可以代替 GATK CombineGVCFs 和 GATK GenotypeGVCFs,且速度要快很多。glnexus 为开源软件,可免费使用。
官网:https://github.com/dnanexus-rnd/GLnexus/
那么在使用glnexus过程中,也遇到一些问题,这里做一个经验分享。
1.glnexus是否适合染色体拆分
最开始为了加快整体的速度,我决定使用染色体拆分的形式进行并行处理,由于我分析的物种有 24 条染色体,受制于服务器性能以及硬盘阵列的 IO,我选择了单次并行 12 条染色体进行分析。结果令人感到意外的是,似乎针对每一条染色体的分析都会从头构建GLnexus.DB,会生成非常多的过程文件,也就是 sst 文件。
按照glnexus的已有 joint call 的速度测试,我的全部 GVCFs 在 2.4T 左右,群体分型应该花费时间在 45-60 小时之间。但是仅第一轮的 12 条染色体并行已经是耗费了超过 72 小时,并且硬盘占用毕竟 50TB。但此时,由于我之前没有使用过glnexus,我并不知道问题出在了哪里。
为了防止硬盘阵列的崩溃(我为自己本次数据分析,从集群中只申请了 54T 的临时硬盘挂载),只能中断任务。并且,通过在 bing 查找资料,并没有找人使用glnexus进行拆分染色体并行的任何信息,此时我意识到可能根本就不能这么用。
于是我采用官网的标准方法直接进行群体分型,成功跑通。最终 sst 文件仅 1.9TB,任务过程中占用运行内存 RAM 峰值仅达到 1TB 左右,运行时间仅 30h+。因此我认为,如果你也要尝试使用glnexus来进行群体分型,建议直接使用默认方式进行。
2.以哪种方式调用软件
根据我的实际使用体验来看,我非常推荐使用 docker 镜像的方式进行glnexus的调用。编译源码还是比较复杂的,而且对于使用 centos 7 的用户,glic 版本的问题会导致编译难度增加,使用 docker 镜像的方式会方便很多。同时也便于进行资源控制。
另外,glnexus运行非常占用 RAM,我的机器运行内存为 1.5TB,全部 GVCFs 总大小 2.4T 的情况下(参考基因组大小约 1G),峰值运存占用能达到 1000G,所以务必提前考虑内存是否能承受其运行。
另外这是来自学校集群的速度测试表格仅供参考
| 物种 | 样本数 | gvcf.gz | 运行队列 | 耗时 | 内存 | 临时空间 |
|---|---|---|---|---|---|---|
| 水稻 | 2800 | 2.8 TB | smp(s004) | 52 h | 680 GB | 8 TB |
| 水稻 | 250 | 250 GB | smp | 4.5 h | 250 GB | - |
| 未知 | 400 | 600 GB | normal | 6 h | 310 GB | 1.1 TB |
| 棉花 | 250 | 800 GB | smp | 15 h | 230 GB | 2.3 TB |