在远程集群上执行 pyiron 包装器之前设置环境变量

Setting environment variables before the execution of the pyiron wrapper on remote cluster

我在 ~/pyiron/resources/queues/ 中使用 SLURM 的作业文件,大致如下所示:

#!/bin/bash
#SBATCH --output=time.out
#SBATCH --job-name={{job_name}}
#SBATCH --workdir={{working_directory}}
#SBATCH --get-user-env=L
#SBATCH --partition=cpu

module load some_python_module
export PYTHONPATH=path/to/lib:$PYTHONPATH

echo {{command}}

如您所见,我需要在调用“python -m pyiron.base.job.wrappercmd ...”之前加载一个模块以访问正确的 python 版本,我也想设置 PYTHONPATH 变量。

直接在 SLURM jobfile 中设置环境当然可以,但是看起来很不方便,因为我需要在 ~/pyiron/resources/queues/ 下创建一个新的 jobfile 每当我想 运行 计算时稍微不同的环境。理想情况下,我希望能够直接在 Jupyter Notebook 中调整环境。上面 jobile 中的 {{environment}} 块之类的东西,可以通过 Jupyter 配置,似乎是一个不错的解决方案。 据我所知,这对于当前版本的 pyiron 和 pysqa 是不可能的。有没有类似的解决方案?

作为替代方案,我还可以想象将上述作业文件存储在靠近 Jupyter 笔记本的地方。这也将减轻我同事的可重复性。是否有一个选项可以定义一个特定的文件用作 jobile 的 jinja2 模板?

我可以在 运行 执行 pyiron 作业之前通过 Jupyter 在 ~/pyiron/resources/queues/ 下编写一个临时作业文件来实现我的预期设置,但这感觉像是一个很老套的解决方案。

非常感谢,

弗洛里安

更详细地解释示例:

我创建了一个名为:reading.ipynb 的笔记本,内容如下:

import subprocess
subprocess.check_output("echo ${My_SPECIAL_VAR}", shell=True)

这里读取环境变量My_SPECIAL_VAR

我现在可以使用第二个 jupyter notebook 提交此作业:

import os
os.environ["My_SPECIAL_VAR"] = "SoSpecial"
from pyiron import Project
pr = Project("envjob")
job = pr.create_job(pr.job_type.ScriptJob, "script")
job.script_path = "readenv.ipynb"
job.server.queue = "cm"
job.run()

在这种情况下,我首先设置环境变量,然后提交脚本作业,脚本作业能够读取相应的环境变量,因为它是使用 --get-user-env=L 选项转发的。因此,您应该能够在用于提交计算的 jupyter notebook 中定义环境。