pyiron - 在远程集群上执行 pyiron 包装器之前设置环境变量
问题描述
我在 ~/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 作业文件中设置环境当然是可行的,但是看起来很不方便,因为每当我想用稍微不同的环境运行计算时,我都需要在 ~/pyiron/resources/queues/ 下创建一个新的作业文件。理想情况下,我希望能够直接在 Jupyter notebook 中调整环境。可以通过 Jupyter 配置的上述作业中的 {{environment}} 块之类的东西似乎是一个不错的解决方案。据我所知,对于当前版本的 pyiron 和 pysqa,这是不可能的。是否有类似的解决方案可用?
作为替代方案,我还可以想象将上述作业文件存储在 Jupyter 笔记本附近。这也将减轻我的同事的可重复性。是否有一个选项可以定义一个特定的文件用作jobile的jinja2-template?
在运行 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 中定义环境。
推荐阅读
- c# - 为私有字段创建反射吸气剂的问题
- javascript - 未捕获的 TypeError:querySelector 不是函数
- python-3.x - 尝试使用预训练模型预测类别时出现 UnknownError
- excel - VBA 过滤器宏未产生预期结果
- android - 了解“存储库”标签
- javascript - 如何将此 jQuery 代码转换为 ReactJS 代码(React、jQuery、HTML、CSS)
- r - 并行内循环,顺序外循环:我可以让 mcfork 更快或以某种方式保持会话吗?
- swiftui - 如何使用 GeometryReader 实现类似表格的布局?
- java - Apache StrTokenizer 如何在字符串文字中转义引号和逗号
- python - 如何评估一组 lambda 函数