我可以想象一个值会在-1
所有可用资源可用时消耗所有可用资源。根据您正在谈论的功能,似乎为每个作业复制了数据,如果数据集足够大,这可能会导致内存问题。这是来自GridSearchCV文档字符串的信息片段:
If `n_jobs` was set to a value higher than one, the data is copied for each
point in the grid (and not `n_jobs` times). This is done for efficiency
reasons if individual jobs take very little time, but may raise errors if
the dataset is large and not enough memory is available. A workaround in
this case is to set `pre_dispatch`. Then, the memory is copied only
`pre_dispatch` many times. A reasonable value for `pre_dispatch` is `2 *
n_jobs`.
因此,使用pre_dispatch
对内存消耗设置上限可能是一个好主意。
否则,您为什么将其设置为-1
?如果任务可以是多线程的,您应该将其设置为机器上的物理内核数,或者可能是该数字的 2 倍。
编辑:
似乎设置n_jobs=-1
确实只是选择了所有物理内核并最大化它们的使用。在 StackOverflow 上查看此答案中的评论。
如果你没有设置pre_dispatch
,它当然会尝试复制很多。这就是你内存不足的原因。如果您有 4 个核心,则默认情况下将生成 8 个数据集副本(如上面引用中所述)。
这是另一个线程,它更多地关注性能方面