跳转至

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
    
    singularity shell tensorflow.sif
    
    然后可在容器的shell中运行自己的程序
  • 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"
    

参考:扩增子分析QIIME2. 2分析实战

常用生信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镜像列表

软件名称使用文档/网址
IntaRNAsingularity exec $IMAGE/IntaRNA/3.3.1.sif IntaRNA -hhttps://github.com/BackofenLab/IntaRNA
EDTAsingularity exec $IMAGE/EDTA/2.0.0.sif EDTA.pl -hhttps://github.com/oushujun/EDTA
buscosingularity exec $IMAGE/busco/5.1.3_cv1.sif busco -h使用busco的singularity镜像
alphafold使用alphafold镜像
NVIDIA深度学习包NVIDIA官方构建的深度学习镜像,有速度加成。使用NVIDIA深度学习镜像
Trinitysingularity exec -e $IMAGE/Trinity/2.12.0.sif Trinity -hTrinity
QTLtoolssingularity exec -e $IMAGE/QTLtools/1.3.1.sif QTLtools --helpQTLtools
qiime2singularity exec -e $IMAGE/qiime2/amplicon_2023.9.sif qiime2QIIME 2
subphasersubphaser镜像使用
STAR-Fusionsingularity exec $IMAGE/STAR-Fusion/1.13.0.sif STAR-Fusion -hSTAR-Fusion
antismashsingularity exec $IMAGE/antismash/7.1.0.sif antismash -hantiSMASH Documentation
smcppsingularity exec $IMAGE/smcpp/1.15.4.sif -hsmcpp
ensembl-vepsingularity exec $IMAGE/ensembl-vep/111.0.sif vep --helpensembl-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
注意:在该例中,samtools 是 Singularity 镜像的目录名。

运行 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/

本文阅读量  次
本站总访问量  次