這是一篇工具介紹貼,考慮這個工具是要錢的,那些動不動就說別人忘了初心的使用者肯定認為我寫的是軟文,所以這些人就不要繼續往下看了。變異檢測的軟體目前雖然有很多,samtools/bcftools, gatk, freebayes等,但是我看到的大部分文章都是用gatk ug/hc。gatk的速度是有目共睹的慢,不過我平時就分析幾個重測序樣品,基本上過個兩天就能出結果,所以速度不是我的剛需。
如果想要追求速度的話,一種思路是可以將參考基因組進行分割,然後分別並行運算加速,或者搭建spark環境,用gatk4的spark模式。還有一種就是根據gatk的演算法思想,用c/c++重新寫軟體。去年的時候我看到了乙個軟體叫做sentieon,用c/c++實現了gatk的演算法,瞬間速度就上來了,這是乙個商業公司的收費軟體,目前國內用的比較少。
我原本以為這個速度已經夠快的,直到我最近去demo了另乙個軟體,edico公司開發的dragen,這個效率簡直是喪心病狂。它從硬體和軟體上同時進行加速
為啥我要去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 **cf for each sample
mkdir -p **cf
for sample in $
do prefix=$(basename $)
if [ ! -f **cf/$.done ]; then
dragen -f -r $ref \
-1 $.1.fq.gz -2 $.2.fq.gz \
--enable-variant-caller true \
--vc-emit-ref-confidence **cf \
--vc-sample-name $ \
--output-directory **cf \
--output-file-prefix $ \
--enable-duplicate-marking false \
--enable-map-align-output true
touch **cf/$.done
fidone
find **cf/ -name "*.**cf.gz" | grep -v "hard" > **cfs.list
# merge **cf and join calling
mkdir -p vcf_result
if [ -f **cfs.list -a ! -f vcf_result/combine.**cf.gz]; then
dragen -f -r $ref \
--enable-combine**cfs true \
--output-directory vcf_result \
--output-file-prefix combine\
--variant-list **cfs.listfi
if [ ! -f vcf_result/join_calling.vcf.gz ]
then
dragen -f -r $ref \
--enable-joint-genotyping true \
--output-directory vcf_result \
--output-file-prefix joint_calling\
--variant vcf_result/combine.**cf.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分鐘得到**cf檔案吧,畢竟我用bwa-mem10個執行緒進行比對也要10min呀。事實證明我還是低估了程式猿的能力值,每個gbs樣品得到**cf檔案居然只要不到1min。。
run time,,total runtime,00:00:56.528,56.53
得到的**cf可以進行合併,但是有乙個問題,就是超過200樣本就會出錯,而且join calling執行也不需要combine,所以後續的**就刪掉了merge這一步
...find **cf/ -name "*.**cf.gz" | grep -v "hard" > **cfs.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 **cfs.listfi
在joint calling步驟花的時間比較長,時間是"run time,,total runtime,00:14:24.272,864.27".
雖然軟體執行速度是很快,但是寫出上面的**並且除錯卻花了我好久時間,於是這兩天時間我就在公司裡敲**。除了gbs資料,第二天我還帶著另乙個260m基因組(canu初步組裝和arrow polish後到版本)和乙個100x重測序資料(壓縮後10g資料)去測試,分別在固態硬碟和我的行動硬碟裡測試,結果如下:
這裡有兩個結論
從上面的測試而言,dragen的運算速度的確是非常快的。雖然你需要先把拷貝資料這一步會花點時間,但是你從公司拿到的資料其實也要拷貝到伺服器才行,所以拷貝資料是不可避免的。
對於公司而言,原本需要兩天才能跑完的分析可能現在2小時或者1小時不到就能搞定了,那麼業務速度就快了,此外也不需要搭建spark或者自己搞一套對gatk進行並行,更何況gatk商用是要錢的,國內很多公司都是偷偷的在用吧。對於醫院而言,嗯,他們不差錢。對於科研機構而言,除非專門搞乙個平台管理,不然一年花掉2t的分析資料量還是有難度。
ps:當然都是比對,所以這個軟體也能用於分析rna-seq,chip-seq,atac-seq等illumina高通量測序資料,但是三代測序資料目前搞不定,不知道未來會不會支援。
pps: edico公司看到這篇文章後請給我打廣告費
DRAGEN 硬體和軟體共同加速的變異檢測工具
這是一篇工具介紹貼,考慮這個工具是要錢的,那些動不動就說別人忘了初心的使用者肯定認為我寫的是軟文,所以這些人就不要繼續往下看了。變異檢測的軟體目前雖然有很多,samtools bcftools,gatk,freebayes等,但是我看到的大部分文章都是用gatk ug hc。gatk的速度是有目共睹...
所謂「軟體」和「硬體」
當你做關於硬體的驅動開發時,你一定會用到很多操作硬體的介面函式,如通過對埠的操作可以對硬碟進行讀寫操作 系統提供的中斷也可以在顯示裝置上顯示出一些字元和圖形.等等 作為軟體工程師,我們都知道,高階語言編寫的程式最後編譯後的binary都是0,1,1,0等組成的二進位制檔案。那麼軟體編譯後的 軟體 概...
webview的白屏,和硬體加速
android的硬體加速 android從3.0 api level 11 開始,在繪製view的時候支援硬體加速,充分利用gpu的特性,使得繪製更加平滑,但是會多消耗一些記憶體。開啟或關閉硬體加速 由於硬體加速自身並非完美無缺,所以android提供選項來開啟或者關閉硬體加速,預設是關閉。可以在4...