Многопроцессорная обработка для создания единого мини-пакета (Keras - TF backend) - PullRequest
0 голосов
/ 01 февраля 2019

В Keras API есть возможность использовать Sequence для создания мини-пакетов в многопроцессорном режиме.Тем не менее, генерация одной мини-партии остается единым процессом: то есть необходимо циклически проходить по фиксированному набору примеров (размером BATCH_SIZE) по одному, выполнять при необходимости увеличение данных и заполнять входные и выходные тензоры.последовательно.Я пытаюсь сделать этот шаг, используя несколько работников, где: каждый работник загружает изображение и выполняет увеличение.На игрушечном примере (здесь не показан), многопроцессный подход занимает около половины времени циклического подхода для создания одной мини-партии.

Я хочу найти лучший подход, чем глобальная переменная, дляобмениваться данными между различными процессами.Ниже приведен пример с игрушкой:

from pathos.multiprocessing import ProcessingPool as Pool
import time

VALUES = range(10000)

class BlockingMap:
    def __init__(self):
        pass

    def square(self, idx):
        item = VALUES[idx]
        return item * item

    def run(self, list_ids):
        pool = Pool()
        result = pool.map(self.square, list_ids)
        pool.close()
        return result

if __name__ == '__main__':
    BATCH_SZ = 32
    batch_id = 0
    list_ids = VALUES[batch_id * BATCH_SZ:(batch_id + 1) * BATCH_SZ]
    mm = BlockingMap()
    init = time.time()
    res = mm.run(list_ids)
    print("Elapsed Time Blocking Map ", time.time() - init)
    print("Examples {} | Valid {}".format(BATCH_SZ, res))
...