Singularity/Apptainer容器作业#

Singularity/Apptainer是专为HPC设计的容器技术,它有管理简便,不像Docker那样需要启动Linux服务(docker)。普通用户可以简便地上传容器镜像文件,让后直接使用。

以下以Singularity为例,Apptainer与其类似。

对于Enterprise Linux (RHEL、CentOS、Oracle Linux、Rocky Linux等),Singularity安装命令:

yum install -y epel-release
yum install -y singularity-ce

确保每台需要运行Singularity作业的节点上都安装了以上的Singularity软件包。

制作镜像文件#

镜像文件制作需要root权限。系统管理员可以自行制作,然后把镜像文件放到共享文件系统中。用户也可在自己有root访问权限的Linux服务器上制作镜像,然后上传到自己的HOME目录中。

singularity build centos7.sif docker:centos:7

容器制作的方法请参考Singularity文档

提交Singularity简单作业#

csub -I Singularity run /opt/containers/centos7.sif id

命令输出:

Job 4362 has been submitted to the default queue [medium].
Job 4362 is waiting to be started...
Job 4362 has started on host linux7.
uid=997(cadmin) gid=1006(grp_admin) groups=1006(grp_admin),1005(admin)

提交Singularity MPI作业#

AIP的MPI集成脚本impi-mpirun(支持Intel MPI、MPICH、MVAPICH)和ompi-mpirun(支持OpenMPI和IBM MPI)同时支持Singularity容器作业。

提交作业时有三个环境变量或csub参数可以使用:

环境变量

csub参数

描述

CB_SINGULARITY_IMAGE

-Si

指定Apptainer镜像文件绝对路径

CB_SINGULARITY_OPTIONS

-So

指定apptainer run命令行可选参数

SINGULARITY_BIND

-Sb

指定容器中挂载主机上的目录(HOME不用挂载)

例子:提交OpenMPI Singularity作业,共需128个核,每个节点32个核,交互式作业, 作业输出文件为: 作业号.out:

source /opt/openmpi/openmpi.env
csub -Si /opt/containers/centos7.sif -Sb /opt/openmpi -n 128 -R map[perhost=32] -I -o %J.txt ompi-mpirun ./mympi_prog

同样的方法也可用于Intel MPI、MPICH、MVAPICH,只需把ompi-mpirun改成impi-mpirun。

在以上的例子中,AIP会用4个容器来运行作业,每个节点上一个singularity容器,每个容器中运行32个MPI任务。

与普通MPI作业类似,AIP对整个作业在所有节点上的进程都进行监控,在杀死作业是确保所有节点上属于这个作业的进程都杀掉。