为什么我的 CMA-ES 实现的迭代速度会因多处理而变慢?

问题描述 投票:0回答:1

我已经使用 cma 包在 python 中实现了 CMA-ES。为了加快算法速度,我使用多处理包并行初始化该算法的多个实例。这是使用多重处理来评估适应度函数的补充。

我的问题是迭代的速度。当我将实例数量加倍时,迭代速度大致加倍。这让我很困惑,因为我运行的计算机有 8 个核心和 16 个线程。如果我运行 2 个实例并使用 4 个进程来评估适应度函数,应该不会有任何明显的瓶颈,但它会使迭代时间加倍。

我意识到多处理适用于具有两个或更多实际 cpu 而不是核心的计算机,但我不能以某种方式利用我的 cpu 多个核心吗?

我错过了什么?

我尝试禁用 SMT/超线程,但这没有什么区别。

我觉得初始化多个 cma 实例的想法是一个非常好的方法,但它并没有按照我的预期进行。

optimization python-multiprocessing evolutionary-algorithm
1个回答
0
投票

代码已经是多核的,因为它在底层调用优化库(例如 NumPy)来进行昂贵的操作(主要是线性代数)。例如,请参阅

eigenmethod
链接
)中的 GaussianSampler。所以你不应该费心在这方面实施优化。不过,优化与目标计算相关的代码的独立部分仍然是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.