Singularity¶
容器作为轻量级的虚拟机,可在主机之外提供多种系统环境选择,如某些软件可能只在某个 Linux 发行版本上运行;另外,在容器中一次打包好软件及相关依赖环境之后,即可将复杂的软件环境在各种平台上无缝运行,无需重复多次配置,大大减轻相关工作人员的工作量;因为可以利用容器技术在一台物理机器上部署大量不同的系统(一台物理机支持的容器远多于传统虚拟机),提高了资源利用率,因此在近几年变得非常流行。
目前主流的容器为 docker,其最初被用于软件产品需要快速迭代的互联网行业,极大地简化了系统部署、提高了硬件资源的利用率,近来也在各种特定领域的应用系统中被使用。
嘉庚智算提供了 Singularity 环境,可以方便地基于容器运行节点内和跨节点并行科学计算应用。在使用时,请首先载入环境:
module load singularity/3.8.3
然后请参考如下的指导进行使用
Singularity 调用¶
Singularity有许多命令,常用的命令有: pull
、run
、exec
、shell
、build
等。
-
pull
: 从给定的URL下载容器镜像,常用的有URL有Docker Hub(docker://user/image:tag) 和 Singularity Hub(shub://user/image:tag),如singularity pull tensorflow.sif docker://tensorflow/tensorflow:latest
关于如何获取镜像,请参考“常见的容器仓库”部分。
-
run
: 执行预定义的命令 -
exec
: 在容器中执行某个命令singularity exec docker://tensorflow/tensorflow:latest python example.py
或
singularity exec tensorflow.sif python example.py
-
shell
: 进入容器中的shellsingularity shell docker://tensorflow/tensorflow:latest
或
singularity shell tensorflow.sif
然后可在容器的shell中运行自己的程序
-
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的强大计算能力。