如何在没有 sudo 权限的情况下 运行 HPC 上的 Popper
How to run Popper on HPC without sudo rights
我想执行 Popper workflow on a Linux HPC (High-performance computing) cluster. I don’t have admin/sudo rights. I know that I should use Singularity instead of Docker 因为 Singularity 被设计为不需要 sudo
到 运行.
但是,singularity build
needs sudo
privileges, if not executed in fakeroot/rootless模式。
这是我在 HPC 登录节点中所做的:
- 我安装了 Spack (0.15.4) 和 Singularity (3.6.1):
git clone --depth=1 https://github.com/spack/spack.git
. spack/share/spack/setup-env.sh
spack install singularity
spack load singularity
- 我在虚拟环境中安装了 Popper (2.7.0):
python3 -m venv ~/popper
~/popper/bin/pip install popper
- 我在
~/test/wf.yml
中创建了一个示例工作流程:
steps:
- uses: "docker://alpine:3.11"
args: ["echo", "Hello world!"]
- uses: "./my_image/"
args: ["Hello number two!"]
与~/test/my_image/Dockerfile
:
FROM alpine:3.11
ENTRYPOINT ["echo"]
- 我尝试运行登录节点中Popper工作流的两个步骤:
$ cd ~/test
$ ~/popper/bin/popper run --engine singularity --file wf.yml 1
[1] singularity pull popper_1_4093d631.sif docker://alpine:3.11
[1] singularity run popper_1_4093d631.sif ['echo', 'Hello world!']
ERROR : Failed to create user namespace: user namespace disabled
ERROR: Step '1' failed ('1') !
$ ~/popper/bin/popper run --engine singularity --file wf.yml 2
[2] singularity build popper_2_4093d631.sif /home/bikfh/traylor/test/./my_image/
[sudo] password for traylor:
所以这两个步骤都失败了。
我的问题:
- 对于来自 Docker Hub 的图像:如何启用“用户命名空间”?
- 对于自定义映像:如何在没有
sudo
和 运行 容器的情况下构建映像?
For an image from Docker Hub: How do I enable “user namespace”?
我发现需要在主机上启用用户命名空间功能。 Here是检查是否启用的说明。
对于我使用的集群计算机 (Frankfurt Goethe HLR),用户名称空间仅在计算节点中启用,未在登录节点中启用。
这就是为什么它对我不起作用。
所以我需要使用 SLURM 发送作业(这里只是第一步,使用来自 Docker Hub 的容器):
~/popper/bin/popper run --engine singularity --file wf.yml --config popper_config.yml 1
popper_config.yml
定义 options for SLURM’s sbatch
(compare the Popper docs)。它们取决于您的集群计算机。就我而言,它看起来像这样:
resource_manager:
name: slurm
options:
"1": # The default step ID is a number and needs quotes here.
nodes: 1
mem-per-cpu: 10 # MB
ntasks: 1
partition: test
time: "00:01:00"
For a custom image: How do I build an image without sudo and run the container?
尝试将相同的过程应用于具有自定义 Dockerfile
的步骤 2,失败并显示此消息:
FATAL: could not use fakeroot: no mapping entry found in /etc/subuid
我尝试在另一台计算机上使用 Popper 创建 .sif
文件(奇点图像)并将其从 ~/.cache/popper/singularity/...
复制到集群计算机。
不幸的是,Popper 似乎清除了缓存文件夹,因此 .sif
图像不会保留。
我想执行 Popper workflow on a Linux HPC (High-performance computing) cluster. I don’t have admin/sudo rights. I know that I should use Singularity instead of Docker 因为 Singularity 被设计为不需要 sudo
到 运行.
但是,singularity build
needs sudo
privileges, if not executed in fakeroot/rootless模式。
这是我在 HPC 登录节点中所做的:
- 我安装了 Spack (0.15.4) 和 Singularity (3.6.1):
git clone --depth=1 https://github.com/spack/spack.git
. spack/share/spack/setup-env.sh
spack install singularity
spack load singularity
- 我在虚拟环境中安装了 Popper (2.7.0):
python3 -m venv ~/popper
~/popper/bin/pip install popper
- 我在
~/test/wf.yml
中创建了一个示例工作流程:
steps:
- uses: "docker://alpine:3.11"
args: ["echo", "Hello world!"]
- uses: "./my_image/"
args: ["Hello number two!"]
与~/test/my_image/Dockerfile
:
FROM alpine:3.11
ENTRYPOINT ["echo"]
- 我尝试运行登录节点中Popper工作流的两个步骤:
$ cd ~/test
$ ~/popper/bin/popper run --engine singularity --file wf.yml 1
[1] singularity pull popper_1_4093d631.sif docker://alpine:3.11
[1] singularity run popper_1_4093d631.sif ['echo', 'Hello world!']
ERROR : Failed to create user namespace: user namespace disabled
ERROR: Step '1' failed ('1') !
$ ~/popper/bin/popper run --engine singularity --file wf.yml 2
[2] singularity build popper_2_4093d631.sif /home/bikfh/traylor/test/./my_image/
[sudo] password for traylor:
所以这两个步骤都失败了。
我的问题:
- 对于来自 Docker Hub 的图像:如何启用“用户命名空间”?
- 对于自定义映像:如何在没有
sudo
和 运行 容器的情况下构建映像?
For an image from Docker Hub: How do I enable “user namespace”?
我发现需要在主机上启用用户命名空间功能。 Here是检查是否启用的说明。
对于我使用的集群计算机 (Frankfurt Goethe HLR),用户名称空间仅在计算节点中启用,未在登录节点中启用。 这就是为什么它对我不起作用。
所以我需要使用 SLURM 发送作业(这里只是第一步,使用来自 Docker Hub 的容器):
~/popper/bin/popper run --engine singularity --file wf.yml --config popper_config.yml 1
popper_config.yml
定义 options for SLURM’s sbatch
(compare the Popper docs)。它们取决于您的集群计算机。就我而言,它看起来像这样:
resource_manager:
name: slurm
options:
"1": # The default step ID is a number and needs quotes here.
nodes: 1
mem-per-cpu: 10 # MB
ntasks: 1
partition: test
time: "00:01:00"
For a custom image: How do I build an image without sudo and run the container?
尝试将相同的过程应用于具有自定义 Dockerfile
的步骤 2,失败并显示此消息:
FATAL: could not use fakeroot: no mapping entry found in /etc/subuid
我尝试在另一台计算机上使用 Popper 创建 .sif
文件(奇点图像)并将其从 ~/.cache/popper/singularity/...
复制到集群计算机。
不幸的是,Popper 似乎清除了缓存文件夹,因此 .sif
图像不会保留。