【问题标题】:Running scikit-learn on multiple cores: OSError: [Errno 12] Cannot allocate memory在多核上运行 scikit-learn:OSError: [Errno 12] Cannot allocate memory
【发布时间】:2015-09-16 08:05:44
【问题描述】:

我需要在多个核心上运行分类器。我正在使用 scikit-learn 和 Python 2.7。

来自 scikit-learn 的 GridSearchCV 模块有一个名为 n_jobs 的参数,可让您在多个内核上运行网格搜索。当我将此参数设置为 10 时,我得到如下所示的内存分配错误。有什么想法吗?我的机器有 32 个核心。

Traceback (most recent call last):

...

w.start()
File "../anaconda/lib/python2.7/multiprocessing/process.py", line 130, in start
    self._popen = Popen(self)
File "/home/nhailu/anaconda/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
    self.pid = os.fork()

OSError: [Errno 12] Cannot allocate memory

【问题讨论】:

    标签: multithreading python-2.7 scikit-learn


    【解决方案1】:

    我认为最可能的罪魁祸首是您有一个非常大的网格可供搜索。考虑将 pre_dispatch 设置为工作数量的倍数。

    另外,joblib 的工作方式,您需要确保您的主脚本受到“if main”习语的保护:

    if __name__ == "__main__":
        # your script here, otherwise every core will execute all of your code
    

    来自GridSearchCV documentation

    pre_dispatch : int 或 string,可选

    控制在并行执行期间分派的作业数量。当调度的作业多于 CPU 可以处理的作业时,减少此数字有助于避免内存消耗的爆炸式增长。这个参数可以是:

    无,在这种情况下,所有作业都会立即创建和生成。将此用于轻量级和快速运行的作业,以避免因按需生成作业而导致延迟

    一个 int,给出产生的总作业的确切数量

    一个字符串,将表达式作为 n_jobs 的函数,如“2*n_jobs”

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 2011-08-29
      • 2013-12-05
      • 1970-01-01
      • 2023-02-09
      • 2021-07-14
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多