J'ai vu des discussions sur la «surcharge» d'un GPU, et que pour les «petits» réseaux, il peut en fait être plus rapide de s'entraîner sur un CPU (ou réseau de CPU) qu'un GPU.
Qu'entend-on par «petit»?
Par exemple, un MLP monocouche avec 100 unités cachées serait-il «petit»?
Notre définition de «petit» change-t-elle pour les architectures récurrentes?
Y a-t-il d'autres critères à prendre en compte pour décider de s'entraîner sur CPU ou GPU?
EDIT 1:
Je viens de trouver un article de blog (peut-être obsolète? C'est de 2014):
"... La plupart des cartes réseau ne fonctionnent qu'avec de la mémoire enregistrée auprès du processeur et le transfert GPU vers GPU entre deux nœuds serait ainsi: GPU 1 vers CPU 1 vers carte réseau 1 vers carte réseau 2 vers CPU 2 vers GPU 2. Cela signifie que si l'on choisit une carte réseau lente, il peut ne pas y avoir d'accélération sur un seul ordinateur. Même avec des cartes réseau rapides, si le cluster est volumineux, on n'obtient même pas d'accélération des GPU par rapport aux processeurs car les GPU fonctionnent tout simplement trop vite pour que les cartes réseau les suivent.
C'est la raison pour laquelle de nombreuses grandes entreprises comme Google et Microsoft utilisent des grappes CPU plutôt que GPU pour former leurs grands réseaux de neurones. "
Donc, à un moment donné, selon cet article, il aurait pu être plus rapide d'utiliser des processeurs. Est-ce toujours le cas?
EDIT 2: Oui, cet article de blog peut très bien être obsolète car:
Il semble maintenant que les GPU au sein d'un nœud soient connectés via un bus PCIe, de sorte que la communication peut se produire à environ 6 Go / s. (Par exemple: https://www.youtube.com/watch?v=el1iSlP1uOs , environ 35 minutes). L'orateur implique que cela est plus rapide que de passer de GPU1 à CPU à GPU2. Cela signifierait que la carte réseau n'est plus le goulot d'étranglement.