"Python 3.8+ toolbox for submitting jobs to Slurm
项目描述
提交它!
什么是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 内部进行。为此,您可以使用 Hydra 的 submitit 插件(版本 >= 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
更低级别的接口,您可以对作业有更多直接的控制,包括单独的 stdout
和 stderr
,以及在抢占和超时的情况下可能的检查点。另一方面,您应该避免使用 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 36a8a54ad4e10171111e7618eefe28fe819f931a89c9cd1f6d2770900c013f12 |
|
MD5 | d29c43f532b8ab4ff46c0a1cd7fb4ce1 |
|
BLAKE2b-256 | 1c0a854409283d533279b1b7523ebb65e1926ff611ee81bdf9c298bbed7b75ac |
submitit-1.5.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c6d5867fbcc78588d0ded3338436903f8db9fdb759f80e9639e6025a9ea32ade |
|
MD5 | 9a75f70ef73f4934b5cd1ea23af65f75 |
|
BLAKE2b-256 | dca490123871996bfb8a7148cd11d61e7a0ddc0118114c071730b3dc3a05c7bc |