Невозможно получить результаты многопроцессорной обработки с пулами - PullRequest
0 голосов
/ 20 мая 2018

Во-первых, извинения за любые ошибки, которые я делаю.Я новичок в StackOverflow, и я все еще привыкаю к ​​нему.

Справочная информация: я пытаюсь обучить несколько моделей keras с помощью многопроцессорной обработки.Эти модели Keras хранятся в трех списках (в настоящее время 50 моделей в списке).Функция, которую я использую, имеет три модели в качестве входных данных (по одной в каждом списке), а также некоторые обучающие данные и идентификатор.Выходные данные должны быть оценочной оценкой и заданным идентификатором.

Моей первой попыткой был импорт многопроцессорной обработки из стандартной библиотеки Python.

from multiprocessing import Pool 

Оказалось, что это многопроцессорное приложение не работает,из-за рассола в качестве инструмента сериализации.Поэтому я скачал Пафоса и Укропа, чтобы разобраться с этой проблемой.Мой код выглядит так:

    from pathos.multiprocessing import ProcessingPool as Pool
    p = Pool()
    from pathos.helpers import freeze_support
    import dill

    if __name__ == "__main__":
        freeze_support()

        result = p.amap(training.train_critic, models_actor_t, models_critic, models_critic_t, batch_states_list, batch_actions_list, batch_rewards_list, batch_new_states_list , batch_terminals_list, sub_epochs_list, id_list)

        print(result)

Если я запускаю этот код, все работает нормально, и я получаю этот вывод.

<multiprocess.pool.MapResult object at 0x000001D42CEC09E8>

Если я добавляю метод result.get (),неприятности начинаются.

   if __name__ == "__main__":
        freeze_support()

        result = p.amap(training.train_critic, models_actor_t, models_critic, models_critic_t, batch_states_list, batch_actions_list, batch_rewards_list, batch_new_states_list , batch_terminals_list, sub_epochs_list, id_list)

        print(result)
        print(result.get())

Выход идет так:

Traceback (most recent call last):


File "C:/Users/Lennart/PycharmProjects/demonstrator_RLAlgorithm/GeneticAlgorithm/GAoperations.py", line 192, in <module>
    print(result.get())
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\pool.py", line 608, in get
    raise self._value
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\pool.py", line 385, in _handle_tasks
    put(task)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\connection.py", line 209, in send
    self._send_bytes(ForkingPickler.dumps(obj))
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\reduction.py", line 53, in dumps
    cls(buf, protocol).dump(obj)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 408, in dump
    self.save(obj)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 744, in save_tuple
    save(element)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 729, in save_tuple
    save(element)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 729, in save_tuple
    save(element)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 729, in save_tuple
    save(element)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 744, in save_tuple
    save(element)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 520, in save
    self.save_reduce(obj=obj, *rv)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 627, in save_reduce
    save(state)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\dill\dill.py", line 871, in save_module_dict
    StockPickler.save_dict(pickler, obj)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 814, in save_dict
    self._batch_setitems(obj.items())
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 840, in _batch_setitems
    save(v)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 774, in save_list
    self._batch_appends(obj)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 801, in _batch_appends
    save(tmp[0])
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 520, in save
    self.save_reduce(obj=obj, *rv)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 627, in save_reduce
    save(state)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self

Последняя часть этого повторяется:

 File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\dill\dill.py", line 871, in save_module_dict
    StockPickler.save_dict(pickler, obj)

Итак, мои вопросы:

  1. Что-то в корне не так?
  2. Модели Keras хранятся в списке.Таким образом, вставляя их в функцию, вес моделей все еще остается постоянным, верно?

Опять же, я извиняюсь, если сделал какие-то глупые новички.

Спасибо

Леннарт

...