基于submitit实现Python函数的集群计算

勿忘初心做自己  金牌会员 | 2024-12-28 10:38:37 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

一、项目介绍

Submitit是一款轻量级工具,旨在简化Python函数在Slurm集群上的提交过程。它不但提供了对作业结果、日志文件等的无缝访问,更让开发者可以或许在本地执行与Slurm集群间切换自如,极大地提高了代码的可移植性和机动性。
Slurm作为一种广泛利用的集群管理与作业调理软件,支持从大型到小型的Linux集群。而Submitit作为衔接本地与集群操作的桥梁,确保了高效且稳定的任务处理。
二、项目技能分析



  • 高效的任务提交机制
    Submitit的焦点功能在于它的Job类及其相干方法。通过定义一个简单的Python函数(如上文示例中的add函数),只需几行代码即可实现该函数在Slurm集群上的异步调用。这种机制不但减少了任务调理的时间开销,还增强了代码的可读性与维护性。
  • 简化日志管理
    对于每个提交的作业,Submitit会主动生成并存储相应的日志信息,包括标准输出(stdout)和错误输出(stderr)。这极大地方便了开发者追踪任务运行状态和调试潜伏的问题点。
  • 兼容多环境部署
    无论是稳定版本还是主分支的安装,Submitit都提供了详尽的指导文档和多种安装选项,包括捏造环境、Conda环境和直接Git克隆等方式,以满足差别用户的需求。别的,提供的示例程序帮助验证安装是否乐成,例如通过运行MNIST示例,查抄sklearn等依赖库是否正确配置。
三、代码样例

  1. pip install submitit
复制代码
下面以在集群中记在 model.pth 文件中的字典 dico 为例:
  1. import os
  2. import torch
  3. import submitit
  4. def load_model(bin_path):
  5.     # 使用torch.load加载.pth文件
  6.     model = torch.load(bin_path, map_location=torch.device('cpu'))  # 根据需要调整map_location
  7.     dico = model['dico']
  8.     return dico
  9.    
  10. if __name__ == "__main__":
  11.     # 配置路径
  12.     bin_path = '/data/model.pth'
  13.     log_path = '/data/log'
  14.    
  15.     # 配置作业
  16.     executor = submitit.AutoExecutor(folder=log_path, cluster="local")
  17.     executor.update_parameters(timeout_min=60)
  18.     # 提交作业
  19.     job = executor.submit(load_model, bin_path)
  20.     print("Job submitted with ID: {}".format(job.job_id))
  21.     result = job.result()
  22.     print("Job result: {}".format(result))
复制代码
输出如下:
  1. Job submitted with ID: 2787702
  2. Job result: <src.data.dictionary.Dictionary object at 0x7f9c21883460>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表