共享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
相关产品推荐
相关产品推荐

