JhGU's personal site

Singularity小抄

前言

Singularity是一种构建可复现科学计算运行环境的工具。它生成的镜像可将科学计算程序及其所依赖的库整体打包,从而实现异机可复现迁移。生成Singularity 沙箱/镜像需要root权限,但使用不需要。因此,可应用于在无管理权限的机器上构建计算运行环境。

基本概念:沙箱镜像以及定义文件

沙箱镜像是两种可供singularity调用的数据,并且可以相互转换,并都可以从定义文件生成。

  • 沙箱的表现形式是一个目录
  • 镜像的表现形式是一个文件,通常以 .simg 或者 .sif 作为扩展名
  • 定义文件是一个文本文件,通常以 .def 为扩展名,包括若干section,每一个section包含不同的声明和命令,通过singularity build 命令,可以用来生成沙箱镜像

符号声明

以下

  • ${SANDBOX}代表沙箱的名称
  • ${SIMG}代表镜像的名称
  • 不加区分时,则以${ENV}代表两者之一。

进入singularity shell 交互环境

singularity shell ${ENV}

不进入交互环境,而只执行某条命令

singularity exec ${ENV} ${CMD} [${ARG1} [${ARG2} [...]]]

如果发现某一个磁盘卷在交互环境和命令执行中无法访问,那是因为singularity默认只挂在最少的必要磁盘卷,应加上下列参数:

-B ${PATH_IN_HOST}:${MOUNT_POINT_IN_SINGULARITY} 例如,位于/data1上的数据无法被看到,应该执行下述命令

singularity shell -B /data1:/data ${ENV}

进入交互环境中之后,本机上/data1磁盘卷将被挂载到/data

定义文件、沙箱、镜像之间的转换

  • 可以从沙箱构建镜像
  • 可以从镜像构建沙箱
  • 可以从定义文件构建沙箱或者镜像

方法:

从定义文件到镜像

sudo singularity build ${SIMG} ${DEF.def}

从定义文件到沙箱

sudo singularity build --sandbox ${SANDBOX} ${DEF.def}

从沙箱到镜像

sudo singularity build ${SIMG} ${SANDBOX}

从镜像到沙箱

sudo singularity build --sandbox ${SANDBOX} ${SIMG}

如何写定义文件?

参见singularity文档