跳转到主要内容

批量生成slurm作业。

项目描述

slurmjobs

pypi tests docs License

自动化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=1modules=['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 (25.7 kB 查看散列)

上传

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面