Vi discussões sobre a sobrecarga de uma GPU e, para redes 'pequenas', pode ser mais rápido treinar em uma CPU (ou rede de CPUs) do que em uma GPU.
O que se entende por 'pequeno'?
Por exemplo, um MLP de camada única com 100 unidades ocultas seria 'pequeno'?
Nossa definição de 'pequeno' muda para arquiteturas recorrentes?
Existem outros critérios que devem ser considerados ao decidir treinar na CPU ou GPU?
EDIT 1:
Acabei de encontrar uma postagem no blog (possivelmente desatualizada? É de 2014):
"... A maioria das placas de rede funciona apenas com a memória registrada na CPU e, portanto, a transferência de GPU para GPU entre dois nós seria assim: GPU 1 para CPU 1 para placa de rede 1 para placa de rede 2 para placa de rede 2 para CPU 2 à GPU 2. O que isso significa é que, se alguém escolher uma placa de rede lenta, pode não haver acelerações em um único computador.Com placas de rede rápidas, se o cluster for grande, nem se obterá acelerações das GPUs quando comparadas às CPUs, já que as GPUs trabalham rápido demais para que as placas de rede as acompanhem.
Essa é a razão pela qual muitas grandes empresas como Google e Microsoft estão usando CPU em vez de clusters de GPU para treinar suas grandes redes neurais. "
Então, em algum momento, de acordo com este post, poderia ter sido mais rápido usar CPUs. Ainda é esse o caso?
EDIÇÃO 2: Sim, essa postagem do blog pode muito bem estar desatualizada porque:
Agora parece que as GPUs dentro de um nó estão conectadas via barramento PCIe, de modo que a comunicação pode ocorrer em cerca de 6GiB / s. (Por exemplo: https://www.youtube.com/watch?v=el1iSlP1uOs , aproximadamente 35 minutos). O alto-falante implica que isso é mais rápido do que passar da GPU1 para a CPU e para a GPU2. Isso significaria que a placa de rede não é mais o gargalo.