Путаница с многопроцессорностью и работниками в Keras fit_generator () с windows 10 в spyder - PullRequest
0 голосов
/ 10 февраля 2019

В документации для fit_generator () (docs: https://keras.io/models/sequential/#fit_generator)) говорится, что параметр use_multiprocessing принимает значение bool, которое, если установлено значение True, разрешает многопоточность на основе процессов.

Также говорится, чтоПараметр working - это целое число, которое обозначает, сколько процессов нужно ускорить, если используется многопоточность, основанная на процессах. Очевидно, по умолчанию он равен 1 (поток, основанный на одном процессе), а если задано значение 0, он будет запускать генератор в главном потоке.

То, что я думал, это означало, что если use_multiprocessing = True и working> 0 (давайте использовать 6 для примера), то это будет ускорять 6 процессов, запускающих генератор независимо. Однако, когда я проверяю это, я думаю, что у меня неправильное пониманиечто-то (см. ниже).

Моя путаница возникает из-за того факта, что если я установил для use_multiprocessing значение False и worker = 1, то в диспетчере задач я вижу, что все 12 моих виртуальных ядер используются несколько равномерно иЯ тренируюсь на моей модели примерно на 50% (для справкиКроме того, у меня есть процессор i7-8750H с 6 ядрами, которые поддерживают виртуализацию, и у меня включена виртуализация в BIOS).Если я увеличу количество работников, загрузка процессора увеличится до 100%, и обучение будет намного быстрее.Если я уменьшу количество работников до 0, чтобы он работал в главном потоке, я вижу, что все мои виртуальные ядра все еще используются, но это выглядит несколько неравномерно и загрузка ЦП составляет около 36%.

К сожалению, если я установил multiprocessing = True, то получаю ошибку сломанной трубы.Мне еще предстоит это исправить, но я бы хотел лучше понять, что я пытаюсь исправить здесь.

Если кто-то может объяснить, пожалуйста, разницу между тренировками с помощью use_multiprocessing = True и use_multiprocessing = False, а такжекогда работники = 0, 1 и> 1, я был бы очень благодарен.Если это имеет значение, я использую тензорный поток (версия gpu) в качестве бэкэнда для keras с python 3.6 в Spyder с консолью IPython.

Я подозреваю, что use_multiprocessing фактически включает многопроцессорную обработку, когда True, тогда как рабочие> 1, когда use_multiprocessing= False устанавливает количество потоков, но это только предположение.

1 Ответ

0 голосов
/ 11 февраля 2019

Единственное, что я знаю, это то, что когда use_multiprocessing=False и workers > 1, существует много параллельных потоков загрузки данных (я не очень хорош с этими именами, потоками, процессами и т. Д.).Но существует пять параллельных фронтов, загружающих данные в очередь (поэтому загрузка данных происходит быстрее, но это не влияет на скорость модели - это может быть хорошо, когда загрузка данных занимает слишком много времени).

Всякий раз, когда я пытался use_multiprocessing=True, все зависало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...