2016-07-04 2 views
3

Я пытаюсь использовать theano с процессором cpu-multiprocessing с помощью библиотеки нейронных сетей Keras.с использованием многопроцессорной обработки с помощью anano

Я использую флаг device=gpu и загружаю модель keras. Затем для извлечения функций для более миллиона изображений, im используя многопроцессорный пул.

функция выглядит примерно так:

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 и мой код с ошибкой памяти. Можно ли заставить многопроцессорность создавать потоки в памяти процессора, а затем использовать определенные части для извлечения функции, такие как f([im, 0])[0][0] с графическим процессором?

Если нет, есть ли альтернатива делать то же самое параллельно в python?

ответ

0

Возможно использование нескольких процессов, если другие процессы не используют керары, насколько мне известно, вам необходимо ограничить использование керасов одним процессом. Это, как представляется, включает все классы и методы keras, даже те, кто, похоже, не использует gpu, например. ImageDataGenerator.

Если рабочая нагрузка ограничена GPU, также возможно использовать библиотеку потоков, которая создает потоки вместо процессов, например. для загрузки данных, в то время как GPU обрабатывает предыдущую партию, тогда ограничение не применяется. Из-за блокировки глобального интерпретатора это не решение в средах с ограниченным процессором.

Ваша ситуация выглядит как параллельная [читайте, выполняйте работу на графическом процессоре, пишите]. Это может быть преобразовано в трубопровод, например. чтение некоторых процессов, основной процесс, выполняющий работу графического процессора, и некоторые процессы записи.

  1. Создание объектов очереди для ввода/вывода (threading.Queue или multiprocessing.Queue)
  2. Создание фоновых рабочих потоков/процессов, которые считывают данные с диска и подачи его в очередь
  3. ввода Создание фона рабочих потоков/процессы, которые пишут данные из очереди вывода на диск
  4. основного цикла, который принимает данные из входной очереди, создает партию, обрабатывает данные на GPU и заполняет очередь вывода
Смежные вопросы

 Смежные вопросы