使用SLURM在群集上运行作业时如何保存输出

时间:2019-11-06 22:34:38

标签: r slurm

我想使用SLURM运行R脚本。我创建了R脚本“ test.R”,如下所示:

print("Running the test script")
write.csv(head(mtcars), "mtcars_data_test.csv")

我创建了一个bash脚本来运行此R脚本“ submit.sh”

#!/bin/bash

#sbatch --job-name=test.job
#sbatch --output=.out/abc.out
Rscript  /home/abc/job_sub_test/test.R

然后我在集群上提交了工作

sbatch submit.sh

我不确定我的输出保存在哪里。我查看了主目录,但没有输出文件。

修改

我还在test.R中设置了工作目录,但没什么不同。

setwd("/home/abc")
print("Running the test script")
write.csv(head(mtcars), "mtcars_data_test.csv")

当我在没有SLURM Rscript test.R的情况下运行脚本时,它运行良好,并根据设置的路径保存了输出。

2 个答案:

答案 0 :(得分:1)

Slurm会将作业工作目录设置为发出sbatch命令时的工作目录。

假设/home目录已安装在所有计算节点上,则可以使用提交脚本中的cd或R语法中的setwd()显式更改工作目录。但这不是必须的。

三种可能性:

  • 由于配置或硬件问题,作业根本没有启动;您可以使用sacct命令并查看state列来找出答案。
  • 文件确实已创建,但是在未共享的文件系统上的计算节点上;在这种情况下,最好的选择是SSH到计算节点(您可以使用sacct找到它)并在那里查找文件;或
  • 脚本崩溃了,根本没有创建文件,在这种情况下,您应该查看作业的输出文件(.out/abc.out)。请注意,.out目录必须在作业开始之前存在,并且由于它以.开头,因此它将是一个隐藏文件,仅在ls中显示{ 1}}参数。

答案 1 :(得分:0)

sbatch的--output参数相对于您提交作业的文件夹。 R脚本中的setwd不会影响它,因为Slurm已经解析了该参数并在R脚本运行时开始将输出管道传输到文件。

首先,如果希望输出到/home/abc/.out/,请确保在提交脚本时位于主目录中,或指定--output参数的完整路径。

第二,.out文件夹必须存在;我对此进行了测试,但Slurm不会创建它。