首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在远程集群上执行pyiron包装器之前设置环境变量

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

Stack Overflow用户
提问于 2020-10-20 15:42:56
回答 1查看 102关注 0票数 1

我在~/pyiron/resources/queue/中为SLURM使用了一个jobfile,大致如下:

代码语言:javascript
复制
#!/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笔记本中调整环境。类似上述jobile中的{{environment}}块,可以通过Jupyter进行配置,似乎是一个很好的解决方案。据我所知,这在当前版本的pyiron和pysqa中是不可能的。有没有类似的解决方案?

作为另一种选择,我也可以想象将上面的作业文件存储在Jupyter笔记本电脑附近。这也将使我的同事更容易重现。有没有一个选项可以定义一个特定的文件,作为jobile的jinja2模板?

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

非常感谢,

弗洛里安

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 18:30:07

为了更详细地解释这个示例:

我创建了一个名为:reading.ipynb的notebook,包含以下内容:

代码语言:javascript
复制
import subprocess
subprocess.check_output("echo ${My_SPECIAL_VAR}", shell=True)

这将读取环境变量My_SPECIAL_VAR

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

代码语言:javascript
复制
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笔记本中定义环境。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64440651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档