批量生成slurm作业。
项目描述
slurmjobs
自动化Slurm作业生成。
在参数网格上生成一系列.sbatch
文件以供搜索。创建一个运行脚本,该脚本将一次性提交所有生成的作业。
您还可以使用ShellBatch
,它排除了slurm/module引用,因此您可以在本地机器或测试服务器上测试和运行。
注意:由于NYU切换到Greene,现在使用singularity,因此关于加载模块的先前工作流程不再必要。因此,我可能需要进行实验并更改执行方式以适应新工作流程。如果您想保持旧设置,请设置为
<=0.1.2
。(抱歉我本应该直接将版本号提升到0.2
)。
安装
pip install slurmjobs
用法
import os
import slurmjobs
jobs = slurmjobs.Singularity(
'python train.py',
'overlay-5GB-200K.ext3',
'cuda11.0-cudnn8-devel-ubuntu18.04.sif',
email=f'{os.getenv("USER")}@nyu.edu',
template='''{% extends 'job.singularity.j2' %}
{% block main %}
echo "hi! I'm running right before the main command!"
echo "you can do initialization stuff here. but no pressure. it's completely optional."
{{ super() }}
echo "hi! I'm running right after the main command!"
{% endblock %}
''')
# generate jobs across parameter grid
run_script, job_paths = jobs.generate([
('model', ['AVE', 'AVOL']),
('audio_channels', [1, 2]),
], epochs=500)
slurmjobs.util.summary(run_script, job_paths)
输出
Generated 12 job scripts:
jobs/train/train,kernel_size-2,lr-0.0001,nb_stacks-1.sbatch
jobs/train/train,kernel_size-2,lr-0.001,nb_stacks-1.sbatch
jobs/train/train,kernel_size-2,lr-0.0001,nb_stacks-2.sbatch
jobs/train/train,kernel_size-2,lr-0.001,nb_stacks-2.sbatch
jobs/train/train,kernel_size-3,lr-0.0001,nb_stacks-1.sbatch
jobs/train/train,kernel_size-3,lr-0.001,nb_stacks-1.sbatch
jobs/train/train,kernel_size-3,lr-0.0001,nb_stacks-2.sbatch
jobs/train/train,kernel_size-3,lr-0.001,nb_stacks-2.sbatch
jobs/train/train,kernel_size-5,lr-0.0001,nb_stacks-1.sbatch
jobs/train/train,kernel_size-5,lr-0.001,nb_stacks-1.sbatch
jobs/train/train,kernel_size-5,lr-0.0001,nb_stacks-2.sbatch
jobs/train/train,kernel_size-5,lr-0.001,nb_stacks-2.sbatch
To submit all jobs, run:
. jobs/train/run_train.sh
注意事项和警告
基本上,我构建这个包是为了解决我自己的用例
- 在NYU HPC环境中使用python进行机器学习(使用anaconda,tensorflow-gpu)。
以前,我设置了一系列默认值 - n_gpus=1
,modules=['cuda...']
等。最近,我已使默认行为尽可能少做假设。
因此,如果您没有指定conda_env
,则不会加载anaconda。如果您没有指定任何模块(没有conda_env
),则可以在没有module load
的系统上操作。
我已添加模块别名(因为我永远也记不住1.与我的tf版本兼容的确切cuda版本,2.在HPC上可用,3.兼容)。因此,指定模块简称将加载正确的模块。(我尚未在所有tf版本之间全面测试这些。如果有问题,请告知。tf+cuda的运行总是一个噩梦。)
cuda9
=> [cudnn/9.0v7.3.0.29
,cuda/9.0.176
] (tf 1.12)cuda10
=> [cuda/10.0.130
,cudnn/10.0v7.4.2.24
] (tf 1.13, 1.14, 2.0)cuda10.1
=>cuda/10.1.105
,cudnn/10.1v7.6.5.32
]
有关TensorFlow版本匹配的更多信息:https://tensorflowcn.cn/install/source#tested_build_configurations
如果您有不同的项目要求或有关如何更好地泛化的建议,请提交问题/拉取请求!我在这些系统上经验有限,所以我对不同的环境配置不太熟悉。
我设计这个系统尽可能地可定制和可扩展,希望它对您自己的用例很容易使用。请参阅自定义行为以获取提示。
待办事项
- 允许用户将运行脚本拆分成块
- 实现不同的默认配置文件?基本、GPU等。
- 添加带有作业ID跟踪的运行/停止命令 - 更简单的方法?sbatch组?
- 更改运行脚本:
sbatch --parseable asdf.sbatch >> run_id.sh
- run():
os.system('. {}'.format(self.paths.run))
- stop():
for l in open('run_ids.sh'): os.system('scancel {}'.format(l))
- stop_user():
os.system('scancel -u')
- 列出作业,获取状态/持续时间
- 更改运行脚本:
- 是否有任何singularity助手?
项目详情
slurmjobs-1.1.3.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | a6e17573723fe417ebbe14acab9d72649803290e35d5300ad05e5bec57a0dec9 |
|
MD5 | 2d378b966fabf0b3e87cac603450f3d6 |
|
BLAKE2b-256 | 3d3b5b72fefe75ff4dae1f2358de69e80777aea0fb9a569978f222c8da318ac4 |