如何确保slurm中的python提交脚本位于给出sbatch命令的位置?

时间:2017-10-12 20:38:35

标签: python bash slurm sbatch

我有一个python提交脚本,我使用sbatchslurm一起运行:

sbatch batch.py

当我这样做时,事情无法正常工作,因为我认为,batch.py进程不会继承正确的环境变量。因此,它不是从batch.py命令执行的地方运行sbatch,而是从其他地方运行(我相信/)。我已经设法通过使用bash脚本包装python脚本来解决这个问题:

#!/usr/bin/env bash
cd path/to/scripts
python script.py
虽然它看起来似乎一起避免了这个问题而不是解决它,但这种临时的黑客行为看起来似乎很有效。有人知道如何以更好的方式解决这个问题吗?

我知道,例如,在docker中-w-WORKDIR存在,以便docker容器知道它假设的位置。我想知道是否有类似的东西存在于slurm。

1 个答案:

答案 0 :(得分:3)

Slurm旨在将用户的环境在提交时推送到作业,但用户或系统管理员明确禁用的变量除外。

但是脚本的运行方式如下:脚本在Slurm特定目录中的分配的主节点上复制并从那里运行,$PWD设置为{{1}的目录。 1}}命令已运行。

你可以看到像这样的简单脚本:

sbatch

一个结果是导入当前目录中的模块的Python脚本无法执行此操作。然后,解决方法是在失败的导入之前显式添加$ cat t.sh #!/bin/bash # #SBATCH --job-name=test_ms #SBATCH --output=res_ms.txt echo $PWD dirname $(readlink -f "$0") $ sbatch t.sh Submitted batch job 1109631 $ cat res_ms.txt /home/damienfrancois/ /var/spool/slurm/job1109631