Python多进程共享一个庞大的numpy bool数组

时间:2017-09-16 17:13:10

标签: python arrays numpy boolean python-multiprocessing

我在分享一个numpy数组时遇到了问题。这个想法是这样的,我有一个大的numpy bool数组(600000x6000 = 3.6GB)我想使用mp.Pool进行共享并传递给多个线程,作为具有不同ANN形状的sklearn MLPRegressor的输入。但是,我无法弄清楚如何制作一个bool mp.Array。

我得到的代码有点复杂,但这是一个例子:

import numpy as np
import multiprocessing as mp
import ctypes

def train((NN,data)):
 #train NN using sklearn.neural_network.MLPRegressor
 #will return the accuracy of the regression (r)
 return (NN,r)

#leaving out the target data and NN_shape generation for simplicity
np_data = np.array([[False]*6000]*600000,dtype='bool')
shared_arr = mp.Array(ctypes.c_bool,np_data.shape[0]*np_data.shape[1])
arr = np.frombuffer(shared_arr.get_obj())
arr = arr.reshape(np_data.shape)
training_runs = [(x,arr) for x in NN_shapes]

p = mp.Pool()
results = p.map(train, training_runs)

这会在重塑步骤中给出错误消息:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: cannot reshape array of size 450000000 into shape (600000,6000)

我已经看过使用双精度执行此操作的示例(dtype ='double'和ctypes.c_double)。但是,这需要内存的8倍(28.8GB),并且当我用完RAM时,会在mp.Array步骤中导致内存错误。

mmap.error: [Errno 12] Cannot allocate memory

非常感谢任何帮助!

0 个答案:

没有答案