Ich habe Diskussionen über den 'Overhead' einer GPU gesehen, und dass es für 'kleine' Netzwerke möglicherweise schneller ist, auf einer CPU (oder einem Netzwerk von CPUs) zu trainieren als auf einer GPU.
Was ist mit "klein" gemeint?
Wäre beispielsweise ein einschichtiger MLP mit 100 versteckten Einheiten "klein"?
Ändert sich unsere Definition von "klein" für wiederkehrende Architekturen?
Gibt es andere Kriterien, die bei der Entscheidung, ob auf CPU oder GPU trainiert werden soll, berücksichtigt werden sollten?
EDIT 1:
Ich habe gerade einen Blog-Beitrag gefunden (möglicherweise veraltet? Es ist aus dem Jahr 2014):
"... Die meisten Netzwerkkarten funktionieren nur mit Arbeitsspeicher, der bei der CPU registriert ist, und daher würde die GPU-zu-GPU-Übertragung zwischen zwei Knoten folgendermaßen aussehen: GPU 1 zu CPU 1 zu Netzwerkkarte 1 zu Netzwerkkarte 2 zu CPU 2 bis GPU 2. Dies bedeutet, wenn man eine langsame Netzwerkkarte auswählt, kann es zu keinen Beschleunigungen über einen einzelnen Computer kommen. Selbst bei schnellen Netzwerkkarten, wenn der Cluster groß ist, werden im Vergleich nicht einmal Beschleunigungen von GPUs erzielt für CPUs, da die GPUs einfach zu schnell arbeiten, als dass die Netzwerkkarten mithalten könnten.
Dies ist der Grund, warum viele große Unternehmen wie Google und Microsoft CPU-Cluster anstelle von GPU-Clustern verwenden, um ihre großen neuronalen Netze zu trainieren. "
Irgendwann hätte es laut diesem Beitrag also schneller gehen können, CPUs zu verwenden. Ist das noch der Fall?
EDIT 2: Ja, dieser Blog-Beitrag ist möglicherweise veraltet, weil:
Nun scheinen die GPUs innerhalb eines Knotens über einen PCIe-Bus verbunden zu sein, sodass die Kommunikation mit etwa 6 Gb / s erfolgen kann. (Zum Beispiel: https://www.youtube.com/watch?v=el1iSlP1uOs , ungefähr 35 Minuten in). Der Lautsprecher impliziert, dass dies schneller ist als der Übergang von GPU1 zu CPU zu GPU2. Dies würde bedeuten, dass die Netzwerkkarte nicht länger der Engpass ist.