Я видел дискуссии о «накладных расходах» графического процессора и о том, что для «небольших» сетей обучение на процессоре (или сети процессоров) может быть быстрее, чем на графическом процессоре.
Что означает «маленький»?
Например, будет ли «однослойный» MLP со 100 скрытыми единицами «маленьким»?
Меняется ли наше определение «малого» для рекуррентных архитектур?
Есть ли другие критерии, которые следует учитывать при принятии решения о том, тренироваться ли на CPU или GPU?
РЕДАКТИРОВАТЬ 1:
Я только что нашел сообщение в блоге (возможно, устаревшее? Это с 2014 года):
«... Большинство сетевых карт работают только с памятью, зарегистрированной в ЦП, поэтому передача между графическим процессором и графическим процессором между двумя узлами будет выглядеть следующим образом: графический процессор 1 - процессор 1 - сетевая карта 1 - сетевая карта 2 - процессор 2 к графическому процессору 2. Это означает, что если выбрать медленную сетевую карту, то на одном компьютере не может быть ускорений. Даже с быстрыми сетевыми картами, если кластер большой, он даже не получает ускорений от графических процессоров по сравнению процессорам, поскольку графические процессоры работают слишком быстро, чтобы сетевые карты не отставали от них.
По этой причине многие крупные компании, такие как Google и Microsoft, используют ЦП, а не кластеры ГП для обучения своих больших нейронных сетей. "
Так что в какой-то момент, согласно этому посту, было бы быстрее использовать процессоры. Это все еще так?
РЕДАКТИРОВАТЬ 2: Да, это сообщение в блоге вполне может быть устаревшим, потому что:
Теперь кажется, что графические процессоры в узле связаны через шину PCIe, поэтому связь может происходить со скоростью около 6 ГБ / с. (Например: https://www.youtube.com/watch?v=el1iSlP1uOs , около 35 минут). Динамик подразумевает, что это быстрее, чем переход от GPU1 к CPU к GPU2. Это означало бы, что сетевая карта больше не является узким местом.