gpt4 book ai didi

python - 在 theano 中使用多处理

转载 作者:行者123 更新时间:2023-11-28 17:26:52 25 4
gpt4 key购买 nike

我正在尝试将 theano 与 cpu-multiprocessing 和神经网络库 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 内存中创建线程,然后使用特定部分进行特征提取,例如使用 GPU 的 f([im, 0])[0][0]

如果没有,是否有替代方案可以在 python 中并行执行相同的操作?

最佳答案

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

如果工作负载受 GPU 限制,也可以使用线程库,它创建线程而不是进程,例如在 GPU 处理前一批时加载数据,则该限制不适用。由于全局解释器锁,这不是 CPU 受限环境中的解决方案。

你的情况看起来像一个并行的 [读,在 GPU 上工作,写]。这可以改造成管道,例如一些进程读取,主进程执行 GPU 工作,一些进程写入。

  1. 为输入/输出创建队列对象(threading.Queue 或 multiprocessing.Queue)
  2. 创建从磁盘读取数据并将其提供给输入队列的后台工作线程/进程
  3. 创建后台工作线程/进程,将数据从输出队列写入磁盘
  4. 主循环从输入队列中获取数据,创建批处理,在 gpu 上处理数据并填充输出队列

关于python - 在 theano 中使用多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com