singularity基本用法


build / pull

基于 docker image 创建 singularity image:

singularity -d build /home/tom/singularity-images/tf-2.1.simg \
    docker://tensorflow/tensorflow:2.1.0-gpu-py3

对应 docker 之 docker pull tensorflow/tensorflow:2.1.0-gpu-py3,其中:

  • 第一个参数是拉下来的 image 的保存路径、名字,按需自改。
  • docker:// 之后就是要拉的 image 名。
  • 可以基于本地的 docker 仓库 build,见 [1]。

拉完就可以在 /home/tom/singularity-images/ 下看到 tf-2.1.simg。

build from recipes

类似 docker 用 Dockerfile 创建镜像,singularity 的创建文件称 recipe 写法参考 [3],build 方法参考 [4]。[5] 有 recipe 示例

  • # 注释;
  • Bootstrap 写 docker,From 就可以用 docker hub 上的 docker 镜像,详见 [3];
  • %labels 写 meta data,格式:<key> <value>
  • %post 是创建时的命令,类似 dockerfile 的 RUN
Bootstrap: docker
From: pytorch/pytorch:1.2-cuda10.0-cudnn7-runtime

%labels

Python 3.6.9
CUDA 10.0
cuDNN 7
PyTorch 1.2.0
torchvision 0.4.0

%post

# required by UTS iHPC
export DEBIAN_FRONTEND=noninteractive
mkdir -p /data /projects /scratch

# python packages
pip install --upgrade pip setuptools wheel
pip install --no-cache-dir \
    "scikit-learn>=0.23.2" "munkres>=1.1.4" "opencv-python==4.3.0.38" "numpy>=1.19.1" \
    click Cython easydict fire graphviz h5py matplotlib \
    ninja pandas PyYAML scipy tensorboard xlwt

可考虑用 nvidia 优化过的 docker image 为基础 build,见 [6]。

instance start / run

启动容器:

export SINGULARITY_TMPDIR=/home/tom/tmp
export TMPDIR=/home/tom/tmp

singularity instance start --nv \
	# --fakeroot \
    -B /home/tom:/home/tom,/home/tom/dataset:/home/dataset \
    /home/tom/singularity-images/tf-2.1.simg \
    tf-2

类似 docker 之 docker run,其中:

  • 这一步在计算结点执行。

  • --nv 启用 gpu 支持,类似 docker 之 --gpus all

  • --fakeroot 确保容器内有权限(其实目前不加好像也完全可以)

    • 加了这个参数,会产生 rootfs-* 目录,见下一条。
  • 两行 export 更改 Temporary Folders,防止 /tmp 被撑爆。

    • /tmp 可能磁盘容量少,就需要改去一个容量大的位置。
    • --fakeroot 会在这个指定的 tmp dir 下生成形如 rootfs-* 的目录,stop 容器之后还在,要手动删。
  • -B <宿主路径>:<容器内路径> 挂载目录,类似 docker 之 -v。多个挂载点用逗号 , 分隔。

  • tf-2 是容器名(instance name),自己随便取,连接容器时要用。

instance list / ps

singularity instance list

可以看到已启动的容器,类似 docker 之 docker ps

shell / exec

进容器:

singularity shell instance://tf-2

类似 docker 之 docker exectf-2 就是 start 创建时指定的 instance name。

exit

退出容器,在容器内:

exit

退出之后可以重连。

instance stop / stop + rm

关闭(并删除)容器:

singularity instance stop tf-2

关了好像就!没!了!像 docker stop,用 docker ps -a 还可以看到、可以重新 start。更像是 docker stop + docker rm

所以没事别 stop,exit 就好。而如果加了 --fakeroot 记得 stop 之后删掉产生的 rootfs-* 目录。

References

  1. 从本地docker image构建singularity image
  2. Singularity入门之运行容器
  3. Container Recipes
  4. Build a Container
  5. 用UTS gpu集群
  6. NGC/Catalog/Containers/TensorFlowNGC/Catalog/Containers/Pytorch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值