【发布时间】: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