Почему размер пакета выделяется в GPU?

#tensorflow #keras #gpu #google-colaboratory #keras-layer

#tensorflow #keras #графический процессор #google-colaboratory #keras-слой

Вопрос:

Учитывая модель Keras (на Colab), которая имеет форму ввода (None, 256, 256,3), а batch_size равен 16, тогда память, выделенная для этой формы ввода, равна 16*256*256*3* тип данных (тип данных = 2,4,8 в зависимости от float16 / 32 / 64). Вот как это работает. Мое замешательство заключается в том, что для данного batch_size (=16) 1*256*256*3 можно было бы выделить и передать 16 изображений одно за другим, а конечный градиент можно было бы усреднить.

1) Итак, зависит ли распределение от размера пакета, чтобы вычисления «batch_size» могли выполняться параллельно и конфигурации, о которой я упоминал выше (1*256*256*3 ) будет ли сериализация и, следовательно, поражение цели GPU?

2) Будет ли такой же тип распределения выполняться на процессоре для параллельных вычислений (если ответ на 1) положительный)?

Комментарии:

1. Этот вопрос, вероятно, может помочь вам ответить на основной вопрос: пакетный градиентный спуск против стохастического градиентного спуска . Если вы действительно хотите запустить mini batch GD без ограничений памяти, вы можете сделать это с помощью пользовательского цикла обучения.

Ответ №1:

В общем, размер пакета — это то, что вам нужно настроить.

А что касается вашего запроса, размер пакета зависит от данных, и при использовании пакетов вы обычно запускаете объект generator, который загружает данные в пакетах, выполняет GD, а затем переходит к следующему.

Предпочтительнее использовать приличный пакетный градиент, поскольку он сходится быстрее, чем GD

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

Да, вы можете использовать параллельные вычисления для обучения больших пакетов, но в целом вы делаете то же самое, поскольку вы фактически вычисляете целые пакеты каждый раз, когда выполняете общие пакетные вычисления

Процессор должен иметь ядра, тогда да, иначе вам нужен графический процессор, поскольку вычисления требуют больших мощностей, потому что все, что вы делаете под капотом, — это работа с n-мерными матрицами, вычисление частных производных, а затем вычисление квадратичных потерь и дальнейшее обновление значений весов