首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与theano一起使用多处理

与theano一起使用多处理
EN

Stack Overflow用户
提问于 2016-07-04 04:08:58
回答 1查看 2.5K关注 0票数 3

我试着用theano和一个神经网络库进行cpu多处理,Keras。

我使用device=gpu标志并加载keras模型。然后,为了提取超过一百万幅图像的特征,我使用多处理池。

该函数如下所示:

代码语言:javascript
复制
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中是否有其他方法可以并行地做同样的事情?

EN

回答 1

Stack Overflow用户

发布于 2016-07-31 13:07:36

如果其他进程不使用keras,则可以使用多个进程,据我所知,您需要将keras的使用限制在单个进程上。这似乎包括所有的keras类和方法,甚至那些似乎不使用gpu的人,例如ImageDataGenerator。

如果工作负载是有限的,也可以使用线程库来创建线程而不是进程,例如在GPU处理上一批时加载数据,那么限制就不适用了。由于全局解释器锁定,在CPU有限的环境中,这不是一个解决方案。

你的情况看起来像一个并行读取,做GPU的工作,写。这可以改造成流水线,例如,一些进程读取,执行GPU工作的主进程和一些进程写入。

  1. 为输入/输出创建队列对象(threading.Queue或multiprocessing.Queue)
  2. 创建从磁盘读取数据并将其输入队列的后台辅助线程/进程。
  3. 创建将数据从输出队列写入磁盘的后台辅助线程/进程。
  4. 主循环,它从输入队列中获取数据,创建批处理,处理gpu上的数据并填充输出队列。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38176827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档