DRAGEN: 硬件和软件共同加速的变异检测工具

news/2024/10/20 20:15:57/
2013053-26ab2218dffa53b3
DRAGEN

这是一篇工具介绍贴,考虑这个工具是要钱的,那些动不动就说别人忘了初心的用户肯定认为我写的是软文,所以这些人就不要继续往下看了。

变异检测的软件目前虽然有很多,SAMtools/BCFtools, GATK, FreeBayes等,但是我看到的大部分文章都是用GATK UG/HC。GATK的速度是有目共睹的慢,不过我平时就分析几个重测序样品,基本上过个两天就能出结果,所以速度不是我的刚需。

如果想要追求速度的话,一种思路是可以将参考基因组进行分割,然后分别并行运算加速,或者搭建Spark环境,用GATK4的Spark模式。还有一种就是根据GATK的算法思想,用C/C++重新写软件。去年的时候我看到了一个软件叫做sentieon,用C/C++实现了GATK的算法,瞬间速度就上来了,这是一个商业公司的收费软件,目前国内用的比较少。

我原本以为这个速度已经够快的,直到我最近去demo了另一个软件,edico公司开发的DRAGEN,这个效率简直是丧心病狂。它从硬件和软件上同时进行加速

  • 需要购买他们公司的硬件,128G内存,56线程,2T固态硬盘,以及一个FPGA芯片
  • 比对这一步的算法基于而不是BWT转换(这就是为什么要128G内存)
  • 比对之前要将索引加载到芯片中,所以每次只能比对一个任务
  • 由于IO读写是非常大瓶颈,所以采用了固态硬盘
  • 程序由C/C++开发,所以效率极高

为啥我要去demo这个工具呢,主要因为最近服务器资源紧缺(因为之前用的服务器要么是合租的,要么是蹭别人的),而老板又在催进度,而要买的服务器还在路上。就在这走投无路的情况下,我突然想起2个月之前和这个设备的负责人说要去测试一下(换句话说,我放了他两个月的鸽子。。)

看完软件说明书,我就坐着地铁揣着硬盘,硬盘里装着一个260M的基因组和230个GBS测序的数据(80G)跑到仁科生物公司以测试软件之名实为蹭别人的服务器。

首先我把数据一股脑地全从硬盘里拷到固态硬盘挂载的 /staging

然后是建立索引:

dragen -h-ht-reference reference.fa --output-directory reference --build-hash-table true

接着我现场写了一个shell脚本用来批量分析,命名为 run_dragen.sh

#!/bin/bash
set -e
set -u
set -o pipefail
REF=$1
SAMPLES=$2
samples=$(cat $SAMPLES)
# loading hash table
dragen -l -r $REF
# calling gvcf for each sample
mkdir -p GVCF
for sample in ${samples}
doprefix=$(basename ${sample})if [ ! -f GVCF/${prefix}.done ]; thendragen -f -r $REF \-1 ${sample}.1.fq.gz -2 ${sample}.2.fq.gz \--enable-variant-caller true \--vc-emit-ref-confidence GVCF \--vc-sample-name ${prefix} \--output-directory GVCF \--output-file-prefix ${prefix} \--enable-duplicate-marking false \--enable-map-align-output truetouch GVCF/${prefix}.donefi
done
find GVCF/ -name "*.gvcf.gz" | grep -v "hard" > gvcfs.list
# merge gvcf and join calling
mkdir -p vcf_result
if [ -f gvcfs.list -a ! -f vcf_result/combine.gvcf.gz]; thendragen -f -r $REF \--enable-combinegvcfs true \--output-directory vcf_result \--output-file-prefix combine\--variant-list gvcfs.listfi
if [ ! -f vcf_result/join_calling.vcf.gz ]
thendragen -f -r $REF \--enable-joint-genotyping true \--output-directory vcf_result \--output-file-prefix joint_calling\--variant vcf_result/combine.gvcf.gzfi

运行方法:

# 创建一个文件存放待分析的样本
find /staging/xuzhougeng/00-raw-data/ -name "*.fq.gz"| sed 's/\(.*\)\.[12].fq.gz/\1/' | uniq > samples.txt
# 执行命令, 参数分别是索引的文件夹和样本文件
bash run_dragen.sh reference samples.txt &> run.log &

按照我的估算,每个样本至少得要花个20分钟得到GVCF文件吧,毕竟我用BWA-MEM10个线程进行比对也要10min呀。事实证明我还是低估了程序猿的能力值,每个GBS样品得到GVCF文件居然只要不到1min。。

RUN TIME,,Total runtime,00:00:56.528,56.53

得到的GVCF可以进行合并,但是有一个问题,就是超过200样本就会出错,而且Join calling运行也不需要combine,所以后续的代码就删掉了merge这一步

...find GVCF/ -name "*.gvcf.gz" | grep -v "hard" > gvcfs.list
# join callingif [ ! -f vcf_result/join_calling.vcf.gz ]t
hen    dragen -f -r $REF \--enable-joint-genotyping true \--output-directory vcf_result \--output-file-prefix joint_calling\--variant-list gvcfs.listfi

在Joint Calling步骤花的时间比较长,时间是"RUN TIME,,Total runtime,00:14:24.272,864.27".

