跳转至

Singularity

容器作为轻量级的虚拟机,可在主机之外提供多种系统环境选择,如某些软件可能只在某个 Linux 发行版本上运行;另外,在容器中一次打包好软件及相关依赖环境之后,即可将复杂的软件环境在各种平台上无缝运行,无需重复多次配置,大大减轻相关工作人员的工作量;因为可以利用容器技术在一台物理机器上部署大量不同的系统(一台物理机支持的容器远多于传统虚拟机),提高了资源利用率,因此在近几年变得非常流行。

目前主流的容器为 docker,其最初被用于软件产品需要快速迭代的互联网行业,极大地简化了系统部署、提高了硬件资源的利用率,近来也在各种特定领域的应用系统中被使用。

嘉庚智算提供了 Singularity 环境,可以方便地基于容器运行节点内和跨节点并行科学计算应用。在使用时,请首先载入环境:

module load singularity/3.8.3

然后请参考如下的指导进行使用

Singularity 调用

Singularity有许多命令,常用的命令有: pullrunexecshellbuild 等。

  1. pull: 从给定的URL下载容器镜像,常用的有URL有Docker Hub(docker://user/image:tag) 和 Singularity Hub(shub://user/image:tag),如

    singularity pull tensorflow.sif docker://tensorflow/tensorflow:latest
    

    关于如何获取镜像,请参考“常见的容器仓库”部分。

  2. run: 执行预定义的命令

  3. exec: 在容器中执行某个命令

    singularity exec docker://tensorflow/tensorflow:latest python example.py
    

    singularity exec tensorflow.sif python example.py
    
  4. shell: 进入容器中的shell

    singularity shell docker://tensorflow/tensorflow:latest
    

    singularity shell tensorflow.sif
    

    然后可在容器的shell中运行自己的程序

  5. build: 创建容器镜像

常用参数

目录映射 (--bind-B)

Singularity 默认将 $HOME , /sys:/sys , /proc:/proc, /tmp:/tmp, /var/tmp:/var/tmp, /etc/resolv.conf:/etc/resolv.conf, /etc/passwd:/etc/passwd, and $PWD 目录映射到容器内目录结构中。

若需要将其他目录加入映射,或将本地目录映射到其他位置,则需要额外配置

例如想要将宿主机目录 /test 映射到容器内部目录 /test1 (容器内部目录不需要提前创建),则可以:

singularity shell -B /test:/test1 ./myimage.sif

若不指定目标路径如 /test1,则会将 /test 映射到 /test:

singularity shell -B /test ./myimage.sif

在嘉庚智算上运行容器,若涉及到 /project 目录 $HOME 以外的路径(含创建了到上述路径软链接的情况),则需要将其映射到容器里,例如:

singularity exec --bind /project/groups/ai4ec

启用 Nvidia GPU 支持 (--nv)

容器支持调用 GPU 硬件资源。

singularity shell --nv ./myimage.sif

在运行前清除环境变量 (--cleanenv)

singularity shell --cleanenv ./myimage.sif

常用的容器仓库

  • Docker Hub (无法直接访问): Docker Hub 是一个广泛使用的容器镜像仓库,用户可以在上面查找、下载和分享容器镜像。由于国内网络限制,可能需要配置代理或使用镜像站点来访问。
  • Nvidia NGC Catalog: Nvidia NGC Catalog 是一个专门为深度学习、机器学习和高性能计算设计的容器镜像仓库。用户可以在上面找到经过优化的容器镜像,这些镜像包含了各种Nvidia GPU加速的应用程序和框架,如TensorFlow、PyTorch、TensorRT等。通过使用这些预构建的容器镜像,用户可以快速部署和运行高性能计算任务,充分利用Nvidia GPU的强大计算能力。