GATK4进行变异检测是否可以多线程

GATK

Posted by dulunar on December 29, 2019 | 访问量:

本地跑GATK4的时候发现,它的参数设置中竟然没有多线程的参数,这和GATK3有点大不同,因为在GATK3中我们可以用-nt或者-nct来设定多线程运行,但是GATK4却没有类似的参数,这是为啥呢?

早有研究者问过GATK的团队,官方的回答简单粗暴,没有!如果要使用多线程来跑GATK4流程,那么就在本地节点配置好Spark,那样子就可以用GATK4中的Spark功能模块(比如: HaplotypeCallerSpark、BaseRecalibratorSpark、ApplyBQSRSpark、SortSamSpark、MarkDuplicatesSpark)运行,让Spark来完成多线程。现在GATK4中有蛮多的应用采用了Spark的技术,大家可以使用下面的代码查看:

/path/of/your/local/gatk4/gatk --list

跑过GATK3的同学们应该了解过,以前GATK3中的多线程功能的效果其实并不好,而且还容易出问题。可能也是由于这方面的原因,GATK团队这一次在GATK4中就干脆放弃了通过自己团队实现多线程的想法,直接使用现成的Spark来完成多线程使用的调度。另外,值得一提的是在GATK4中跑并行任务的最好做法是采用WDL和Cromwell相结合的方式。

话虽如此,但GATK团队实际上还是留下了唯一的一个例外!那就是HaplotypeCaller中最消耗计算资源的模块——pariHMM,这个是可以本地单独多线程的!通过“–native-pair-hmm-threads”这个参数来设置,它默认是4,功能有些隐蔽!

							—— dulunar 后记于 2019.12