是否可以配置sbatch的默认输出文件目录?

20
有没有办法配置除当前目录以外的另一个默认目录用于sbatch生成的文件slurm-%j.out(或slurm-%A_%a.out)当未指定-o参数时?
我想要实现以下两个目标:
1. 将所有由sbatch生成的默认输出文件统一放置在一个位置; 2. 避免将这些文件混杂在当前目录中。
我曾经希望找到像SLURM_DEFAULT_OUTPUT_DIRECTORY这样的环境变量来解决这个问题,但如果有这样的变量,那么我肯定是错过了。
是否有其他机制可以实现所需的结果?
(仅供参考,与我所追求的功能类似的先例是Emacs的backup-directory-alist,它告诉Emacs在哪里放置其默认生成的备份文件。该功能更为复杂,因为它支持多个这样的目录,可根据原始文件名中的模式使用。)
4个回答

18

在Bash脚本中将日志文件传输到文件夹中,如下所示:

#SBATCH -o ./Report/output.%a.out # STDOUT

这将把输出文件放在与您的批处理脚本相邻的 "Report" 文件夹中。


1
如果不存在,这个命令会创建“Report”文件夹吗? - Farid Alijani
1
从我的测试结果来看,似乎不是这样。 - davidrpugh
不,它不会! - milihoosh
你需要先创建“报告”文件夹!!!如果你没有创建一个,输出文件将不会出现。 - jonijeng

7
下面的.sh文件将会把slurm输出文件保存到 "/home/YOUR_USER/lustre/PROJECT/output/%j.out" 这个路径下。这里的 %j 是运行中任务的 jobid,详情请参考这里。因此,在上述输出目录中,你会找到类似于399937.out这样的文件。
#!/bin/bash
#SBATCH --job-name=JOB_ID_NAME
#SBATCH --time=4-00:00          # adjust this to match the walltime of your job
#SBATCH --cpus-per-task=28      # adjust this if you are using parallel commands
#SBATCH --mem=1000              # adjust this according to the memory requirement per node you need
#SBATCH --mail-user=YOUR-EMAIL  # adjust this to match your email address
#SBATCH --mail-type=ALL
#SBATCH --output=/home/YOUR_USER/lustre/PROJECT/output/%j.out

我尝试使用-o选项,它会在当前目录中查找“/home/YOUR_USER/lustre/PROJECT/output/%j.out”,而不是转到指定的目录。 - Gooby

1
另一个选择是使用作业提交插件

您可以使用CLUA编写此类插件,以便在脚本或命令行未设置输出文件(默认基本名称但在您的情况下为自己的目录)时强制其输出。


0

我曾经遇到过同样的问题,我的解决方案是将提交脚本复制到指定用于输出的目录中。然后在输出目录中运行脚本。通过环境变量,可以动态地将预期用SLURM提交的代码目录通知作业脚本。在执行代码之前,还可以将代码目录设置为工作目录。我希望这个解决方案对某些人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接