Singularity¶
警告
该文档学习需要一定的计算机基础知识,建议先学习 WSL 、docker 部分知识,建议亲自上手尝试一下
Singularity 不支持在 Windows 上直接运行。需要在Linux环境下使用
这个软件学习推荐指数:★★★★☆
Singularity 能够运行大部分docker 镜像,但是还是建议从最通用的 linux环境(ubuntu&redhat)下构建镜像
简介¶
Singularity 是一个开源的容器化平台,专为高性能计算 (HPC) 环境设计。它允许用户创建、运行和共享包含完整软件环境的容器,特别适合在集群环境中使用。与 Docker 不同,Singularity 强调安全性和兼容性,非常适合在共享计算资源上运行。
通过源码安装Singularity¶
警告
接下来的操作,均在WSL环境下运行,请提前配置好相关的软件环境。
安装依赖¶
sudo apt install -y
build-essential \
libssl-dev \
uuid-dev \
libgpgme11-dev \
squashfs-tools \
libseccomp-dev \
wget \
pkg-config \
git \
cryptsetup
安装 Go¶
Singularity 需要 Go 语言环境。以下是安装 Go 的步骤:
# 切换到 root 用户
sudo -s
# 下载 Go
wget https://golang.org/dl/go1.19.5.linux-amd64.tar.gz
# 解压并安装
sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
# 设置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc
# 验证安装
go version
安装 Singularity¶
# 克隆 apptainer 仓库
git clone https://github.com/apptainer/apptainer.git
cd apptainer
# 编译并安装
./mconfig
cd builddir
make
sudo make install
# 验证安装
singularity --version
构建 Singularity 镜像¶
创建 Singularity 定义文件¶
Singularity 镜像是通过定义文件(.def)构建的。以下是一个简单的 Ubuntu 基础镜像定义文件示例:
# 创建定义文件目录
mkdir -p ~/singularity_defs
cd ~/singularity_defs
# 创建定义文件
cat > ubuntu.def << EOF
Bootstrap: docker
From: ubuntu:22.04
%post
apt-get update && apt-get install -y \
build-essential \
git \
python3 \
python3-pip \
# 安装 Python 包示例
pip3 install numpy pandas matplotlib
%runscript
echo "Hello from Singularity container!"
exec "$@"
EOF
构建镜像¶
# 使用 sudo 构建镜像
sudo singularity build ubuntu.sif ubuntu.def
# 或者使用 fakeroot(推荐)
sudo singularity build --fakeroot ubuntu.sif ubuntu.def
沙盒模式构建镜像¶
沙盒模式允许你创建一个可读写的目录作为镜像,便于开发和测试:
# 切换root用户
sudo -s
# 使用沙盒模式构建镜像,从 Docker Hub 拉取 Ubuntu 22.04 镜像
singularity build --sandbox ubuntu_sandbox docker://ubuntu:22.04
# 在沙盒模式下进入镜像(可读写)
singularity shell --writable ubuntu_sandbox
# 或者使用 fakeroot (普通用户下)
singularity shell --fakeroot --writable ubuntu_sandbox
# 在沙盒中进行修改后,可将其转换为只读镜像
sudo singularity build --fakeroot ubuntu.sif ubuntu_sandbox
.def 文件与沙盒模式的区别¶
文件类型与结构:
.def文件:文本文件,定义了镜像的构建过程,包括基础镜像、安装的软件和运行脚本等。沙盒模式:创建一个实际的目录结构,包含完整的文件系统。
读写权限:
通过
.def文件构建的镜像:默认是只读的(.sif 文件),无法直接修改。沙盒模式:创建的是可读写目录,可以直接修改其中的内容。
使用场景:
.def文件:适合生产环境,确保镜像的一致性和不可变性。沙盒模式:适合开发和测试阶段,可以快速修改和测试镜像内容。
转换关系:
.def文件可以用来构建沙盒镜像。沙盒镜像可以转换为只读的 .sif 镜像。
验证镜像¶
# 运行镜像
singularity run ubuntu.sif
# 进入镜像交互式环境
singularity shell ubuntu.sif
# 执行镜像中的命令
singularity exec ubuntu.sif python3 -c "import numpy; print(numpy.__version__)"
将镜像上传到集群并使用¶
上传镜像到集群¶
可以使用 SCP 命令将本地构建的 Singularity 镜像上传到集群:
备注
需要设置一些Linux的环境信息,以便后续的调试,参考 : 推荐环境设置(进阶)
# 上传到集群1
scp ubuntu.sif <集群账号>@login01:~
# 上传到集群2
scp ubuntu.sif <集群账号>@admin:~
在集群上使用 Singularity 镜像¶
在集群上运行 Singularity 容器:
# 激活 Singularity 模块(选择对应命令运行)
module load apps/singularity # 集群1
module load singularity # 集群2
# 运行镜像
singularity run ubuntu.sif
# 进入交互式环境
singularity shell ubuntu.sif
# 执行命令
singularity exec ubuntu.sif python3 -c "print('Hello from cluster!')"
参考资料¶
Contributor:rkwu