在群集服务器上以Slurm提交R作业,并将对象保存在与Slurm工作目录不同的目录中

我正在群集服务器上提交一个R作业,该作业似乎可以正常运行,只要将结果保存在脚本文件所在的相同工作目录中即可。实际上,我想将R的结果(通过saveRDS())保存到另一个目录(例如/var/tmp/results)中,但是我认为Slurm正在将我的bash脚本输出重定向到其工作目录,从而导致No such file or directory R错误。

我环顾四周,但无法找到一种方法为作业结果输出指定其他路径。也许由于我的语言限制,我使用了错误的按键,因为我不是母语为英语的人,因此在道歉之前,我很抱歉。

我将在下面添加我正在调用的脚本,即my_script.sh

#!/bin/bash
#SBATCH --ntasks=1
#SBATCH --array=1-2
#SBATCH --mem-per-cpu=15000                  
#SBATCH -e hostname_%j.err               
#SBATCH -o hostname_%j.out

module load R

FILES=($HOME/simulation_study_bnp/models/*.R)
FILE=${FILES[$SLURM_TASK_ARRAY_ID]}

echo ${FILE}

srun Rscript runmodel.R ${FILES[$SLURM_ARRAY_TASK_ID]}

R脚本runmodelmodels文件夹中的每个文件提供代码,加载一些数据并进行一些分析。所有必需的文件都位于$HOME/simulation_study_bnp/models/中,其中$HOME是我在服务器上的主目录(例如/ users / my_dir)。

R脚本runmodel.R应保存部分结果,但应保存在其他路径中,例如/var/tmp/results/之外的$HOME。当我运行类似Rscript runmodel.R models/filename.R的东西时,一切正常。经过一番试验,我的意见是 my_script.sh通过sbatch的过程在我的/var/tmp/results/下寻找$HOME,而不是考虑绝对路径,但是我不知道如何解决这个问题。

wuwenqian1986 回答:在群集服务器上以Slurm提交R作业,并将对象保存在与Slurm工作目录不同的目录中

正如@ carles-fenoy所指出的那样,您必须确保所有计算节点都必须可以访问作业写入的任何目录。通常,大型集群确实具有一个专用存储空间,所有节点都可以访问该存储空间(例如,参见USC的scratch dir)。请您的集群IT经理查看集群中的内容。

我要提到的另一件事是,您值得检查符号链接。您可以在主目录中有一个符号链接,该符号链接指向位于节点上具有更多空间的另一个文件夹。我对我的R包这样做,如here所示。这样,我不必担心空间不足!

本文链接:https://www.f2er.com/3147152.html

大家都在问