python3.6+工具箱,用于向Slurm提交作业

submitit的Python项目详细描述


CircleCICode style: blackPypiconda-forge

提交!在

什么是顺从?在

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 nevergradnevergrad用法的基本示例,以及它如何与submitit交互。在

目标

这个Python3包的目标是能够在Slurm上无痛地从Python内的启动作业,使用与标准库包^{相同的提交和作业模式:

以下是使用此轻量级软件包的一些好处:

  • 提交任何函数,甚至是lambda和脚本定义的函数。在
  • 如果作业失败,则引发堆栈跟踪错误。在
  • 重新排队抢占作业(仅限Slurm)
  • submitit执行器和concurrent.futures执行器中的一个执行器之间进行交换,这样可以很容易地在slurm上运行代码,或者在本地使用多线程处理。在
  • 当抢占或超时并从当前状态重新排队时,检查点有状态的可调用项(高级功能)。在
  • 轻松访问多节点/任务作业的任务本地/全局排名。在
  • 多亏了一个插件系统,相同的代码可以适用于不同的集群。在

Submitit由FAIR集群上的FAIR研究人员使用。 选择缺省值是为了使它们的工作更简单,并且可能不是每个集群的理想选择。在

非目标

  • 运行slurm作业的命令行工具。在这里,一切都发生在Python内部。为此,您可以使用Hydrasubmitit 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下发布。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在OSGI中使用cxf生成的客户端时出现Java类装入器问题和JaxB异常   java为什么要在javamail中迭代多部分电子邮件中的部分?   并发编程问题   JFileChooser&&System中未调用java windowClosing。退出功能不正常?   SQL查询的java语法分析   java如何使用AspectJ声明字段上的警告   什么是java向量。元素()C#等价物   java解析Android应用程序中tornado web服务中的CSV文件   java我试过c2dm,我需要服务器端   java调整JPanel大小以适应新的JLabel图标   Java与Python脚本的通信   java使用Saxon通过XSLT生成URL   java net::ERR_complete_CHUNKED_编码200(OK)来自struts应用程序中的tomcat   java如何为我的窗格设置不同的位置?   java使用Cypher Neo4j获取给定类型的所有节点(从SQL世界中的tablename中选择*)   nio使用Java解析文件值   java使用WSDL生成REST客户端会是错误的方向吗?   java如何在我的应用程序中构建类映射?   java按钮。setEnabled在第一个循环中不起作用   xPath适用于最后一页,但不适用于第一页