在SLURM中使用sbatch命令时如何导入本地python模块

我使用的是集群管理器slurm,并且正在运行带有sbatch(带有python插入器)的提交脚本. sbatch提交导入了我的一个名为main_nn.py的模块.该模块与我的提交目录位于同一位置,但是,即使文件存在,python也无法找到它.我很难弄清楚为什么会这样.我的python文件如下所示:

#!/usr/bin/env python
#SBATCH --job-name=Python

print('hi')

import main_nn

但是我的Slurm转储文件的输出是:

hi
Traceback (most recent call last):
    File "/home/slurm/slurmd/job3223398/slurm_script", line6, in <module>
        import main_nn
ImportError: No module named main_nn

我尝试检查模块main_nn是否在当前目录中,并且确实存在.因此,对我来说可疑的第一件事是slurm文件中的错误表明我的脚本的位置位于“ / home / slurm / slurmd / job3223398 / slurm_script”,而不是path_to_project.因此,我继续增加了一行

os.system('pwd')

看看我的脚本是从哪里执行的,令我惊讶的是它是在path_to_project而不是在“ / home / slurm / slurmd / job3223398 / slurm_script”处执行的,这必须意味着sbatch正在执行某些操作,以在一个位置执行脚本,但是它认为它是另一个.如果是这种情况,我应该如何在python中与模块的提交脚本位于同一位置的位置进行导入?我是否*将其放在软件包中并欺骗python以使其在软件包/库中?

解决方法:

当Slurm将提交脚本复制到计算节点上的特定位置以运行它时,您的Python脚本将找不到提交目录中的模块.

但是Slurm正确设置了当前工作目录,因此您可以使用类似以下内容的方法将其显式添加到python路径:

sys.path.append(os.getcwd()) 

在脚本开头附近.

上一篇:Python等Slurm工作?


下一篇:linux – slurmstepd的可能影响:错误:在某些时候超出了步骤内存限制?