Scalability
La escalabilidad es la capacidad de un sistema para gestionar más datos, usuarios o recursos de computación mediante la incorporación de recursos. Incluye escalado vertical y horizontal, la ley de Amdahl y la IA con varias GPU.
La escalabilidad es la capacidad de un sistema para gestionar una cantidad de trabajo creciente —como más datos, usuarios, solicitudes o un modelo de mayor tamaño— añadiendo recursos y manteniendo un rendimiento y un coste por unidad de trabajo aceptables. Un sistema escala bien cuando duplicar el hardware casi duplica el trabajo que puede realizar, y escala mal cuando las máquinas añadidas pasan el tiempo esperándose unas a otras. En la inteligencia artificial, la escalabilidad se aplica en tres puntos: las canalizaciones de datos, que deben ingerir y preprocesar macrodatos; los trabajos de entrenamiento, que se distribuyen entre muchos aceleradores; y los servicios de inferencia, que deben responder a más solicitudes sin aumentar la latencia de inferencia.
Escalado vertical y horizontal#
El escalado vertical, o ampliación, traslada una carga de trabajo a una máquina más potente: más núcleos de CPU, más RAM o una GPU con más memoria. No requiere cambiar el código, pero está limitado por la máquina más grande disponible y deja un único punto de fallo. El escalado horizontal, o ampliación en paralelo, añade más máquinas y distribuye el trabajo entre ellas; no tiene un límite fijo, pero requiere que el software divida el trabajo, equilibre la carga y coordine los resultados. Los servicios web y de inferencia se amplían fácilmente en horizontal si no tienen estado: mantienen las sesiones y los datos en almacenes compartidos para que cualquier réplica pueda responder a cualquier solicitud. Las bases de datos se amplían en horizontal mediante fragmentación, que divide sus datos por clave entre distintas máquinas.
Las plataformas en la nube automatizan el escalado horizontal. En Kubernetes, el Horizontal Pod Autoscaler calcula el número de réplicas multiplicando las réplicas actuales por la proporción entre la métrica observada y el valor objetivo, y redondeando hacia arriba: 4 réplicas con una CPU media del 90 % frente a un objetivo del 60 % pasan a ser 6. A esto es a lo que la computación en la nube llama elasticidad, y la computación sin servidor amplía esta capacidad hasta llegar a cero réplicas cuando cesa el tráfico.
Límites del escalado#
Todo trabajo paralelo contiene tareas que no se pueden dividir, como leer el siguiente lote, sincronizar resultados o escribir un checkpoint. En 1967, Gene Amdahl demostró que esta fracción secuencial limita la aceleración, por muchos procesadores que se añadan; este resultado se conoce hoy como ley de Amdahl:
# Amdahl's law: speedup on n workers when a fraction p of the work runs in parallel
p = 0.95 # parallel fraction; the other 5% runs on one worker
for n in (1, 8, 64, 512):
speedup = 1 / ((1 - p) + p / n)
efficiency = speedup / n # share of the added hardware doing useful work
print(f"{n:>4} workers: {speedup:5.1f}x speedup, {efficiency:4.0%} efficiency")
print(f"Limit with unlimited workers: {1 / (1 - p):.0f}x")Si el 95 % del trabajo se puede paralelizar, 8 trabajadores consiguen una aceleración de 5,9x con una eficiencia del 74 %; 64 trabajadores, de 15,4x con una eficiencia del 24 %; y 512 trabajadores, de 19,3x con una eficiencia del 4 %. Ningún número de trabajadores puede superar una aceleración de 20x. En 1988, John Gustafson señaló que, en la práctica, los usuarios amplían el problema junto con la máquina, de modo que aumenta la parte paralela y disminuye la proporción secuencial. Medir la aceleración con un problema fijo se denomina escalado fuerte; ampliar el problema junto con el hardware se denomina escalado débil, el régimen en el que se ejecutan los entrenamientos a gran escala. La comunicación impone otro límite: cada GPU añadida al entrenamiento en paralelo de datos debe intercambiar gradientes con las demás en cada paso, por lo que el ancho de banda de la red suele determinar hasta dónde puede escalar un trabajo.
Escalado del entrenamiento y la inferencia#
El entrenamiento distribuido elige una estrategia de paralelismo según si el modelo cabe en un único dispositivo. En el paralelismo de datos, cada GPU contiene una copia completa del modelo, procesa su propia parte de cada lote y promedia los gradientes con las demás mediante una operación all-reduce, como en DistributedDataParallel de PyTorch. Los modelos demasiado grandes para una GPU se dividen mediante paralelismo de datos totalmente fragmentado, paralelismo tensorial o paralelismo de canalización, y la acumulación de gradientes permite alcanzar tamaños de lote efectivos grandes con menos dispositivos.
Ultralytics YOLO usa el paralelismo de datos para el entrenamiento con varias GPU: al pasar device=[0, 1], se inician procesos de trabajo DistributedDataParallel mediante torch.distributed.run y se divide el lote de forma equitativa, de modo que batch=64 en dos GPU da 32 imágenes por paso a cada GPU.
La inferencia se escala de otra forma, porque cada solicitud es pequeña e independiente. Agrupar solicitudes en lotes aumenta la utilización de la GPU y el rendimiento con un pequeño coste de latencia; el batching continuo hace lo mismo para la generación de LLM token a token, y los sistemas de serving de modelos añaden réplicas detrás de un equilibrador de carga a medida que aumenta el tráfico. La cuantización de modelos y la poda abaratan cada réplica, de modo que el mismo hardware atiende más solicitudes; la IA en el edge escala al distribuir la inferencia entre miles de dispositivos en lugar de un único centro de datos.
Escalabilidad y términos relacionados#
- Rendimiento: La velocidad o precisión de un sistema con una carga determinada, medidas mediante latencia, rendimiento o precisión. La escalabilidad describe cómo se mantienen esos valores al aumentar la carga y los recursos.
- Elasticidad: Añadir y retirar recursos automáticamente a medida que cambia la demanda durante el día, casi siempre añadiendo y retirando réplicas de un servicio escalado horizontalmente.
- Leyes de escalado: Relaciones empíricas entre la pérdida de un modelo y sus parámetros, datos de entrenamiento y capacidad de cálculo. Predicen la calidad del modelo, y la escalabilidad del sistema determina si se puede aprovechar eficientemente la capacidad de cálculo que requieren.










