Scalability
Skalierbarkeit bezeichnet die Fähigkeit eines Systems, durch zusätzliche Ressourcen mehr Daten, Nutzer oder Rechenleistung zu bewältigen. Behandelt horizontale und vertikale Skalierung, das amdhalsche Gesetz und KI mit mehreren GPUs.
Skalierbarkeit ist die Fähigkeit eines Systems, eine wachsende Arbeitslast – etwa mehr Daten, Nutzer, Anfragen oder ein größeres Modell – durch Hinzufügen von Ressourcen zu bewältigen und dabei Leistung sowie Kosten pro Arbeitseinheit auf einem akzeptablen Niveau zu halten. Ein System ist gut skalierbar, wenn sich die Arbeitsleistung durch eine Verdopplung der Hardware nahezu verdoppelt. Es ist schlecht skalierbar, wenn zusätzliche Rechner die meiste Zeit aufeinander warten. In der künstlichen Intelligenz spielt Skalierbarkeit an drei Stellen eine Rolle: bei Datenpipelines, die Big Data aufnehmen und vorverarbeiten müssen, bei Trainingsläufen, die sich auf viele Beschleuniger verteilen, und bei Inferenzdiensten, die mehr Anfragen beantworten müssen, ohne die Inferenzlatenz zu erhöhen.
Vertikale und horizontale Skalierung#
Bei der vertikalen Skalierung, auch Skalierung nach oben genannt, wird eine Arbeitslast auf einen leistungsstärkeren Rechner verlagert: mit mehr CPU-Kernen, mehr RAM oder einer GPU mit mehr Speicher. Dafür sind keine Codeänderungen nötig. Die Skalierung endet jedoch bei der größten verfügbaren Maschine und schafft einen einzelnen Ausfallpunkt. Bei der horizontalen Skalierung, auch Skalierung nach außen genannt, werden weitere Rechner hinzugefügt und die Arbeit auf sie verteilt. Hier gibt es keine feste Obergrenze, aber die Software muss die Arbeit aufteilen, die Last verteilen und Ergebnisse koordinieren können. Web- und Inferenzdienste lassen sich leicht horizontal skalieren, wenn sie zustandslos sind: Sitzungen und Daten werden in gemeinsam genutzten Speichern abgelegt, sodass jede Replik jede Anfrage beantworten kann. Datenbanken werden horizontal skaliert, indem ihre Daten anhand von Schlüsseln auf verschiedene Rechner verteilt werden.
Cloud-Plattformen automatisieren die horizontale Skalierung. In Kubernetes berechnet der Horizontal Pod Autoscaler die Anzahl der Replikate anhand der aktuellen Replikate multipliziert mit dem Verhältnis des beobachteten Messwerts zu seinem Zielwert, aufgerundet: Bei vier Replikaten mit durchschnittlich 90 % CPU-Auslastung und einem Zielwert von 60 % werden daraus sechs. Diese Automatisierung bezeichnet Cloud Computing als Elastizität. Serverless Computing erweitert sie so, dass bei ausbleibendem Datenverkehr auf null Replikate herunterskaliert wird.
Grenzen der Skalierung#
Jeder parallel ausgeführte Auftrag enthält einen Teil, der nicht aufgeteilt werden kann, etwa das Einlesen des nächsten Batches, die Synchronisierung von Ergebnissen oder das Schreiben eines Checkpoints. Gene Amdahl zeigte 1967, dass dieser serielle Anteil den Geschwindigkeitszuwachs unabhängig von der Anzahl zusätzlicher Prozessoren begrenzt. Dieses Ergebnis wird heute als Amdahlsches Gesetz bezeichnet:
# 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")Wenn 95 % der Arbeit parallel ausgeführt werden können, erreichen 8 Worker eine Beschleunigung um den Faktor 5,9 bei einer Effizienz von 74 %, 64 Worker den Faktor 15,4 bei 24 % und 512 Worker den Faktor 19,3 bei 4 %. Keine Anzahl von Workern kann den Faktor 20 übersteigen. John Gustafson wies 1988 darauf hin, dass Nutzer in der Praxis gemeinsam mit der Maschine die Problemgröße erhöhen. Dadurch wächst der parallel ausführbare Teil und der serielle Anteil schrumpft. Die Messung der Beschleunigung bei einem festgelegten Problem heißt starke Skalierung. Wird das Problem zusammen mit der Hardware vergrößert, spricht man von schwacher Skalierung – dem Betriebsmodus großer Trainingsläufe. Kommunikation setzt eine weitere Grenze: Jede zusätzliche GPU beim datenparallelen Training muss bei jedem Schritt Gradienten mit den anderen GPUs austauschen. Daher bestimmt oft die Netzwerkbandbreite, wie weit sich ein Auftrag skalieren lässt.
Skalierung von Training und Inferenz#
Verteiltes Training wählt die Parallelisierungsstrategie danach aus, ob das Modell auf ein einzelnes Gerät passt. Bei der Datenparallelisierung hält jede GPU eine vollständige Kopie des Modells, verarbeitet ihren eigenen Anteil jedes Batches und mittelt die Gradienten mit den anderen GPUs über eine All-Reduce-Operation ab – wie bei PyTorch DistributedDataParallel. Modelle, die zu groß für eine GPU sind, werden mithilfe vollständig aufgeteilten datenparallelen Trainings, Tensorparallelisierung oder Pipeline-Parallelisierung auf mehrere GPUs verteilt. Durch Gradientenakkumulation lassen sich auch auf weniger Geräten große effektive Batchgrößen erzielen.
Ultralytics YOLO verwendet Datenparallelismus für das Training mit mehreren GPUs: Die Übergabe von device=[0, 1] startet über torch.distributed.run Worker-Prozesse mit DistributedDataParallel und teilt den Batch gleichmäßig auf. Mit batch=64 erhalten dadurch zwei GPUs jeweils 32 Bilder pro Schritt.
Inferenz lässt sich anders skalieren, da jede Anfrage klein und unabhängig ist. Die Gruppierung von Anfragen zu Batches steigert GPU-Auslastung und Durchsatz bei geringen Kosten für die Latenz. Kontinuierliches Batching erzielt denselben Effekt bei der Token-für-Token-Generierung mit LLMs. Systeme für die Modellbereitstellung fügen bei zunehmendem Datenverkehr hinter einem Load-Balancer weitere Replikate hinzu. Modellquantisierung und Pruning senken die Kosten pro Replikat, sodass dieselbe Hardware mehr Anfragen bewältigt. Edge-KI skaliert, indem die Inferenz auf Tausende Geräte statt auf ein einziges Rechenzentrum verteilt wird.
Skalierbarkeit und verwandte Begriffe#
- Leistung: Wie schnell oder genau ein System bei einer bestimmten Auslastung ist, gemessen an Latenz, Durchsatz oder Genauigkeit. Skalierbarkeit beschreibt, wie sich diese Werte bei steigender Auslastung und wachsenden Ressourcen entwickeln.
- Elastizität: Ressourcen werden automatisch hinzugefügt und entfernt, wenn sich die Nachfrage im Tagesverlauf ändert. Meist werden dabei Replikate eines horizontal skalierten Dienstes hinzugefügt oder entfernt.
- Skalierungsgesetze: Empirische Zusammenhänge zwischen dem Verlust eines Modells und seinen Parametern, Trainingsdaten und Rechenressourcen. Sie sagen die Modellqualität voraus. Die Skalierbarkeit des Systems bestimmt, ob sich die benötigten Rechenressourcen effizient einsetzen lassen.










