我已经看到了其他相关的问题(例如this一个),但实际上没有一个问题回答我的问题,所以这里有:
我有一个非常令人难以置信的并行任务,我自己的GridSearch滚动版本。简单来说,我有一组参数,并希望在每个参数上评估我的模型。这些运行之间没有依赖关系,所以代码看起来像这样:
pool = multiprocessing.Pool(processes=4)
scores = pool.map(evaluator, permutations)
其中evaluator
是一个函数,用于计算给定参数字母的分数,permutations
是一个dictionaries
的列表(在这种情况下长度为4)。
现在我的假设是使用4个进程(在8核机器上)应该给我4倍的加速(请注意,无论参数集如何,评估器都需要相同的时间,因此负载完全平衡)。 / p>
相反,我的时机产生了这些结果:
使用4个流程,每个评估需要82秒才能完成,因此总时间为84秒。
使用1个流程,每次评估需要43秒才能完成,因此总时间为170秒。
所以最后我使用4个核心获得了2倍的加速。当流程较少时,为什么每个流程都会更快?