我有一个运行的 python 提交脚本sbatch
using slurm
:
sbatch batch.py
当我这样做时,事情无法正常工作,因为我认为,batch.py
进程没有继承正确的环境变量。因此,而不是运行batch.py
从哪里sbatch
命令已完成,它从其他地方运行(/
我相信)。我已经通过使用 bash 脚本包装 python 脚本来解决这个问题:
#!/usr/bin/env bash
cd path/to/scripts
python script.py
这种临时黑客似乎有效,尽管它似乎完全回避了这个问题,而不是解决它。有人知道如何以更好的方式解决这个问题吗?
例如,我知道在 docker 中-w
or -WORKDIR
存在以便 docker 容器知道它应该在哪里。我想知道是否有类似的东西存在于泥浆中。
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())
在导入失败之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)