He visto discusiones sobre la 'sobrecarga' de una GPU, y que para redes 'pequeñas', en realidad puede ser más rápido entrenar en una CPU (o red de CPU) que en una GPU.
¿Qué se entiende por 'pequeño'?
Por ejemplo, ¿sería un MLP de una sola capa con 100 unidades ocultas 'pequeño'?
¿Cambia nuestra definición de "pequeño" para arquitecturas recurrentes?
¿Hay algún otro criterio que deba considerarse al decidir entrenar en CPU o GPU?
EDITAR 1:
Acabo de encontrar una publicación de blog (¿posiblemente desactualizada? Es de 2014):
"... La mayoría de las tarjetas de red solo funcionan con la memoria que está registrada en la CPU, por lo que la transferencia de GPU a GPU entre dos nodos sería así: GPU 1 a CPU 1 a Tarjeta de red 1 a Tarjeta de red 2 a CPU 2 a GPU 2. Lo que esto significa es que si uno elige una tarjeta de red lenta, entonces no puede haber aceleraciones en una sola computadora. Incluso con tarjetas de red rápidas, si el clúster es grande, uno ni siquiera obtiene aceleraciones de GPU en comparación a las CPU, ya que las GPU simplemente funcionan demasiado rápido para que las tarjetas de red puedan seguirlas.
Esta es la razón por la cual muchas grandes empresas como Google y Microsoft están utilizando CPU en lugar de grupos de GPU para entrenar sus grandes redes neuronales. "
Entonces, en algún momento, según esta publicación, podría haber sido más rápido usar CPU. ¿Sigue siendo el caso?
EDIT 2: Sí, esa publicación de blog puede estar desactualizada porque:
Ahora parece que las GPU dentro de un nodo están conectadas a través del bus PCIe, por lo que la comunicación puede ocurrir a aproximadamente 6GiB / s. (Por ejemplo: https://www.youtube.com/watch?v=el1iSlP1uOs , aproximadamente 35 minutos). El orador implica que esto es más rápido que pasar de GPU1 a CPU a GPU2. Significaría que la tarjeta de red ya no es el cuello de botella.