内存问题 sklearn pairwise_distances 计算
Memory issue sklearn pairwise_distances calculation
我有一个大型数据框,其索引为 movie_id,列 headers 表示 tag_id。每行代表电影标签相关性
639755209030196 691838465332800 \
46126718359 0.042 0.245
46130382440 0.403 0.3
46151724544 0.032 0.04
然后我执行以下操作:
data = df.values
similarity_matrix = 1 - pairwise_distances(data, data, 'cosine', -2)
它有接近 8000 个唯一标签,因此数据的形状是 42588 * 8000。在上面的代码行之前,我删除了所有 un-necessary 数据 object 以释放所有内存.我在一台有 40G 内存的机器上遇到这个错误。
Exception in thread Thread-4:
Traceback (most recent call last):
File "~/anaconda/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "~/anaconda/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 326, in _handle_workers
pool._maintain_pool()
File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 230, in _maintain_pool
self._repopulate_pool()
File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 223, in _repopulate_pool
w.start()
File "~/anaconda/lib/python2.7/multiprocessing/process.py", line 130, in start
self._popen = Popen(self)
File "~/anaconda/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory
可能是什么原因?矩阵太大了吗?我有什么选择可以避免这个内存问题?
我目前正在使用:
python 2.7
scikit-learn 0.15.2 np19py27_0
Red-Hat Linux with 4X4 cores x86_64
您使用的是哪个版本的 scikit-learn? 运行 和 n_jobs=1 吗?
结果应该适合内存,它是 8 * 42588 ** 2 / 1024 ** 3 = 13 Gb。
但是数据大约是 2gb,并且会被复制到每个核心。所以如果你有 16 个核心,你将 运行 陷入困境。
我有一个大型数据框,其索引为 movie_id,列 headers 表示 tag_id。每行代表电影标签相关性
639755209030196 691838465332800 \
46126718359 0.042 0.245
46130382440 0.403 0.3
46151724544 0.032 0.04
然后我执行以下操作:
data = df.values
similarity_matrix = 1 - pairwise_distances(data, data, 'cosine', -2)
它有接近 8000 个唯一标签,因此数据的形状是 42588 * 8000。在上面的代码行之前,我删除了所有 un-necessary 数据 object 以释放所有内存.我在一台有 40G 内存的机器上遇到这个错误。
Exception in thread Thread-4:
Traceback (most recent call last):
File "~/anaconda/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "~/anaconda/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 326, in _handle_workers
pool._maintain_pool()
File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 230, in _maintain_pool
self._repopulate_pool()
File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 223, in _repopulate_pool
w.start()
File "~/anaconda/lib/python2.7/multiprocessing/process.py", line 130, in start
self._popen = Popen(self)
File "~/anaconda/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory
可能是什么原因?矩阵太大了吗?我有什么选择可以避免这个内存问题?
我目前正在使用:
python 2.7
scikit-learn 0.15.2 np19py27_0
Red-Hat Linux with 4X4 cores x86_64
您使用的是哪个版本的 scikit-learn? 运行 和 n_jobs=1 吗? 结果应该适合内存,它是 8 * 42588 ** 2 / 1024 ** 3 = 13 Gb。 但是数据大约是 2gb,并且会被复制到每个核心。所以如果你有 16 个核心,你将 运行 陷入困境。