LOADING
返回 2025-12-18

使用glnexus进行joint call的一些经验

wslll
| BI | 20

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