【问题标题】:Python Multiprocessing Being Extremely SlowPython 多处理非常慢
【发布时间】:2021-05-11 23:02:37
【问题描述】:

我试图在一个循环中多次运行 pyomo/python 中的优化模型,只有一个变化的参数是 c_param,而 c_param 的值是 1 到 170。我也在尝试使用并行计算来做到这一点具有 6 个处理器的多处理模块。但是,我认为我的设置方式有一些错误,因为多处理方法比没有多处理要慢。所以我有:


    import multiprocessing as mp

    # Global parameters defined here.
    S = list(range(170))
    def my_model(c_param):
        # My pyomo model here
        # Print model results to csv

    if __name__ == "__main__":
        c_param= [i + 1 for i in S]

        pool = mp.Pool(6)
        pool.map(my_model, S)
        pool.close()
        pool.join()

我希望打印出 170 个 csv 文件。我可以通过正常循环来实现这一点,但这样做需要大约 40 小时。我希望使用 6 个处理器将其加速到 6-7 小时,但不知何故这需要更长的时间。我在那里做错了什么会减慢这个过程吗?提前感谢您的帮助!

【问题讨论】:

  • 您是否有足够的内存来一次处理 6 个进程而不进行交换?
  • 我愿意。我在大学拥有的超级计算系统上运行它
  • 没有看到 my_model 做了什么,很难看出哪里出了问题。
  • 您是否为集群选择了正确数量的工作核心?我问,因为默认情况下可用于作业的核心数量可能是导致急剧减速的原因,当池大小大于可用核心数量时,可能会发生这种情况。
  • @jrd1 是的,我愿意。集群允许在一个节点上有 20 个内核,总共有 1000 GB 内存,所以我请求了 6 个内核,每个内核有 160 GB 内存,因此它接近最大化计算预算,但仍在其中。

标签: python python-multiprocessing pyomo


【解决方案1】:

如果模型函数包含许多和/或深度嵌套的对象,则可能需要更长时间,因为在将对象发送到其他进程之前需要对其进行腌制/序列化。但是,如果不知道模型函数中的内容,就很难分辨。

【讨论】:

  • 模型很大,但我认为它没有很多嵌套对象。它是一个包含超过 800 万个变量的混合整数线性规划。我尝试在没有多处理的情况下运行它,完成一次迭代大约需要 13 分钟(打印出一个结果文件)。使用多处理,我需要将近 3 个小时才能看到打印出一个结果文件。
猜你喜欢
  • 2021-11-11
  • 2019-09-06
  • 1970-01-01
  • 2020-03-02
  • 2022-06-13
  • 1970-01-01
  • 2015-08-26
  • 2017-11-23
  • 1970-01-01
相关资源
最近更新 更多