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}