应用介绍
容器是一种广为采用的应用封装技术,它将可执行程序与依赖库打包成一个镜像文件,启动时与宿主节点共享操作系统内核。由于容器特殊的隔离方式,使得它几乎可以在任何地方运行,不管目标环境是服务器,还是开发者的个人电脑。
singularity 是高性能计算集群采用的容器技术,相比Docker容器技术,Singularity 同时支持root用户和非root用户启动,且容器启动前后,用户上下文保持不变,这使得用户权限在容器内部和外部都是相同的。 此外,Singularity 强调容器服务的便捷性、可移植性和可扩展性,弱化了容器进程的高度隔离性,因此量级更轻,内核namespace更少,性能损失更小。
使用指南
获取镜像
平台预置了一些常用 Singularity 镜像,存放在 /opt/app/sif
目录,用户可以直接调用。
用户可以从 Sylabs Cloud 网站获取镜像,方法是:
singularity pull ubuntu.sif library://library/default/ubuntu:22.04
用户可以从 Docker Hub 网站获取镜像,方法是:
singularity pull ubuntu.sif docker://ubuntu:latest
用户可以从 Singularity Hub 网站获取镜像,方法是:
singularity pull singularity-images.sif shub://vsoch/singularity-images
制作个人镜像
以制作安装pigz工具为例,用户在创建好singularity虚拟机实例后,登录实例即可进行如下操作:
使用docker hub提供的 ubuntu:22.04 作为基础镜像,并创建名为ubuntu22_pigz 的 sandbox
singularity build --sandbox ubuntu22_pigz docker://ubuntu:22.04
命令说明: ubuntu22_pigz 是镜像的名称,可以随意命名。
进入创建好的sandbox。注意,singularity会自动挂载HOME目录,如果是用root用户进入,则会挂载/root目录
singularity shell -w ubuntu22_pigz
命令说明: -w表示可写。
在sandbox中安装pigz 或者其它用户需要的软件,安装完成后输入exit
命令安装
apt update && apt upgrade -y
apt install pigz -y
exit
将修改好的sandbox打包成sif镜像格式
singularity build ubuntu22_pigz.sif ubuntu22_pigz
运行容器,验证安装是否正确
singularity exec ubuntu22_pigz.sif pigz --help

使用singularity容器
用户可以将虚拟机实例中制作好的singularity镜像,通过 /webdav
拷贝到公共集群的个人目录,并选择适合自己的方式运行
- 使用salloc交互方式申请计算资源,并登录到计算节点运行
export PATH=$PATH:/opt/app/singularity/bin
singularity exec ubuntu22_pigz.sif pigz --help
- 使用sbatch脚本方式,提交作业任务
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=2
#SBATCH --time=1:00:00
export PATH=$PATH:/opt/app/singularity/bin
singularity exec ubuntu22_pigz.sif pigz --help
相关问题
1. 用户如果需要在容器中使用 NviDIA GPU ,可以在运行时加上 [ --nv ] 参数
singularity shell --nv ./myimage.sif
2. 用户如果需要映射计算节点的其它目录到容器中,可以在运行时加上 [ --bind 或 -B ] 参数,例如:
singularity shell --nv --bind /opt/app/cuda/12.6:/usr/local/cuda
参考链接
https://singularity-userdoc.readthedocs.io/en/latest/