我试着用theano和一个神经网络库进行cpu多处理,Keras。
我使用device=gpu标志并加载keras模型。然后,为了提取超过一百万幅图像的特征,我使用多处理池。
该函数如下所示:
from keras import backend as K
f = K.function([model.layers[0].input, K.learning_phase()], [model.layers[-3].output,])
def feature_gen(flz):
im = imread(flz)
cPickle.dump(f([im, 0])[0][0], open(flz, 'wb'), -1)
pool = mp.Pool(processes=10)
results = [pool.apply_async(feature_gen, args=(f, )) for f in filelist]]但是,这将开始在GPU内存中创建池,而我的代码由于内存错误而失败。是否有可能强迫多进程在CPU内存中创建线程,然后使用特定的部件进行特征提取,例如f([im, 0])[0][0]和GPU?
如果没有,在python中是否有其他方法可以并行地做同样的事情?
发布于 2016-07-31 13:07:36
如果其他进程不使用keras,则可以使用多个进程,据我所知,您需要将keras的使用限制在单个进程上。这似乎包括所有的keras类和方法,甚至那些似乎不使用gpu的人,例如ImageDataGenerator。
如果工作负载是有限的,也可以使用线程库来创建线程而不是进程,例如在GPU处理上一批时加载数据,那么限制就不适用了。由于全局解释器锁定,在CPU有限的环境中,这不是一个解决方案。
你的情况看起来像一个并行读取,做GPU的工作,写。这可以改造成流水线,例如,一些进程读取,执行GPU工作的主进程和一些进程写入。
https://stackoverflow.com/questions/38176827
复制相似问题