生信分析流程往往需要消耗数以万计的电脑计算资源。另外,生信分析过程中会用到大量的分析程序以及脚本,还需要对运行环境进行配置与管理。这会导致分析的可重复性变低,导致流程的升级、管理等都会成为问题。
Docker是很适合解决上述的问题。但是生信分析集群,和一般的IT服务器又有很大区别,比如无root权限,分析任务需要进行资源管理(内存,CPU)。这些问题都让Docker技术在HPC环境的应用受限,正因为此我们需要Singularity的诞生。
首先,先和大家介绍一下基本概念。虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
容器可以看作是,一种轻量级的虚拟机。由于不包含完整的操作系统,因此容器只需极少的计算资源,并且安装快捷方便。这种效率让容器能够在丛集中进行部署,同时将复杂应用的单一组件压缩到单独的容器当中。将应用组件分别放置在不同的容器当中后,开发人员即可对个别组件进行更新,而无需重复运行整个应用。
Docker是目前最热最成熟的容器,但是它却不是很适合生信分析的 HPC 环境。原因有几点:
首先Singularity拥有容器所包含的大多数优点,例如启动迅速、资源开销小、轻松的迁移和扩展等等。除此之外,相较于Docker,还有一些独特的优点:
安装好相关的依赖软件
sudo apt-get install -y build-essential uuid-dev libgpgme-dev squashfs-tools libseccomp-dev wget pkg-config git cryptsetup-bi
如果你还没有安装go语言的话也需要进行下载安装,下载地址:https://golang.org/dl/
下载ingularity
wget https://github.com/hpcng/singularity/releases/download/v3.7.2/singularity-3.7.2.tar.gz
tar -xzf singularity-3.7.2.tar.gz
cd singularity
进行安装
./mconfig
cd builddir/
sudo make
sudo make install
安装好后,将其加入path中。
下载系统images
singularity pull --arch amd64 library://library/default/ubuntu:20.04
接着创建沙箱,给里面装软件,一般推荐手动安装:
singularity build --sandbox bwa ubuntu_20.04.sif
封装软件:
singularity build bwa.sif bwa
通过singularity运行软件:
singularity exec bwa.sif bwa
如果操作没有问题,bwa的帮助文档就会弹出来。
当然也可以直接通过下载好其他人封装好的镜像:
singularity pull docker:dceoy/bwa
相对docker来说,singularity操作更加简便,兼容性高。以后会在HPC中生信分析中,变得原来越普遍好用。
参考资料:
Docker和Singularity双剑合璧构建生物信息分析流 http://tiramisutes.github.io/2019/08/29/docker.html