В документации для 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 устанавливает количество потоков, но это только предположение.