通过Slurm REST API提交OpenMPI作业失败,sbatch提交可正常运行
问题原因
- 报错信息中
auth_g_unpack: remote plugin_id 101 not found的plugin_id 101对应Slurm的auth/munge身份认证插件,报错本质是多节点运行srun时,不同节点的Slurm进程无法完成身份校验,核心诱因是作业运行环境缺少必要的Slurm认证相关环境变量。 - sbatch提交和REST API提交存在关键配置差异:本地sbatch提交时使用了
#SBATCH --export=ALL参数,会将当前会话所有环境变量(包括Slurm认证、MUNGE相关变量)全部传递到作业运行环境;但REST API提交的请求体中没有配置环境变量传递规则,仅靠get_user_environment=1只能拉取用户默认shell环境,不会包含Slurm API会话的认证相关变量。 - 部分集群采用模块方式管理Slurm、MPI依赖,作业脚本未显式加载对应模块时,可能出现srun调用版本和集群默认版本不匹配,进而触发认证插件不识别的问题。
解决方案
- 在REST API的
job配置字段中新增environment参数,显式开启环境变量全量传递,v0.0.37版本的配置示例为添加"environment": ["SLURM_EXPORT_ENV=ALL"]。 - 补充作业脚本的依赖初始化逻辑,在执行srun前先加载集群对应的Slurm、PMI2、MPI模块,避免运行环境二进制版本不匹配,示例脚本如下:
#!/bin/bash # 模块名根据集群实际配置调整 module load slurm pmi2 openmpi srun --mpi=pmi2 -n 3 hostname - 调整后的完整POST请求体参考如下:
{ "job": { "name":"demo", "partition":"compute", "standard_output":"%j.out", "standard_error":"%j.err", "nodes":3, "tasks":3, "tasks_per_node":1, "get_user_environment":1, "current_working_directory":"/SHARED_NFS_STORAGE", "environment": ["SLURM_EXPORT_ENV=ALL"] }, "script":"#!/bin/bash\nmodule load slurm pmi2 openmpi\nsrun --mpi=pmi2 -n 3 hostname" } - 若上述配置仍无法解决问题,可检查slurmrestd服务的
AuthType配置,确认其与所有计算节点的AuthType一致(均为auth/munge),同时验证所有节点的munge key完全相同、权限配置正确(权限为600,属主为munge用户)。 - 可先通过REST API提交单节点
srun hostname作业验证基础运行环境正常后,再排查多节点MPI场景的问题,缩小故障范围。
内容的提问来源于stack exchange,提问作者lazada
相关产品推荐
相关产品推荐

