2

我有一个sbatch使用以下命令运行的 python 提交脚本slurm

sbatch batch.py

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

#!/usr/bin/env bash
cd path/to/scripts
python script.py

这种临时的破解方式似乎有效,尽管它似乎完全避免了这个问题,而不是解决它。有人知道如何以更好的方式解决这个问题吗?

例如,我知道在 docker 中存在-wor-WORKDIR以便 docker 容器知道它应该在哪里。我想知道是否有类似的东西存在于 slurm 中。

4

1 回答 1

3

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

但是脚本的运行方式如下:将脚本复制到 Slurm 特定目录中分配的主节点上,然后从那里运行,并$PWD设置为sbatch运行命令的目录。

你可以通过一个像这样的简单脚本看到这一点:

$ 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

结果之一是在当前目录中导入模块的 Python 脚本无法这样做。sys.path.append(os.getcwd())解决方法是在导入失败之前显式添加。

于 2017-10-13T06:59:05.650 回答