我已经使用 cma 包在 python 中实现了 CMA-ES。为了加快算法速度,我使用多处理包并行初始化该算法的多个实例。这是使用多重处理来评估适应度函数的补充。
我的问题是迭代的速度。当我将实例数量加倍时,迭代速度大致加倍。这让我很困惑,因为我运行的计算机有 8 个核心和 16 个线程。如果我运行 2 个实例并使用 4 个进程来评估适应度函数,应该不会有任何明显的瓶颈,但它会使迭代时间加倍。
我意识到多处理适用于具有两个或更多实际 cpu 而不是核心的计算机,但我不能以某种方式利用我的 cpu 多个核心吗?
我错过了什么?
我尝试禁用 SMT/超线程,但这没有什么区别。
我觉得初始化多个 cma 实例的想法是一个非常好的方法,但它并没有按照我的预期进行。
代码已经是多核的,因为它在底层调用优化库(例如 NumPy)来进行昂贵的操作(主要是线性代数)。例如,请参阅
eigenmethod
(链接)中的
GaussianSampler
。所以你不应该费心在这方面实施优化。不过,优化与目标计算相关的代码的独立部分仍然是一个好主意。