Я тренирую авто-кодер на 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 выборок, а не уменьшается дальше.
Одно из предположений связано с тем, что графический процессор заполняется и не может правильно распараллеливаться, но яне удалось найти ни одного такого комментария в Интернете.