我有一个python提交脚本,我使用sbatch
与slurm
一起运行:
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。
答案 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
。