Joblib,Parallel和batch_size

时间:2019-03-20 09:18:20

标签: parallel-processing joblib batchsize

假设我有一个大小为50000的生成器/列表。而且,我想将其用作:

batches = range(0, 50001)

Parallel(n_jobs=multiprocessing.cpu_count(), verbose=100,
                 backend="threading", batch_size=?, pre_dispatch=?)(delayed(<function>)(it) for it in batches)

如果我想一次处理20,000个项目/或者我希望线程/ cpu作为一个任务处理20,000个项目,您能告诉我batch_size和pre_dispatch中的正确值是什么吗?

1 个答案:

答案 0 :(得分:0)

要在单个 CPU 上处理 20000 个项目,batch_size=20000。

Predispatch 默认发送到 2CPU-s。在保持CPU-s忙碌的逻辑中,大概应该是2batch_size,所以pre_dispatch=40000。设置 pre_dispatch='all' 也很诱人,但是如果任务在时间上大致相同,那么它会起作用。 2*batch_size,避免一个CPU空闲,如果时间/任务差异很大。

以我自己的经验,如果每次操作都快的话,最好有更大的batch_size,以减少I/O。