You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

共享GitLab Runner上运行Singularity遇阻,求解决方案

在共享GitLab Runner上实现OpenMPI并行测试的解决方案

一、解决Singularity容器执行失败的问题

你遇到的FATAL: while extracting image错误,核心是无特权环境下的沙箱转换权限冲突,加上CI脚本的命令执行逻辑有误。以下是具体修复步骤:

1. 修正CI脚本的命令执行方式

singularity shell是交互式命令,在CI非交互式环境下,后续命令不会在容器内执行。必须改用singularity exec直接运行容器内的命令:

test_singularity:
  stage: test-singularity
  before_script:
    - echo "Running test inside Singularity container"
    - mkdir -p $CI_PROJECT_DIR/tmp  # 创建自定义临时目录,避免主机tmp权限问题
  image:    
    name: quay.io/singularity/singularity:v3.11.4  # 升级到稳定版修复已知bug
    entrypoint: [""]
  script: 
    - echo "${SINGULARITY_TOKEN}" | singularity remote login
    - singularity pull image.sif library://...
    # 用命令行参数替代修改配置文件,更可靠
    - singularity exec --userns --setuid no --tmpdir $CI_PROJECT_DIR/tmp image.sif bash -c "
        echo 'Inside Singularity container';
        # 这里添加你的OpenMPI测试命令,比如:
        mpirun -np 2 your-parallel-test-program
      "

2. 关键参数说明

  • --tmpdir $CI_PROJECT_DIR/tmp:指定项目目录下的临时文件夹,避免主机系统tmp目录的权限限制。
  • --setuid no:直接禁用setuid,无需修改配置文件,在无特权环境下更安全。
  • --userns:启用用户命名空间隔离,减少权限依赖。

3. 排查镜像本身问题

如果仍报错,尝试拉取官方MPI镜像测试,排除自定义镜像的格式问题:

singularity pull test-openmpi.sif library://sylabs/examples/openmpi
singularity exec --userns --tmpdir $CI_PROJECT_DIR/tmp test-openmpi.sif mpirun -np 2 hostname

二、替代方案:无需Singularity/无特权Docker的并行测试

1. 使用Podman容器

Podman在无特权环境下兼容性优于Docker,无需后台daemon,直接运行MPI容器:

test_podman:
  stage: test-mpi
  image: quay.io/podman/stable
  script:
    - podman pull docker.io/library/openmpi:latest
    - podman run --userns=keep-id openmpi:latest mpirun -np 2 hostname

2. 直接在Runner主机安装OpenMPI

如果共享Runner允许安装系统依赖,可跳过容器直接部署:

test_native_mpi:
  stage: test-mpi
  before_script:
    - apt-get update && apt-get install -y openmpi-bin libopenmpi-dev
    # 或用yum:yum install -y openmpi openmpi-devel
  script:
    - mpicc -o your-test your-test.c
    - mpirun -np 2 ./your-test

3. GitLab CI并行多节点测试

如果需要多节点并行,可利用GitLab CI的parallel关键字启动多个Runner实例,结合MPI的分布式模式(需Runner之间网络互通):

test_parallel_mpi:
  stage: test-mpi
  parallel: 2
  script:
    - apt-get install -y openmpi-bin
    # 这里需要配置MPI节点发现逻辑,比如用CI_JOB_INDEX标识节点
    - mpirun --hostfile $CI_PROJECT_DIR/hostfile -np 2 ./your-test

内容的提问来源于stack exchange,提问作者lchaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:01:30