超算容器技术的核心。Singularity(现在的新版本叫 Apptainer)就是专门为高性能计算集群、特别是你之前关心的乌镇之光、秦岭超算这种 Slurm 调度环境而生的容器方案。
—Singularity(现叫 Apptainer)不需要root权限的容器方案,在slurm中也能安装,对比docker
一句话理解
它是一个能让普通用户(无需 root)在共享集群上安全运行“轻量级虚拟环境”(容器)的工具,并且能直接使用 Docker 镜像,还能无缝调用 GPU/DCU 等加速卡。
为什么超算不用 Docker,而要专门搞个 Singularity?
这就回到我们之前讨论的问题了,核心是架构和安全理念的差异:
| Docker | Singularity/Apptainer | |
|---|---|---|
| 权限 | 守护进程需root,用户相当于有 root 权限,多租户集群的大忌。 | 无守护进程,普通用户就能跑,容器内权限与用户启动时的权限一致,无法提权。 |
| 调度集成 | 与 Slurm 等调度器“打架”,容器容易绕过资源限制。 | 被设计为 Slurm 的“子进程”,完全受 Slurm 资源控制。 |
| 镜像格式 | 分层存储,需要守护进程,不适合共享文件系统。 | 单个文件 (.sif)或目录,直接放在用户家目录,可移动、复制,像普通文件一样。 |
| GPU/加速卡 | 需要nvidia-docker等复杂配置。 | 直通:只要宿主机有驱动,容器内--nv(NVIDIA) 或--rocm(AMD/海光DCU) 即可调用。 |
| 文件系统 | 默认隔离,访问 Lustre 等并行文件系统需要挂载。 | 默认透明访问宿主文件系统,你的家目录、项目目录都能直接读写。 |
简单说:Docker 是为了在一台机器上隔离服务;Singularity 是为了在一个大集群上,让千百个用户安全、方便地跑各自的计算任务。
Singularity 和 Apptainer 是什么关系?
- Singularity是原始项目,由 Sylabs 公司主导。
- Apptainer是 2021 年该项目加入 Linux 基金会后改的名字,由社区维护,完全开源。
- 现实情况:绝大多数超算两个命令都兼容,
singularity命令一般通过软链接指向apptainer,或者环境里两个都有。你执行singularity或apptainer效果一样。下文我统一用apptainer。
核心概念和常用操作
1. 镜像:单文件 .sif
最大的特点:一个镜像就是一个文件xxxx.sif。你可以从 Docker Hub 直接拉取镜像并转换成 SIF 文件。
# 把 Docker 官方的 Ubuntu 22.04 镜像拉到当前目录,生成 ubuntu_22.04.sifapptainer pull docker://ubuntu:22.042. 运行容器
# 直接执行一条命令apptainerexecubuntu_22.04.sifcat/etc/os-release# 进入容器的交互式 shellapptainer shell ubuntu_22.04.sif# 直接运行容器(会执行镜像定义的 run 命令)apptainer run ubuntu_22.04.sif3. 文件系统访问
这是专为 HPC 设计的最大便利:
- 自动挂载家目录:进入容器后,你的
$HOME就在那里,直接读写。 - 自动挂载当前目录:从哪启动,容器里也能看到同样的目录。
- 要访问其他路径,如项目的
/data,用-B绑定:apptainerexec-B/data ubuntu_22.04.sifls/data
4. 调用海光 DCU(ROCm 栈)
在你关心的乌镇之光、秦岭超算上,调用 DCU 加速卡非常简单:
# --rocm 标志会挂载海光 DCU 所需设备和库apptainerexec--rocmubuntu_22.04.sif python3 my_dcu_script.py前提是镜像里有对应的 ROCm 软件栈(可拉取rocm/dev-ubuntu-22.04等官方镜像)。
5. 安装你自己的软件(可写 sandbox)
因为 .sif 文件是只读的,如果你想在 Ubuntu 镜像里apt install装个包,就需要使用sandbox(可写容器,是一个目录):
# 1. 把 docker 镜像转成可写目录apptainer build--sandboxmy_ubuntu_sandbox docker://ubuntu:22.04# 2. 进入这个目录并打开 shell,这时可写apptainer shell--writablemy_ubuntu_sandbox# 3. 进去后,你就是“伪root”,可以 apt 安装软件了Singularity>aptupdate&&aptinstall-yvim# 退出后,你的 vim 就保存在 my_ubuntu_sandbox 目录里了在 Slurm 作业脚本里的典型用法
把容器和 Slurm 结合,就是常规的批处理作业:
#!/bin/bash#SBATCH -J my_app#SBATCH -p dcu_queue#SBATCH -n 4#SBATCH --gres=dcu:1 # 申请1块DCU卡# 加载 Singularity/Apptainer 模块(如果需要)module load apptainer# 直接用 --rocm 运行你之前拉好的镜像apptainerexec--rocmmy_rocm_image.sif python train.py这个作业会由 Slurm 分配资源,然后在隔离的 Ubuntu 容器里,带着你申请的那块 DCU 卡跑计算。
对你前面问题的呼应
现在回头看你之前问的“能在个人账户下安装 Ubuntu 镜像吗?”:
能,而且这就是 Singularity 存在的意义。你用apptainer pull docker://ubuntu拉下来的ubuntu_22.04.sif文件,就是一个完整的 Ubuntu 用户态环境,不需要 root,不需要管理员安装任何东西,直接在你的家目录里就能跑。想装软件就把它转成 sandbox 进去apt install。
如果你需要,我可以立刻给你一个针对乌镇之光/秦岭超算(海光 DCU)的完整操作示例,从拉镜像、装 ROCm 软件、到提交 Slurm 任务一步不落。
其他视频资料
https://www.bilibili.com/video/BV1Pt9YYGE8t/?spm_id_from=333.337.search-card.all.click&vd_source=7d3841cb81fdca8b20a31fa9ee5ec8ef