Widziałem dyskusje na temat „narzutu” GPU, a dla „małych” sieci trening może być szybszy na CPU (lub sieci CPU) niż na GPU.
Co oznacza „mały”?
Na przykład, czy jednowarstwowa MLP ze 100 ukrytymi jednostkami byłaby „mała”?
Czy nasza definicja „małej” zmienia się dla architektur cyklicznych?
Czy są jakieś inne kryteria, które należy wziąć pod uwagę przy podejmowaniu decyzji, czy trenować na CPU czy GPU?
EDYCJA 1:
Właśnie znalazłem wpis na blogu (być może nieaktualny? Pochodzi z 2014 r.):
„... Większość kart sieciowych działa tylko z pamięcią zarejestrowaną w CPU, więc transfer GPU do GPU między dwoma węzłami wyglądałby tak: GPU 1 do CPU 1 do karty sieciowej 1 do karty sieciowej 2 do procesora 2 do GPU 2. Oznacza to, że jeśli wybierzesz wolną kartę sieciową, może nie być przyspieszeń na jednym komputerze. Nawet w przypadku szybkich kart sieciowych, jeśli klaster jest duży, nie dostaje się nawet przyspieszeń z GPU w porównaniu do procesorów, ponieważ procesory graficzne po prostu działają zbyt szybko, aby karty sieciowe nadążały za nimi.
To jest powód, dla którego wiele dużych firm, takich jak Google i Microsoft, korzysta z procesorów zamiast klastrów GPU do szkolenia swoich dużych sieci neuronowych. „
W pewnym momencie, zgodnie z tym postem, użycie procesorów mogło być szybsze. Czy nadal tak jest?
EDYCJA 2: Tak, ten wpis na blogu może być bardzo nieaktualny, ponieważ:
Teraz wydaje się, że procesory graficzne w węźle są połączone za pośrednictwem magistrali PCIe, więc komunikacja może odbywać się z prędkością około 6 GiB / s. (Na przykład: https://www.youtube.com/watch?v=el1iSlP1uOs , około 35 minut). Mówca sugeruje, że jest to szybsze niż przejście z GPU1 na CPU na GPU2. Oznaczałoby to, że karta sieciowa nie stanowi już wąskiego gardła.