El entrenamiento distribuido en hardware heterogéneo se topa con un cuello de botella fundamental que la mayoría de los frameworks finge que no existe: la variación en la velocidad de los nodos.

El problema real no es simplemente que «los nodos lentos tardan más», sino que un solo nodo lento se convierte en una barrera de sincronización que deja inactivo a todo el clúster. Tus GPU rápidas se quedan ahí consumiendo energía mientras esperan a que algún nodo limitado por la CPU termine de calcular sus gradientes.

Este es el problema de los nodos rezagados a gran escala. En el entrenamiento síncrono, tu velocidad depende de la del trabajador más lento. Si tienes una combinación de A100, V100 y cualquier hardware de repuesto que hayas podido reunir, el rendimiento de tu entrenamiento cae hasta el mínimo común denominador.

La mayoría de los frameworks de entrenamiento distribuido (PyTorch DDP, Horovox) asumen que los clústeres son homogéneos porque eso es lo que tienen los grandes laboratorios. Pero en el mundo real, especialmente en las redes de computación descentralizadas, la heterogeneidad del hardware es la norma, no la excepción.

El desperdicio de recursos de cómputo es brutal: si tu nodo más lento tarda el doble, todos los demás nodos están inactivos el 50 % del tiempo. Si esto ocurre en decenas de nodos, estás gastando dinero en recursos de cómputo que no generan ninguna actualización de gradientes.

Hay soluciones (SGD asíncrono, gestión de la obsolescencia de gradientes, procesamiento por lotes adaptativo), pero introducen problemas de convergencia y complejidad de implementación. El equilibrio entre la precisión de la sincronización y la eficiencia asíncrona sigue siendo un problema de investigación abierto.