Почему большие мини-партии занимают больше времени? - PullRequest
0 голосов
/ 30 апреля 2019

Я тренирую авто-кодер на MNIST и заметил, что увеличение размера пакета после 128 начинает занимать больше времени вычислений для фиксированного размера набора данных.

Я использую tenorflow-gpu и у меня GeForce GTX 1070.

Я попытался провести пару тестов на фиксированном тренировочном наборе из 5000 образцов (784 дим) и пробежал 10 эпох.Пакеты - это последовательные batch-size фрагменты из 5000 обучающих выборок, поэтому число итераций эффективно зависит от размера пакета.

Я отслеживал производительность по этим данным (потеря), время выполнения и использование памяти графическим процессором.процесса python (из вывода nvidia-smi):

5000 datapoints 10 epochs

batch size
512:       loss: 53.7472; execution took 00:00:13,787; 4281MiB
256:       loss: 48.1941; execution took 00:00:04,973; 695MiB
128:       loss: 42.7486; execution took 00:00:03,350; 439MiB
64:        loss: 40.0781; execution took 00:00:04,191; 439MiB
32:        loss: 37.7348; execution took 00:00:06,487; 441MiB
16:        loss: 36.6291; execution took 00:00:12,102; 441MiB
8:         loss: nan;     execution took 00:00:23,115; 441MiB

Когда я пробую минибатчи размером больше 512, я получаю ошибки Out Of Memory.

Я думаю, это имеет смысл для меньшихПакеты занимают больше времени для выполнения, так как будет больше последовательных обновлений для той же даты.Однако я не уверен, почему время вычисления увеличивается, когда мини-пакет превышает 128 выборок, а не уменьшается дальше.

Одно из предположений связано с тем, что графический процессор заполняется и не может правильно распараллеливаться, но яне удалось найти ни одного такого комментария в Интернете.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Хотя большие партии означают меньшее общее количество обновлений в каждой эпохе, это также означает, что обработка каждой партии займет больше времени, а увеличение размера пакета приводит к уменьшению общего количества пакетов, что также может привести к более медленной конвергенции.
Итак, как вы можете видеть, есть компромисс.Вам нужно будет найти оптимальный размер пакета для вашего набора данных.Для MNIST размер пакета обычно составляет от 50 до 150.
Я не уверен, как вы загружаете пакеты из базы данных, но при правильном использовании преимущество пакетирования в том, что вам не нужно загружать целоеданные в вашу оперативную память.Поэтому вполне естественно, что большой размер пакета приведет к ошибке нехватки памяти.

0 голосов
/ 30 апреля 2019
  • Когда вы тренируете свою модель с меньшим размером партии, ваша модель обновляется чаще, хотя и стохастически.Это помогает быстрее сходиться в каждую эпоху.Например, если вы тренируетесь на batch_size из 500, вы будете обновлять параметры вашей модели 100 раз в 1 эпоху, но если вы тренируетесь на batch_size из 50, количество обновлений в 1 эпоху будет 1000.

  • Когда вы тренируете свою модель с большим размером партии, каждое обновление становится более стабильным и менее стохастическим.

  • Когда вы тренируете свою модель с большим размером партии,он использует векторизованные вычисления на процессоре или графическом процессоре, например, с batch_size = 1 мы получаем больше обновлений, но никаких преимуществ векторизации нет.Но если вы тренируетесь с очень большим размером пакета, который превышает объем памяти, то в нем не хватает памяти.

Обычно мы балансируем количество пакетов и скорость доконвергенция.

...