这是一些 可能 导致此行为的原因
- 随着增加 线程数,初始化和释放每个线程会产生明显的开销。我在i7 7700HQ上运行了您的代码,每次增加时,我都会看到以下行为
n_job
- 当
n_job=1
与n_job=2
每个线程的时间(时间由每模型GridSearchCV评价充分训练模型和测试)为2.9s(总时间约2分钟) - 时
n_job=3
,时间为3.4s(总时间1.4分钟) - 时
n_job=4
,时间为3.8S(总时间58秒) - 当
n_job=5
,时间为4.2s(总时间51秒) - 当
n_job=6
,时间为4.2秒(总时间约为49秒) - 当
n_job=7
,时间为4.2秒(总时间约为49秒) - 当
n_job=8
,时间为4.2秒(总时间约为49秒)
- 当
现在您可以看到,每个线程的时间增加了,但是总体时间似乎有所减少(尽管超过了
n_job=4 the different was not exactly linear) and remained constained with
n_jobs> = 6`,这是由于初始化和释放线程会产生成本)。请参见github问题和本期。此外,可能还有其他瓶颈,例如数据量太大,无法同时广播到所有线程,线程在RAM上抢占(或其他资源等),如何将数据推入每个线程等。
我建议您阅读有关Ahmdal定律的信息,该定律指出通过并行化可以实现加速的理论界限,该界限由以下公式提供: Image Source:Ahmdal定律:Wikipedia
最后,这可能是由于数据大小以及用于训练的模型的复杂性所致。
这是一篇博客文章,解释了有关多线程的相同问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)