跳转到主要内容

"Python 3.8+ toolbox for submitting jobs to Slurm

项目描述

CircleCI Code style: black Pypi conda-forge

提交它!

什么是submitit?

Submitit 是一个轻量级工具,用于在 Slurm 集群中提交 Python 函数进行计算。它基本上封装了提交并提供对结果、日志等的访问。 Slurm 是一个开源的、容错的、高度可扩展的集群管理和作业调度系统,适用于大型和小型 Linux 集群。Submitit 允许在 Slurm 或本地之间无缝切换。

示例胜于千言万语:执行加法运算

在已安装 submitit 的环境中

import submitit

def add(a, b):
    return a + 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 job
executor.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 job

output = job.result()  # waits for completion and returns output
assert output == 12  # 5 + 7 = 12...  your addition was computed in the cluster

Job 类还提供了读取日志文件(job.stdout()job.stderr())的工具。

如果您要运行的是命令,请使用 submitit.helpers.CommandFunction 将其转换为 Python 函数,然后提交。默认情况下,在 CommandFunction 中静默 stdout,但可以使用 verbose=True 取消静默。

更多示例 在此!!!

Submitit 是一个 Python 3.8+ 工具箱,用于将作业提交到 Slurm。它的目标是直接从 Python 代码中运行 Python 函数。

安装

快速安装,在已安装 pip 的虚拟环境/conda 环境中(检查 which pip

  • 稳定版本
    pip install submitit
    
  • 使用 conda 的稳定版本
    conda install -c conda-forge submitit
    
  • 主分支
    pip install git+https://github.com/facebookincubator/submitit@main#egg=submitit
    

您可以通过尝试运行 MNIST 示例 来检查一切是否按预期工作(需要 sklearn)。

文档

以下页面提供了更详细的信息

  • 示例:处理错误、并发、多任务等问题的示例...
  • 结构和主要对象:为了更好地理解 submitit 的工作方式,每个作业创建的文件,以及您将与之交互的主要对象。
  • 检查点:了解如何配置您的作业以在抢占和/或超时时进行检查点。
  • 技巧和注意事项:与 submitit 一起工作时可能很有用的信息。
  • 使用 nevergrad 进行超参数搜索:nevergrad 的基本使用方法和它与 submitit 的接口。

目标

这个 Python3 包的目标是能够轻松地从 Python 内部 启动 Slurm 作业,使用与标准库包 concurrent.futures 相同的提交和作业模式。

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

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

Submitit 被FAIR集群上的FAIR研究人员使用。默认设置是为了使他们的生活更轻松,可能不适用于每个集群。

非目标

  • 一个用于运行 slurm 作业的命令行工具。在这里,所有操作都在 Python 内部进行。为此,您可以使用 Hydrasubmitit 插件(版本 >= 1.0.0)。
  • 一个任务队列,它仅实现启动任务的能力,但以任何方式调度它们。
  • 在 Python2 中使用!这是一个仅适用于 Python3.8+ 的包 :)

与 dask.distributed 的比较

dask 是一个用于分布式计算的不错框架。 dask.distributed 提供与 submitit 相同的 concurrent.futures 执行器 API。

from distributed import Client
from dask_jobqueue import SLURMCluster
cluster = SLURMCluster(processes=1, cores=2, memory="2GB")
cluster.scale(2)  # this may take a few seconds to launch
executor = Client(cluster)
executor.submit(...)

submitit 的主要区别在于 dask.distributed 将作业分发到一组工作者(参见上面的 cluster 变量),而 submitit 作业是集群上的直接作业。从这个意义上讲,submitit 是一个比 dask.distributed 更低级别的接口,您可以对作业有更多直接的控制,包括单独的 stdoutstderr,以及在抢占和超时的情况下可能的检查点。另一方面,您应该避免使用 submitit 提交多个小任务,这会创建许多独立的作业并可能过载集群,而您可以通过 dask.distributed 无任何问题地完成。

贡献者

按时间顺序:Jérémy Rapin,Louis Martin,Lowik Chanussot,Lucas Hosseini,Fabio Petroni,Francisco Massa,Guillaume Wenzek,Thibaut Lavril,Vinayak Tantia,Andrea Vedaldi,Max Nickel,Quentin Duval(请随意 贡献 并添加您的名字 ;) )

许可

Submitit 在 MIT 许可证下发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

submitit-1.5.2.tar.gz (80.4 kB 查看哈希值)

上传时间 源代码

构建分发

submitit-1.5.2-py3-none-any.whl (74.9 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

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