虽然软件运行速度是很快,但是写出上面的代码并且调试却花了我好久时间,于是这两天时间我就在公司里敲代码。除了GBS数据,第二天我还带着另一个260M基因组(Canu初步组装和arrow polish后到版本)和一个100X重测序数据(压缩后10G数据)去测试,分别在固态硬盘和我的移动硬盘里测试,结果如下:

固态硬盘 draft.fa: 06:31(mapping) + 28.17 (varaint calling) 
普通移动硬盘 draft.fa: 28.33(mapping) + 29.03 (varaint calling)
固态硬盘 polish.fa: 06:09(mapping) + 13.093(variant calling)
普通移动硬盘 polish.fa: 27.46(mapping) + 13.33(varint calling)

这里有两个结论

  • 是比对的IO对速度影响非常大,也就是要一定要在固态硬盘里发挥它最大的威力。
  • 重测序样本与参考基因组的差异程序影响variant calling这一步。

从上面的测试而言,DRAGEN的运算速度的确是非常快的。虽然你需要先把拷贝数据这一步会花点时间,但是你从公司拿到的数据其实也要拷贝到服务器才行,所以拷贝数据是不可避免的。

对于公司而言,原本需要两天才能跑完的分析可能现在2小时或者1小时不到就能搞定了,那么业务速度就快了,此外也不需要搭建spark或者自己搞一套对GATK进行并行,更何况GATK商用是要钱的,国内很多公司都是偷偷的在用吧。对于医院而言,嗯,他们不差钱。对于科研机构而言,除非专门搞一个平台管理,不然一年花掉2T的分析数据量还是有难度。

PS:当然都是比对,所以这个软件也能用于分析RNA-seq,ChIP-seq,ATAC-seq等illumina高通量测序数据,但是三代测序数据目前搞不定,不知道未来会不会支持。

PPS: EDICO公司看到这篇文章后请给我打广告费


http://www.ppmy.cn/news/305985.html

相关文章

30台无盘服务器配置,带30台机器的无盘服务器配置方案两套

一位天下网吧论坛注册会员在天下网吧论坛发布了一个关于30台客户机的无盘网吧服务器配置方案的求助的帖,然后天下网吧论坛不亏为无盘网吧,无盘系统相关讨论最大最早的网站,很快就有哥们回复支招了,一起来看看: 首先你要…

MySQL体系构架、存储引擎和索引结构

点击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 对某项技术进行系统性的学习,始终离不开对该项技术的整体认知。只有领略其全貌,方可将各块知识点更好的串联起来。为了进一步理解和学习MySQL,我们有必要了…

数据结构——栈,队列和数组

文章目录 **一 栈****1 基本概念****2 栈的顺序存储结构****2.1 顺序栈的实现****2.2 顺序栈的基本运算****2.3 共享栈** **3 栈的链式存储结构** **二 队列****1 基本概念****2 队列的顺序存储结构****2.1 队列的顺序存储****2.2 循环队列****2.3 循环队列的操作** **3 队列的…

浩顺考勤机二次开发(第二版,附实测可用的demo)

1.背景 之前写过一次浩顺考勤机的二次开发,不过那个版本还是有一些问题,后来更换了新的考勤机,又拿到了新的二次开发包,所以就有了这次这个版本 2.关于考勤机的一些说明 2.1 首先要给考勤机设定ip,通过网络访问考勤机。使用考勤机自带的软件读取一次数据&#xff0c…

java二次开发考勤机_浩顺AC671指纹考勤机二次开发(demo)

关于考勤机 AC671,是新换的机器,以前的那部机器,通过网络死活连接不上,换了AC671网络连接是好用了.但是,我要吐槽 浩顺的考勤机应该是卖了很多了吧,可是自带的软件太不给力,最后分析出来的数据一大堆,并不好用.so,试试看二次开发 联系卖家要来了二次开发包,是一个EXE文件,安装,…

CKA 07_Kubernetes 工作负载与调度 控制器 ReplicaSet Deployment Jobs CronJob

文章目录 1. Pod 的分类2. 控制器类型3. ReplicaSet3.1 工作原理3.2 何时使用 ReplicaSet3.3 创建 ReplicaSet3.4 修改 RS 管理 pod 的标签3.5 还原 RS 管理 pod 的标签 4. Deployment4.1 准备工作4.2 用例4.3 创建 Deployment4.4 Deployment 进行 Pod 的版本更新4.5 Deploymen…

JAVA中如何使用Socket 实现聊天功能?带具体代码说明

Java Socket 是 Java 标准库中用于网络编程的一种方式,通过 Socket 实现可以在不同的计算机之间进行数据传输。在聊天应用中,Socket 可以用来建立客户端和服务器之间的连接,实现用户之间的聊天交流。 一、建立服务器端 在建立服务器端时&am…

电脑联想小新连上蓝牙耳机依然外放,终于解决了

1、打开蓝牙设置 2、 拉到下面,点击 设备和打印机 3、找到 未指定/设备 里的蓝牙耳机。如果 设备 里未显示蓝牙耳机,点击 未指定 里蓝牙耳机的属性-服务,勾选音频接收器,设备里就会显示蓝牙耳机。 4、右击设备里的蓝牙耳机&#x…