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

Autotools+Singularity+Slurm场景:如何仅构建代码与单元测试不运行?

解决方案

一、分步骤构建测试程序与单独执行测试

你的思路方向正确,只需调整细节确保测试程序在容器内构建,Slurm的srun在主机环境执行:

  1. 配置项目(指定主机端MPI启动器)
    让MPI_LAUNCHER指向主机的srun,并通过它启动容器内的环境脚本和测试程序:

    ./configure MPI_LAUNCHER="srun --mpi=pmi2 singularity exec -B ${PWD} container.sif envscript.sh"
    
  2. 仅构建测试程序(不运行)
    Autotools中check_PROGRAMS是所有测试程序的构建目标,执行以下命令在容器内完成编译:

    singularity exec -B ${PWD} container.sif envscript.sh "make check_PROGRAMS"
    

    若项目未定义check_PROGRAMS,可改用make all构建所有目标(包含测试程序),或用make check -k --just-print预览命令后提取编译测试的部分单独执行。

  3. 单独执行测试
    直接运行make check,此时MPI_LAUNCHER会调用主机的srun启动容器内的测试,避免srun在容器内执行导致的挂起:

    make check
    

二、mpirun转srun的参数位置问题

mpirun -n test_cores ./test.sh替换为srun时,资源参数(如-n)需放在命令最前端,再指定容器执行命令和测试脚本:

直接运行测试脚本的正确写法:

srun --mpi=pmi2 -n test_cores singularity exec -B ${PWD} container.sif envscript.sh ./test.sh

若测试脚本内部包含MPI程序启动逻辑,建议将脚本内的mpirun替换为srun --mpi=pmi2,并确保资源参数(如-n)放在srun之后、目标程序之前。

如果测试框架通过make check自动传递核心数,可在configure时同步设置相关变量:

./configure MPI_LAUNCHER="srun --mpi=pmi2 singularity exec -B ${PWD} container.sif envscript.sh" TEST_CORES=4

随后在测试脚本中用$TEST_CORES变量对应srun -n $TEST_CORES。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:05:52