singularity
singularity 介绍¶
容器作为轻量级的虚拟机,可在主机之外提供多种系统环境选择,如某些软件可能只在某个linux发行版本上运行;另外,在容器中一次打包好软件及相关依赖环境之后,即可将复杂的软件环境在各种平台上无缝运行,无需重复多次配置,大大减轻相关工作人员的工作量;因为可以利用容器技术在一台物理机器上部署大量不同的系统(一台物理机支持的容器远多于传统虚拟机),提高了资源利用率,因此在近几年变得非常流行。目前主流的容器为docker,其最初被用于软件产品需要快速迭代的互联网行业,极大地简化了系统部署、提高了硬件资源的利用率,近来也在各种特定领域的应用系统中被使用。
在生物信息领域,为了一次配置,多次使用的目的,一些复杂的软件开始使用docker进行打包分发,另外由于云的兴起,docker也用于搭建私有生物信息云分析平台。尽管如此,由于权限、资源管理等因素限制,docker并未在传统HPC集群(物理裸机+操作系统+作业调度系统+高速互联网络)中流行开。于是,有人开发了专门针对传统HPC集群的容器工具singularity,其使得普通用户可以方便地在集群使用打包好的容器镜像,配合作业调度系统,其使用也非常方便,跟使用其它应用软件的方式相同。singularity还有一大优势是,可直接使用docker镜像,大大提高了singularity的可用性,不必重新造轮子。
singularity 调用¶
module load Singularity/3.1.1
singularity 使用¶
singularity有许多命令,常用的命令有,pull、run、exec、shell、build
pull
从给定的URL下载容器镜像,常用的有URL有Docker Hub(docker://user/image:tag) 和 Singularity Hub(shub://user/image:tag),如
singularity pull tensorflow.sif docker://tensorflow/tensorflow:latest
run
执行预定义的命令
exec
在容器中执行某个命令
或singularity exec docker://tensorflow/tensorflow:latest python example.py
singularity exec tensorflow.sif python example.py
shell
进入容器中的shell
或singularity shell docker://tensorflow/tensorflow:latest
然后可在容器的shell中运行自己的程序singularity shell tensorflow.sif
build
创建容器镜像
singularity 使用举例¶
在/share/Singularity/ 中放了一些下载好的容器镜像,大家可以自己调用,同时也可以联系管理员将自己下好的镜像放到这个公共目录,供大家使用。
这里以qiime2为例,其安装比较繁琐,依赖的python和R包较多,因此官方也给了docker镜像,这里我们可以使用singularity下载、使用qiime2的docker镜像
下载qiime2镜像
singularity pull qiime2_core_2018.11.sif docker://qiime2/core:2018.11
载入数据
bsub -J qiime2_1 -o %J.out -e %J.err "module load Singularity/3.1.1;singularity exec -B /share/exercise/qiime2/emp-single-end-sequences qiime2_core_2018.11.sif qiime tools import --type EMPSingleEndSequences --input-path /share/exercise/qiime2/emp-single-end-sequences --output-path emp-single-end-sequences.qza"
因为在容器中是没有/share/exercise/qiime2/emp-single-end-sequences 这个绝对路径的,所以需要使用-B选项将宿主机的/share/exercise/qiime2/emp-single-end-sequences映射到容器中/share/exercise/qiime2/emp-single-end-sequences
按barcode拆分样品 Demultiplexing sequences
bsub -J qiime2_2 -o %J.out -e %J.err "module load Singularity/3.1.1;singularity exec qiime2_core_2018.11.sif qiime demux emp-single --i-seqs emp-single-end-sequences.qza --m-barcodes-file sample-metadata.tsv --m-barcodes-column BarcodeSequence --o-per-sample-sequences demux.qza"
结果统计
bsub -J qiime2_3 -o %J.out -e %J.err "module load Singularity/3.1.1;singularity exec qiime2_core_2018.11.sif qiime demux summarize --i-data demux.qza --o-visualization demux.qzv"
常用生信singularity镜像¶
galaxy 项目组利用 mulled 自动将 Bioconda 中的所有软件自动转成了 Singularity 容器镜像,目前共计约有 10 万个生信软件镜像,用户可以直接下载使用,比使用 conda 安装更简单,容器列表:https://depot.galaxyproject.org/singularity/, 容器构建说明: https://docs.galaxyproject.org/en/master/admin/special_topics/mulled_containers.html
Note
由于这个列表长度很长网页加载需要很长时间,可以将列表下载到服务器本地搜索。
$ curl -o list https://depot.galaxyproject.org/singularity/
$ grep -o 'href="[^"]*"' list | cut -d'"' -f2|tail -n +4|awk '{print "https://depot.galaxyproject.org/singularity/"$0}' > bio_image_list
# 搜索bwa
$ cat bio_image_list|grep -i bwa
https://depot.galaxyproject.org/singularity/
这里有绝大部分常用生信软件的singularity镜像,可直接下载使用,以bwa为例
# 找到需要的软件镜像,右键"复制链接地址",wget下载
$ wget --no-check-certificate https://depot.galaxyproject.org/singularity/bwa%3A0.7.17--h7132678_9
# 里面含有冒号: ,对linux路径不友好,重命名换成下划线 _;以sif结尾,表示是个singularity镜像;--后面的部分可以去掉
$ mv bwa%3A0.7.17--h7132678_9 bwa_0.7.17.sif
# 使用
$ singularity exec bwa_0.7.17.sif bwa
Program: bwa (alignment via Burrows-Wheeler transformation)
Version: 0.7.17-r1188
Contact: Heng Li <lh3@sanger.ac.uk>
Usage: bwa <command> [options]
Command: index index sequences in the FASTA format
mem BWA-MEM algorithm
fastmap identify super-maximal exact matches
pemerge merge overlapping paired ends (EXPERIMENTAL)
aln gapped/ungapped alignment
samse generate alignment (single ended)
sampe generate alignment (paired ended)
bwasw BWA-SW for long queries
shm manage indices in shared memory
fa2pac convert FASTA to PAC format
pac2bwt generate BWT from PAC
pac2bwtgen alternative algorithm for generating BWT
bwtupdate update .bwt to the new format
bwt2sa generate SA from BWT and Occ
Note: To use BWA, you need to first index the genome with `bwa index'.
There are three alignment algorithms in BWA: `mem', `bwasw', and
`aln/samse/sampe'. If you are not sure which to use, try `bwa mem'
first. Please `man ./bwa.1' for the manual.
使用国内docker hub 镜像站点¶
https://www.coderjia.cn/archives/dba3f94c-a021-468a-8ac6-e840f85867ea
!!! warning 2024.11.19,测试可用
$ singularity pull docker://docker.m.daocloud.io/library/debian:latest
$ singularity pull docker://docker.m.daocloud.io/rnakato/juicer:latest
- dockerpull.org
!!! warning 2024.11.19,测试可用
$ singularity pull docker://dockerpull.org/library/debian:latest
$ singularity pull docker://dockerpull.org/rnakato/juicer:latest
!!! warning 2024.11.19,测试可用
PS:library是一个特殊的命名空间,它代表的是官方镜像。如果是某个用户的镜像就把library替换为镜像的用户名。
集群singularity镜像列表¶
软件名称 | 使用 | 文档/网址 |
---|---|---|
IntaRNA | singularity exec $IMAGE/IntaRNA/3.3.1.sif IntaRNA -h | https://github.com/BackofenLab/IntaRNA |
EDTA | singularity exec $IMAGE/EDTA/2.0.0.sif EDTA.pl -h | https://github.com/oushujun/EDTA |
busco | singularity exec $IMAGE/busco/5.1.3_cv1.sif busco -h | 使用busco的singularity镜像 |
alphafold | 使用alphafold镜像 | |
NVIDIA深度学习包 | NVIDIA官方构建的深度学习镜像,有速度加成。 | 使用NVIDIA深度学习镜像 |
Trinity | singularity exec -e $IMAGE/Trinity/2.12.0.sif Trinity -h | Trinity |
QTLtools | singularity exec -e $IMAGE/QTLtools/1.3.1.sif QTLtools --help | QTLtools |
qiime2 | singularity exec -e $IMAGE/qiime2/amplicon_2023.9.sif qiime2 | QIIME 2 |
subphaser | subphaser镜像使用 | |
STAR-Fusion | singularity exec $IMAGE/STAR-Fusion/1.13.0.sif STAR-Fusion -h | STAR-Fusion |
antismash | singularity exec $IMAGE/antismash/7.1.0.sif antismash -h | antiSMASH Documentation |
smcpp | singularity exec $IMAGE/smcpp/1.15.4.sif -h | smcpp |
ensembl-vep | singularity exec $IMAGE/ensembl-vep/111.0.sif vep --help | ensembl-vep |
参考:
超算平台 Singularity 容器运行简介-中科大.pdf
Singularity Definition 文件¶
将Dockerfile转成Singularityfile
pip install spython
spython recipe Dockerfile &> Singularityfile
#创建镜像
singularity build xxx.sif Singularityfile
singularity安装¶
环境为CentOS7
源码编译安装¶
$ wget https://dl.google.com/go/go1.20.1.linux-amd64.tar.gz
$ tar xf go1.20.1.linux-amd64.tar.gz
$ mv go/* /opt/go/1.20.1
# 设置环境变量
$ export PATH="/opt/go/1.20.1/bin/:$PATH"
$ wget https://github.com/libfuse/libfuse/releases/download/fuse-3.3.0/fuse-3.3.0.tar.xz
$ tar xf fuse-3.3.0.tar.xz
$ cd fuse-3.3.0/
$ mkdir build; cd build
$ module load meson/0.61.5 ninja/1.10.1
$ meson setup --prefix=/opt/fuse/3.3.0 ..
$ ninja
$ ninja install
# 设置环境变量
$ export PKG_CONFIG_PATH="/opt/fuse/3.3.0/lib/pkgconfig:$PKG_CONFIG_PATH"
$ wget https://github.com/plougher/squashfs-tools/archive/refs/tags/4.6.1.tar.gz
$ mv 4.6.1.tar.gz squashfs-tools-4.6.1.tar.gz
$ tar xf squashfs-tools-4.6.1.tar.gz
$ cd squashfs-tools-4.6.1/squashfs-tools/
# 修改安装位置
# 将Makefile文件中的 INSTALL_PREFIX = /usr/local 改为 INSTALL_PREFIX = /opt/squashfs-tools/4.6.1/
$ make && make install
$ module load glib/2.40.2
$ export VERSION=4.1.2
$ wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-ce-${VERSION}.tar.gz
$ tar xf singularity-ce-4.1.2.tar.gz
$ cd singularity-ce-4.1.2/
$ ./mconfig --prefix=/opt/singularity/4.1.2/
$ make -C builddir
$ sudo make install -C builddir
# 更改 /opt/singularity/4.1.2/etc/singularity/singularity.conf 文件
# 将 mksquashfs path = /usr/sbin/mksquashfs 更改为 mksquashfs path = /opt/bio/software/squashfs-tools/4.6.1/bin/
yum+rpm快速安装¶
yum install -y autoconf automake cryptsetup fuse3-devel git glib2-devel libseccomp-devel libtool runc wget zlib-devel
# centos7 yum 安装的squashfs-tools版本低于4.5,singularity 4.1要求squashfs-tools 版本不低于4.5,因此选择从源码编译安装
$ wget https://github.com/plougher/squashfs-tools/archive/refs/tags/4.6.1.tar.gz
$ mv 4.6.1.tar.gz squashfs-tools-4.6.1.tar.gz
$ tar xf squashfs-tools-4.6.1.tar.gz
$ cd squashfs-tools-4.6.1/squashfs-tools/
$ make && make install
$ export VERSION=4.1.2
$ wget https://github.com/hpcng/singularity/releases/download/v${VERSION}/singularity-${VERSION}.tar.gz
$ rpmbuild -tb singularity-${VERSION}.tar.gz
$ rpm -ivh ~/rpmbuild/RPMS/x86_64/singularity-${VERSION}-1.el7.x86_64.rpm
$ rm -rf rpmbuild
docker 镜像转 singularity 镜像¶
查找 Docker 镜像 ID¶
在运行 Docker 的主机上,使用命令 docker images
查找存储在本地注册表中的 Docker 镜像的镜像 ID (通常是 /var/lib/docker
):
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/biocontainers/samtools 1.17--hd87286a_1 c6ab05d10f7f 6 weeks ago 66.7MB
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
创建 Docker 镜像的 tarball 文件¶
对于想移植到其它主机上的 Docker 镜像,例如,biobakery/lefse
,镜像ID为 c6ab05d10f7f
,使用 docker save
命令创建一个 tarball:
$ docker save c6ab05d10f7f -o samtools.tar
将 tarball 转换为 Singularity 镜像¶
如果 tarball 在当前工作目录中,执行:
$ singularity build --sandbox samtools docker-archive://samtools.tar
如果 tarball 文件不在当前工作目录中,需指定路径,例如 /tmp
:
$ singularity build --sandbox samtools docker-archive:///tmp/samtools.tar
运行 Singularity 沙箱镜像,例如:
$ singularity shell samtools
$ singularity exec samtools samtools help
$ singularity run samtools
参考¶
https://mp.weixin.qq.com/s/1ysA1A8WnyXNh_6VzL7aJw
https://mp.weixin.qq.com/s/2_Qt04skLhPSrHCwzGWgHg
https://mp.weixin.qq.com/s/NewJUg8LcCHjWEdQK3CODQ
https://mp.weixin.qq.com/s/TPqfn3yJcQwR5o3sBKXpXg
https://mp.weixin.qq.com/s/6hB7NBGccsqINOBIe-Q2Uw
https://zhuanlan.zhihu.com/p/138797794
https://www.jianshu.com/p/b46ee066806b
https://itoc.sjtu.edu.cn/wp-content/uploads/2020/11/Chengshenggan.pdf
https://gist.github.com/diyism/4b892a4339f35561dd2ec48158a8c75d
https://www.cnblogs.com/newblg/p/17724951.html
https://www.dzbioinformatics.com/2021/04/02/singularity-%E7%BB%83%E4%B9%A0/
本文阅读量 次本站总访问量 次