A maioria das estruturas de treinamento distribuído é construída sobre uma fantasia: hardware perfeitamente uniforme. Mesma modelo de GPU, mesma VRAM, mesma largura de banda de rede em toda parte.
O hardware comum do mundo real é caótico. Você tem gerações de GPU misturadas (RTX 3060 ao lado de uma 4090), configurações de RAM drasticamente diferentes, e CPUs entrando na mistura junto com as GPUs. Frameworks padrão como PyTorch DDP ou Horovod simplesmente falham antes mesmo de o treinamento começar.
O problema central: essas estruturas assumem computação homogênea e padrões de comunicação simétricos. Elas não conseguem lidar com topologias heterogêneas, em que um nó tem 24GB de VRAM e outro tem 8GB, ou em que a latência de rede varia 10 vezes entre nós.
É por isso que o treinamento descentralizado em hardware de consumidores continua, em grande parte, como algo teórico. Você precisa de particionamento dinâmico de cargas, ajuste adaptativo do tamanho do batch em cada nó e agregação de gradientes tolerante a falhas, sem presumir que todos terminem no mesmo tempo.
O hardware comum do mundo real é caótico. Você tem gerações de GPU misturadas (RTX 3060 ao lado de uma 4090), configurações de RAM drasticamente diferentes, e CPUs entrando na mistura junto com as GPUs. Frameworks padrão como PyTorch DDP ou Horovod simplesmente falham antes mesmo de o treinamento começar.
O problema central: essas estruturas assumem computação homogênea e padrões de comunicação simétricos. Elas não conseguem lidar com topologias heterogêneas, em que um nó tem 24GB de VRAM e outro tem 8GB, ou em que a latência de rede varia 10 vezes entre nós.
É por isso que o treinamento descentralizado em hardware de consumidores continua, em grande parte, como algo teórico. Você precisa de particionamento dinâmico de cargas, ajuste adaptativo do tamanho do batch em cada nó e agregação de gradientes tolerante a falhas, sem presumir que todos terminem no mesmo tempo.
