Как определить max_queue_size, working и use_multiprocessing в keras fit_generator ()? - PullRequest
8 голосов
/ 05 апреля 2019

Я применяю трансферное обучение в предварительно обученной сети, используя версию keras для GPU. Я не понимаю, как определить параметры max_queue_size, workers и use_multiprocessing. Если я изменю эти параметры (прежде всего, на ускоренное обучение), я не уверен, все ли данные по-прежнему видны за эпоху.

max_queue_size:

  • максимальный размер внутренней обучающей очереди, используемой для «предварительного кэширования» выборок из генератора

  • Вопрос: Относится ли это к тому, сколько пакетов готовится на процессоре? Как это связано с workers? Как определить это оптимально?

workers:

  • количество потоков, генерирующих пакеты параллельно. Пакеты вычисляются параллельно на ЦП и передаются на лету на ГП для вычислений нейронной сети

  • Вопрос: Как узнать, сколько пакетов мой процессор может / должен генерировать параллельно?

use_multiprocessing:

  • использовать ли процессные потоки

  • Вопрос: Должен ли я установить для этого параметра значение true, если я изменю workers? Относится ли это к использованию процессора?

Похожие вопросы можно найти здесь:

Я использую fit_generator() следующим образом:

    history = model.fit_generator(generator=trainGenerator,
                                  steps_per_epoch=trainGenerator.samples//nBatches,     # total number of steps (batches of samples)
                                  epochs=nEpochs,                   # number of epochs to train the model
                                  verbose=2,                        # verbosity mode. 0 = silent, 1 = progress bar, 2 = one line per epoch
                                  callbacks=callback,               # keras.callbacks.Callback instances to apply during training
                                  validation_data=valGenerator,     # generator or tuple on which to evaluate the loss and any model metrics at the end of each epoch
                                  validation_steps=
                                  valGenerator.samples//nBatches,   # number of steps (batches of samples) to yield from validation_data generator before stopping at the end of every epoch
                                  class_weight=classWeights,                # optional dictionary mapping class indices (integers) to a weight (float) value, used for weighting the loss function
                                  max_queue_size=10,                # maximum size for the generator queue
                                  workers=1,                        # maximum number of processes to spin up when using process-based threading
                                  use_multiprocessing=False,        # whether to use process-based threading
                                  shuffle=True,                     # whether to shuffle the order of the batches at the beginning of each epoch
                                  initial_epoch=0)   

Характеристики моей машины:

CPU : 2xXeon E5-2260 2.6 GHz
Cores: 10
Graphic card: Titan X, Maxwell, GM200
RAM: 128 GB
HDD: 4TB
SSD: 512 GB

1 Ответ

6 голосов
/ 16 апреля 2019

Q_0:

Вопрос. Относится ли это к тому, сколько пакетов готовится на процессоре?Как это связано с работниками?Как определить его оптимально?

По опубликованной вами ссылке вы можете узнать, что ваш ЦП продолжает создавать пакеты до тех пор, пока очередь не достигнет максимального размера очереди или не достигнет остановки.Вы хотите, чтобы пакеты были готовы для того, чтобы ваш GPU «забрал», чтобы GPU не приходилось ждать процессора.Идеальным значением для размера очереди было бы сделать его достаточно большим, чтобы ваш графический процессор всегда работал на максимуме и никогда не ждал, пока центральный процессор подготовит новые пакеты.

Q_1:

Вопрос: Как узнать, сколько пакетов мой процессор может / должен генерировать параллельно?

Если вы видите, что вашGPU бездействует и ждет пакетов, попробуйте увеличить количество рабочих и, возможно, также размер очереди.

Q_2:

Должен ли я установить для этого параметра значение true, если ясменить работников?Относится ли это к использованию процессора?

Здесь - это практический анализ того, что происходит, когда вы устанавливаете его на True или False. Здесь - это рекомендация установить False для предотвращения замерзания (в моей настройке True работает нормально без замораживания).Возможно, кто-то еще может улучшить наше понимание темы.

В итоге:

Старайтесь не выполнять последовательную настройку, попробуйте включить ЦП для предоставления достаточного количества данных для графического процессора.

Также: Вы могли бы (должны?) Создать несколько вопросов в следующий раз, чтобы на них было легче ответить.

...