一、Singularity的简单介绍
日趋成熟的二代和三代测序技术产生了大量的测序数据,这些数据的挖掘离不开各种各样的生物信息学工具。将这些生信工具进行有效的整合是每个科研工作者和科研公司的重要工作内容。但是在分析流程搭建过程中经常会遇到如下场景:
场景1:当你花费了大量的时间在本地搭建了一套分析流程想要迁移到其他服务器的时候,服务器的环境总是给你出难题,让你不得不重新来一遍之前的工作。
场景2:当你分享某个分析流程给团队伙伴时,会收到团队小伙伴们的热情咨询,使你不得不花时间把流程中的所有软件版本,依赖环境等信息一一整理出来。
场景3:当你使用文章中的代码准备复现结果时,发现同样的数据和代码重复不出来同样的结果,在各种检查和测试后或许会发现是某个软件依赖包的版本不一样导致的。
怎么样高效的搭建分析流程且能保证分析流程稳定运行的使用效果呢?容器技术(container)是个不错的选择。容器技术具有极其轻量、秒级部署、易于移植和弹性伸缩等特点。在容器技术中,docker和singularity 是常用的容器软件。和docker相比,singularity可以兼容docker的镜像,同时构建出的镜像可以很容易进行拷贝和转移,且体积更小;此外singularity 假设用户在一个有root权限的系统上构建容器,在一个没有root权限的系统上运行容器,兼顾了数据的安全性和便捷性,更加符合实际的应用场景。
二、Singularity的基础知识
1.Singularity的两种常用镜像格式
两种镜像格式的转换:
2.其他常用命令介绍
3.Singularity流程搭建时的推荐操作
a) 将每一步分析所依赖的环境打包成一个镜像,平衡文件大小和使用效率;
b) 流程代码、所需数据库、第三方软件与镜像分离,便于后期维护;
c) 流程搭建时使用sandbox格式进行镜像的搭建,可以不使用“Definition Files”从而加快速度。
三、Singularity的操作实例
目标:搭建一个动植物重测序的分析流程,并在centos7的环境下运行该流程。
第一步:搜索centos7的基础镜像并下载
使用singularity search找到网上关于centos7的基础镜像地址,然后通过pull命令将镜像拉取下来。具体操作如下:
$singularity search centos7 ##搜索镜像地址
$singularity pull centos7.sif library://gmk/default/centos7-devel:latest ##下载镜像
由于sif格式镜像为只读,而基础镜像通常会有很多依赖库不存在,所以就需要创建sandbox格式可写的镜像类型,转换命令为:
$ singularity build --sandbox centos7 centos7.sif ##镜像格式转换
第二步:安装流程所需的第三方软件
基于第三方软件与镜像分离的原则,我们首先在宿主机上创建用于软件安装的路径,例如“/pipeline/reseq/third_party”。挂载软件安装的目录,并以可写的方式交互进入镜像环境。这里需要注意的是即使是sandbox格式镜像,如果我们在使用singularity shell时不加-w参数也没法对镜像进行修改,另外,当前用户不是root时,需要加上sudo指令,可以使用如下命令进行操作。
$ sudo singularity shell -w -B/pipeline/reseq/third_party:/pipeline/reseq/third_party centos7 ##交互形式进入镜像环境
然后我们就可以在里面安装所需软件或者包,此时我们可以用yum安装一些系统所需的库,并且也可以通过pip3等工具将包安装到系统目录下面。比如安装python3软件:
$Singularity> yum install python3-devel ##安装python3
通过pip3安装依赖包matplotlib示例如下:
$Singularity> pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib ##安装matplotlib包
第三步:编写分析流程脚本
按照一定的逻辑顺序编写脚本将不同的分析软件连接起来。此时推荐将软件路径与挂载路径保持统一,避免为路径切换所苦恼。主脚本运行完成后,会生成每一步所需的脚本,以比对为例,脚本内容如下:
$ singularity run -B /data/seq_dir:/data/seq_dir -B /genome/hg19:/genome/hg19 -B/pipeline/reseq/:/pipeline/reseq/centos7 /pipeline/reseq/third_party/bwa mem/genome/hg19/hg19.fasta/data/seq_dir/sample.R1.fastq.gz/data/seq_dir/sample.R2.fastq.gz -t 64 -M -S > sample.sam ##执行脚本内容
每一步可以本地运行也可以使用SGE或者PBS投递到计算节点运行,这里需要注意的是计算节点也需要安装singularity。
第四步:打包发布流程
分析流程经过测试后,可以将修改后的流程转换为sif格式,进行发布,镜像打包命令如下:
$ singularity build reseq.sif centos7 ##新镜像生成
Centos7为前面打包好的可写镜像,reseq.sif为输出的sif格式镜像
我们建议的流程搭建的目录结构如下:
reseqv2.3.1/
├── img 目录:用于存放打包好的环境镜像
│ └── reseq.sif 镜像名称
├──main.py 流程运行时的主脚本
├──script 存放流程每一步的脚本
│ ├── 01alignment 第一步比对脚本的目录
│ ├── 02calling 第二步检测编译和注释的目录
│ ├── 03qc 第三步进行QC的脚本目录
│ └── 04report 第四步生成report的脚本目录
└──third_party 安装第三方软件的目录
网友评论