快速上手使用Singularity進(jìn)行生物信息分析
轉(zhuǎn)自:https://cloud.tencent.com/developer/article/1817541? ? ?轉(zhuǎn)自:原文出處及轉(zhuǎn)載信息本文分享自微信公眾號(hào) - 優(yōu)雅R(elegant-r),作者:lakeseafly? ? ? 見(jiàn)文內(nèi)詳細(xì)說(shuō)明,如有侵權(quán),請(qǐng)聯(lián)系 yyc3330@163.com 刪除。
生信分析流程往往需要消耗數(shù)以萬(wàn)計(jì)的電腦計(jì)算資源。另外,生信分析過(guò)程中會(huì)用到大量的分析程序以及腳本,還需要對(duì)運(yùn)行環(huán)境進(jìn)行配置與管理。這會(huì)導(dǎo)致分析的可重復(fù)性變低,導(dǎo)致流程的升級(jí)、管理等都會(huì)成為問(wèn)題。
Docker是很適合解決上述的問(wèn)題。但是生信分析集群,和一般的IT服務(wù)器又有很大區(qū)別,比如無(wú)root權(quán)限,分析任務(wù)需要進(jìn)行資源管理(內(nèi)存,CPU)。這些問(wèn)題都讓Docker技術(shù)在HPC環(huán)境的應(yīng)用受限,正因?yàn)榇宋覀冃枰猄ingularity的誕生。
虛擬機(jī) vs 容器
首先,先和大家介紹一下基本概念。虛擬機(jī)(Virtual Machine)指通過(guò)軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。在實(shí)體計(jì)算機(jī)中能夠完成的工作在虛擬機(jī)中都能夠?qū)崿F(xiàn)。在計(jì)算機(jī)中創(chuàng)建虛擬機(jī)時(shí),需要將實(shí)體機(jī)的部分硬盤和內(nèi)存容量作為虛擬機(jī)的硬盤和內(nèi)存容量。每個(gè)虛擬機(jī)都有獨(dú)立的CMOS、硬盤和操作系統(tǒng),可以像使用實(shí)體機(jī)一樣對(duì)虛擬機(jī)進(jìn)行操作。
容器可以看作是,一種輕量級(jí)的虛擬機(jī)。由于不包含完整的操作系統(tǒng),因此容器只需極少的計(jì)算資源,并且安裝快捷方便。這種效率讓容器能夠在叢集中進(jìn)行部署,同時(shí)將復(fù)雜應(yīng)用的單一組件壓縮到單獨(dú)的容器當(dāng)中。將應(yīng)用組件分別放置在不同的容器當(dāng)中后,開(kāi)發(fā)人員即可對(duì)個(gè)別組件進(jìn)行更新,而無(wú)需重復(fù)運(yùn)行整個(gè)應(yīng)用。
Docker的缺點(diǎn)?
Docker是目前最熱最成熟的容器,但是它卻不是很適合生信分析的 HPC 環(huán)境。原因有幾點(diǎn):
計(jì)算機(jī)資源的限制無(wú)法施加到容器中
多用戶(非 root 用戶)使用時(shí)的權(quán)限問(wèn)題
Docker 包含了不必要的資源開(kāi)銷
使用Singularity的優(yōu)點(diǎn)
首先Singularity擁有容器所包含的大多數(shù)優(yōu)點(diǎn),例如啟動(dòng)迅速、資源開(kāi)銷小、輕松的遷移和擴(kuò)展等等。除此之外,相較于Docker,還有一些獨(dú)特的優(yōu)點(diǎn):
容易對(duì)分析環(huán)境進(jìn)行打包遷徙:Singularity所依賴的東西都在鏡像文件中,不需要再單獨(dú)打包 / 導(dǎo)入,直接拷貝走鏡像即可。沒(méi)有復(fù)雜的緩存機(jī)制,并且該鏡像已經(jīng)過(guò)壓縮,只需占用非常少的磁盤空間。
和現(xiàn)有系統(tǒng)無(wú)縫整合:系統(tǒng)用戶權(quán)限、網(wǎng)絡(luò)等均直接繼承宿主機(jī)配置,并且無(wú)需進(jìn)入某個(gè)鏡像后再執(zhí)行命令,可以直接在外部調(diào)用鏡像內(nèi)的指令,就像執(zhí)行一個(gè)本地安裝的指令一樣。
無(wú)需運(yùn)行 daemon 進(jìn)程:Singularity提供的完全是一個(gè)運(yùn)行時(shí)的環(huán)境,在不使用時(shí)不需要單獨(dú)的進(jìn)程(資源限制和權(quán)限問(wèn)題也得以解決),不占用任何資源。
Singularity還支持多種鏡像和容器文件格式,甚至可以直接使用 Docker 提供的鏡像,就像從 Docker Hub 去 pull 一個(gè)鏡像一樣簡(jiǎn)單。
Singularity可以輕易的現(xiàn)有的 HPC 系統(tǒng)整合,幾乎無(wú)需任何額外的開(kāi)發(fā)就能讓現(xiàn)有的 HPC 變成一個(gè)輕量級(jí)的容器云。
安裝Singularity
安裝好相關(guān)的依賴軟件
sudo apt-getinstall-y? build-essential uuid-dev libgpgme-dev squashfs-tools? libseccomp-dev? wget? pkg-config? git? cryptsetup-bi
如果你還沒(méi)有安裝go語(yǔ)言的話也需要進(jìn)行下載安裝,下載地址:https://golang.org/dl/
下載ingularity
wget https://github.com/hpcng/singularity/releases/download/v3.7.2/singularity-3.7.2.tar.gztar-xzf singularity-3.7.2.tar.gzcd singularity
進(jìn)行安裝
./mconfigcd builddir/sudo makesudo make install
安裝好后,將其加入path中。
使用Singularity運(yùn)行bwa比對(duì)
下載系統(tǒng)images
singularity pull--arch amd64 library://library/default/ubuntu:20.04
接著創(chuàng)建沙箱,給里面裝軟件,一般推薦手動(dòng)安裝:
singularity build--sandbox bwa ubuntu_20.04.sif
封裝軟件:
singularity build bwa.sif bwa
通過(guò)singularity運(yùn)行軟件:
singularity exec bwa.sif bwa
如果操作沒(méi)有問(wèn)題,bwa的幫助文檔就會(huì)彈出來(lái)。
當(dāng)然也可以直接通過(guò)下載好其他人封裝好的鏡像:
singularity pull docker:dceoy/bwa
小結(jié)
相對(duì)docker來(lái)說(shuō),singularity操作更加簡(jiǎn)便,兼容性高。以后會(huì)在HPC中生信分析中,變得原來(lái)越普遍好用。
參考資料:
Docker和Singularity雙劍合璧構(gòu)建生物信息分析流
http://tiramisutes.github.io/2019/08/29/docker.html