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.
la source
Réponses:
Contrairement à certaines des autres réponses, je déconseille fortement de toujours s'entraîner sur des GPU sans y réfléchir. Cela est dû à l'utilisation de méthodes d'apprentissage approfondi sur les images et les textes, où les données sont très riches (par exemple, beaucoup de pixels = beaucoup de variables) et le modèle a de même des millions de paramètres. Pour d'autres domaines, cela pourrait ne pas être le cas.
Oui, c'est vraiment très petit par rapport aux normes modernes. À moins que vous n'ayez un GPU parfaitement adapté à la formation (par exemple NVIDIA 1080 ou NVIDIA Titan), je ne serais pas surpris de constater que votre CPU était plus rapide.
Notez que la complexité de votre réseau de neurones dépend également de votre nombre de caractéristiques d'entrée, et pas seulement du nombre d'unités dans votre couche cachée. Si votre couche cachée a 100 unités et que chaque observation de votre jeu de données a 4 entités en entrée, alors votre réseau est minuscule (~ 400 paramètres). Si chaque observation a à la place des fonctionnalités d'entrée 1M comme dans certains contextes médicaux / biotechnologiques, alors votre réseau est assez grand en termes de nombre de paramètres. Pour le reste de ma réponse, je suppose que vous avez assez peu de fonctionnalités d'entrée pr. observation.
Un bon exemple que j'ai trouvé de comparer les performances du CPU et du GPU était quand j'ai formé un robot de poker en utilisant l'apprentissage par renforcement. Pour l'apprentissage par renforcement, vous ne voulez souvent pas autant de couches dans votre réseau neuronal et nous avons constaté que nous n'avions besoin que de quelques couches avec peu de paramètres. De plus, le nombre de fonctions d'entrée était assez faible. Au départ, je me suis entraîné sur un GPU (NVIDIA Titan), mais cela prenait beaucoup de temps car l'apprentissage par renforcement nécessite beaucoup d'itérations. Heureusement, j'ai trouvé que la formation sur mon processeur a rendu ma formation 10 fois plus rapide! C'est juste pour dire que les processeurs peuvent parfois être meilleurs pour la formation.
Il est important de noter que tandis que sur un GPU, vous voudrez toujours remplir toute la mémoire du GPU en augmentant la taille de votre lot, ce n'est pas le cas sur le CPU. Sur le CPU, une augmentation de la taille du lot augmentera le temps pr. lot. Par conséquent, s'il est important pour vous d'avoir une très grande taille de lot (par exemple en raison d'un signal très bruyant), il peut être avantageux d'utiliser un GPU. Je n'ai pas vécu cela dans la pratique cependant et normalement de petites tailles de lot sont préférées.
la source
Le CPU est le gestionnaire de la branche, il peut faire un peu de tout, mais il n'est pas très bon sauf pour déléguer des tâches. Cependant, le GPU est un mathématicien dédié qui se cache dans votre machine. Si vous effectuez des processus mathématiques lourds, vous devez utiliser votre GPU. Toujours.
Si vous utilisez un langage de programmation populaire pour l'apprentissage automatique tel que python ou MATLAB, il s'agit d'une ligne de code pour indiquer à votre ordinateur que vous souhaitez que les opérations s'exécutent sur votre GPU.
Vous devez également vous assurer d'utiliser tous les cœurs de votre machine. Cela signifie utiliser l'informatique parallèle. Surtout pour les réseaux de neurones où les opérations peuvent être effectuées indépendamment, cela augmentera considérablement votre vitesse.
la source
Je vais d'abord faire référence à quelques citations de questions similaires:
Donc, si vous lisez ces questions, vous verrez qu'elles conseillent d'utiliser le GPU quel que soit le cas; cela apportera toujours une certaine amélioration.
La raison pour laquelle vous avez peut-être lu que les `` petits '' réseaux devraient être formés avec le CPU, c'est parce que la mise en œuvre de la formation GPU pour un petit réseau peut prendre plus de temps que la simple formation avec le CPU - cela ne signifie pas que le GPU sera plus lent.
Un réseau de 100 unités cachées est un peu petit , je l'appellerais un petit réseau par rapport aux grands réseaux profonds. Les architectures récurrentes ont (pour la plupart) plus de synapses que les réseaux à action directe, donc un RNN à 100 unités cachées est «plus grand» qu'un FFN à 100 unités cachées.
la source