超算容器技术的核心。Singularity现在的新版本叫 Apptainer就是专门为高性能计算集群、特别是你之前关心的乌镇之光、秦岭超算这种 Slurm 调度环境而生的容器方案。—Singularity现叫 Apptainer不需要root权限的容器方案,在slurm中也能安装对比docker一句话理解它是一个能让普通用户无需 root在共享集群上安全运行“轻量级虚拟环境”容器的工具并且能直接使用 Docker 镜像还能无缝调用 GPU/DCU 等加速卡。为什么超算不用 Docker而要专门搞个 Singularity这就回到我们之前讨论的问题了核心是架构和安全理念的差异DockerSingularity/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/data4. 调用海光 DCUROCm 栈在你关心的乌镇之光、秦岭超算上调用 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 安装软件了Singularityaptupdateaptinstall-yvim# 退出后你的 vim 就保存在 my_ubuntu_sandbox 目录里了在 Slurm 作业脚本里的典型用法把容器和 Slurm 结合就是常规的批处理作业#!/bin/bash#SBATCH -J my_app#SBATCH -p dcu_queue#SBATCH -n 4#SBATCH --gresdcu: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_from333.337.search-card.all.clickvd_source7d3841cb81fdca8b20a31fa9ee5ec8ef