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

在Niagara的Slurm调度器中用mpirun执行脚本遇权限拒绝错误求助

问题描述

在Niagara(Slurm调度器)的debug队列提交作业时遇到如下权限错误:

SALLOC: error: _fork_command: Unable to exec command "/mypath/test.sh": Permission denied

已确认test.sh具备可读权限,串行运行该脚本完全正常,但使用mpirun启动并行作业时就会触发上述错误。

提交作业用的test.sh脚本内容如下:

#!/bin/bash

#SBATCH --account= xxxx  
#SBATCH --nodes=2
#SBATCH --ntasks=160
#SBATCH --time=3:30:00
#SBATCH --job-name "sNucRNASeq"

pushd /mypath/
mpirun --np 4 R --no-save < Rscript test.R
Rscript test.R

尝试过执行chmod -rwx test.sh但没有效果,怀疑是多处理器访问文件的权限设置有遗漏,寻求解决方法。

配套的test.R脚本内容:

library(pbdMPI)

init()

rank<-comm.rank()
size<-comm.size()

myfiles<-load("ListofFiles.RData")

y <- scatter(lapply(myfiles, readRDS))
comm.print(str(y))

finalize()
解决方法
  • 修正权限操作错误:你执行的chmod -rwx test.sh是移除脚本的读写执行权限,完全搞反了!正确操作是给脚本添加可执行权限:

    chmod +x /mypath/test.sh
    

    同时要确保脚本所在的目录/mypath/对所有计算节点的用户有执行权限(目录的执行权限允许进入目录访问内部文件):

    chmod +x /mypath/
    
  • 修复Slurm脚本语法问题:你的SBATCH参数--job-name缺少等号,正确写法应为:

    #SBATCH --job-name="sNucRNASeq"
    

    语法问题可能引发Slurm处理异常,建议及时修正。

  • 调整MPI任务启动方式:在Niagara的Slurm环境中,推荐用srun替代mpirun来启动MPI任务,它能更好地和调度器集成,避免节点间的权限或资源匹配问题。同时你脚本里的R --no-save < Rscript test.R写法有误,正确的并行调用可以改成:

    srun --ntasks=4 Rscript test.R
    
  • 确认数据文件跨节点访问权限:确保ListofFiles.RData以及它引用的所有.RDS文件所在的目录,对所有计算节点的用户都有读权限——并行任务的所有进程都需要能访问这些文件。

  • 排查共享存储ACL设置(可选):如果上述方法无效,可能是共享存储的访问控制列表(ACL)限制了权限。先查看目录的ACL设置:

    getfacl /mypath/
    

    如果发现计算节点用户缺少权限,用setfacl添加(替换compute_users为集群实际的计算节点用户组):

    setfacl -m g:compute_users:rx /mypath/
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:55:17