Обучение MXNet с большим размером пакета и небольшим количеством графических процессоров - PullRequest
0 голосов
/ 31 декабря 2018

При обучении MXNet, если размер пакета велик (скажем, 128), а количество графических процессоров невелико (скажем, 2), и каждый графический процессор может обрабатывать только несколько выборок в каждой итерации (скажем, 16).По умолчанию максимальный размер пакета в этой конфигурации составляет 16 * 2 = 32.

Теоретически мы можем выполнить 4 итерации перед обновлением весов, чтобы сделать эффективный размер пакета 128. Возможно ли это с MXNet?

1 Ответ

0 голосов
/ 16 января 2019

Редактирование этого ответа с более рациональным подходом (с точки зрения памяти).Вы должны настроить каждый параметр для накопления градиентов, выполнить 4 прохода вперед, запустить назад, а затем вручную обнулить градиенты.

Согласно https://discuss.mxnet.io/t/aggregate-gradients-manually-over-n-batches/504/2

"Это очень просто сделатьс Gluon. Вам нужно установить grad_req в вашей сети экземпляров параметров на «добавление» и вручную установить градиент на ноль, используя zero_grad () после каждого Trainer.step () (см. здесь ). Чтобы установить grad_reqдля добавления:

for p in net.collect_params().values():
    p.grad_req = 'add'

"И аналогичным образом вызовите zero_grad () для каждого параметра после вызова Trainer.step ().Не забудьте изменить аргумент batch_size функции trainer.step () соответствующим образом. "

Vishaal

...