我在~/pyiron/resources/queue/中为SLURM使用了一个jobfile,大致如下:
#!/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下编写一个临时作业文件来实现我想要的设置,但这感觉像是一个相当老套的解决方案。
非常感谢,
弗洛里安
发布于 2020-10-20 18:30:07
为了更详细地解释这个示例:
我创建了一个名为:reading.ipynb的notebook,包含以下内容:
import subprocess
subprocess.check_output("echo ${My_SPECIAL_VAR}", shell=True)这将读取环境变量My_SPECIAL_VAR。
我现在可以使用第二个jupyter笔记本提交此作业:
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笔记本中定义环境。
https://stackoverflow.com/questions/64440651
复制相似问题