python3.6+工具箱,用于向Slurm提交作业
submitit的Python项目详细描述
提交!在
什么是顺从?在
submitt是一个轻量级工具,用于在Slurm集群中提交Python函数进行计算。 它基本上包装提交,并提供对结果、日志等的访问。 Slurm是一个开源的、容错的、高度可伸缩的集群管理和作业调度系统,适用于大小Linux集群。 submitt允许在Slurm或本地执行之间无缝切换。在
一个例子胜过千言万语:执行加法
在安装了submitit
的环境中:
importsubmititdefadd(a,b):returna+b# executor is the submission interface (logs are dumped in the folder)executor=submitit.AutoExecutor(folder="log_test")# set timeout in min, and partition for running the jobexecutor.update_parameters(timeout_min=1,slurm_partition="dev")job=executor.submit(add,5,7)# will compute add(5, 7)print(job.job_id)# ID of your joboutput=job.result()# waits for completion and returns outputassertoutput==12# 5 + 7 = 12... your addition was computed in the cluster
Job
类还提供了读取日志文件(job.stdout()
和job.stderr()
)的工具。在
如果要运行的是命令,请使用submitit.helpers.CommandFunction
将其转换为Python函数,然后提交它。
默认情况下,stdout在CommandFunction
中被静音,但它可以用verbose=True
来取消静音。在
查找更多示例here!!!
submitt是一个python3.6+工具箱,用于向Slurm提交作业。 它的目标是从python代码运行python函数。在
安装
快速安装,在安装了pip
的virtualenv/conda环境中(选中which pip
):
- 稳定释放: ^{pr2}$ 在
- 使用conda的稳定释放:
在conda install -c conda-forge submitit
- 主分支机构:
在pip install git+https://github.com/facebookincubator/submitit@master#egg=submitit
您可以尝试运行MNIST example来检查是否一切正常(需要sklearn)。在
文件
有关详细信息,请参阅以下页面:
- Examples:对于一系列处理错误、并发、多任务处理等的示例。。。在
- Structure and main objects:为了更好地理解
submitit
是如何工作的,为每个作业创建了哪些文件,以及将与之交互的主要对象。在 - Checkpointing:了解如何配置作业以在抢占和/或超时时获取检查点。在
- Tips and caveats:用于在使用
submitit
时方便使用的一组信息。在 - Hyperparameter search with nevergrad:
nevergrad
用法的基本示例,以及它如何与submitit
交互。在
目标
这个Python3包的目标是能够在Slurm上无痛地从Python内的启动作业,使用与标准库包^{
以下是使用此轻量级软件包的一些好处:
- 提交任何函数,甚至是lambda和脚本定义的函数。在
- 如果作业失败,则引发堆栈跟踪错误。在
- 重新排队抢占作业(仅限Slurm)
- 在
submitit
执行器和concurrent.futures
执行器中的一个执行器之间进行交换,这样可以很容易地在slurm上运行代码,或者在本地使用多线程处理。在 - 当抢占或超时并从当前状态重新排队时,检查点有状态的可调用项(高级功能)。在
- 轻松访问多节点/任务作业的任务本地/全局排名。在
- 多亏了一个插件系统,相同的代码可以适用于不同的集群。在
Submitit由FAIR集群上的FAIR研究人员使用。 选择缺省值是为了使它们的工作更简单,并且可能不是每个集群的理想选择。在
非目标
- 运行slurm作业的命令行工具。在这里,一切都发生在Python内部。为此,您可以使用Hydra的submitit plugin(version>;=1.0.0)。在
- 任务队列,它只实现启动任务的功能,但不以任何方式调度任务。在
- 在Python中使用!这是Python3.6+专用包:)
比较达斯克。分布式
^{dask.distributed
提供与submitit
相同的concurrent.futures
执行器API:
fromdistributedimportClientfromdask_jobqueueimportSLURMClustercluster=SLURMCluster(processes=1,cores=2,memory="2GB")cluster.scale(2)# this may take a few seconds to launchexecutor=Client(cluster)executor.submit(...)
与submitit
的关键区别在于dask.distributed
将作业分配给一个worker池(参见上面的cluster
变量),而{submitit
是一个比dask.distributed
更低级别的接口,您可以更直接地控制您的作业,包括单个的stdout
和{submitit
提交多个小任务,这将创建许多独立的作业并可能使集群过载,而通过dask.distributed
可以毫无问题地完成任务。在
贡献者
按时间顺序排列:Jérémy Rapin,Louis Martin,Lowik Chanusso,Lucas Hosseini,Fabio Petroni,Francisco Massa,Guillaume Wenzek,Thibaut Lavril,Vinayak Tantia,Andrea Vedaldi,Max Nickel,Quentin Duval(请随意添加您的姓名)
许可证
Submitit在MIT License下发布。在
- 项目
标签: