Scalability
La scalabilità è la capacità di un sistema di gestire più dati, utenti o capacità di calcolo aggiungendo risorse. Include scalabilità verticale e orizzontale, legge di Amdahl e IA multi-GPU.
La scalabilità è la capacità di un sistema di gestire una quantità di lavoro crescente, ad esempio più dati, utenti, richieste o un modello più grande, aggiungendo risorse e mantenendo prestazioni e costi per unità di lavoro accettabili. Un sistema scala bene quando raddoppiando l'hardware quasi raddoppia il lavoro che può svolgere; scala male quando le macchine aggiunte passano il tempo ad aspettarsi a vicenda. Nell'intelligenza artificiale, la scalabilità riguarda tre ambiti: pipeline di dati che devono acquisire big data e preelaborarli, lavori di addestramento distribuiti su molti acceleratori e servizi di inferenza che devono rispondere a più richieste senza aumentare la latenza di inferenza.
Scalabilità verticale e orizzontale#
La scalabilità verticale, o scalabilità verso l'alto, trasferisce un carico di lavoro su una macchina più potente: più core CPU, più RAM o una GPU con più memoria. Non richiede modifiche al codice, ma si ferma alla macchina più potente disponibile e lascia un singolo punto di guasto. La scalabilità orizzontale, o scalabilità verso l'esterno, aggiunge macchine e suddivide il lavoro tra esse; non ha un limite fisso, ma richiede che il software suddivida il lavoro, bilanci il carico e coordini i risultati. I servizi web e di inferenza scalano facilmente verso l'esterno quando sono senza stato: mantengono sessioni e dati in archivi condivisi, così qualsiasi replica può rispondere a qualsiasi richiesta; i database scalano verso l'esterno tramite lo sharding, distribuendo i dati per chiave tra le macchine.
Le piattaforme cloud automatizzano la scalabilità orizzontale. Su Kubernetes, l'Horizontal Pod Autoscaler calcola il numero di repliche moltiplicando quelle attuali per il rapporto tra la metrica osservata e il valore obiettivo, e arrotonda per eccesso: 4 repliche con un utilizzo medio della CPU del 90% a fronte di un obiettivo del 60% diventano 6. È questa automazione che il cloud computing definisce elasticità; il serverless computing la estende fino a zero repliche quando il traffico si interrompe.
Limiti della scalabilità#
Ogni lavoro parallelo contiene una parte non suddivisibile, come leggere il batch successivo, sincronizzare i risultati o scrivere un checkpoint. Nel 1967 Gene Amdahl dimostrò che questa frazione seriale limita l'accelerazione, indipendentemente dal numero di processori aggiunti: un risultato oggi noto come legge di 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")Con il 95% del lavoro parallelizzabile, 8 worker offrono un'accelerazione di 5,9x con un'efficienza del 74%; 64 worker offrono 15,4x con un'efficienza del 24%; 512 worker offrono 19,3x con un'efficienza del 4%; nessun numero di worker può superare 20x. Nel 1988 John Gustafson osservò che gli utenti reali aumentano le dimensioni del problema insieme a quelle della macchina, facendo crescere la parte parallela e riducendo la quota seriale. Misurare l'accelerazione su un problema fisso si chiama strong scaling; aumentare le dimensioni del problema insieme all'hardware si chiama weak scaling ed è il regime in cui operano i grandi lavori di addestramento. La comunicazione impone un ulteriore limite: nell'addestramento parallelo sui dati ogni nuova GPU deve scambiare i gradienti con le altre a ogni passo, quindi spesso è la larghezza di banda della rete a determinare fin dove può scalare un lavoro.
Scalabilità dell'addestramento e dell'inferenza#
L'addestramento distribuito sceglie una strategia di parallelismo in base alla possibilità di eseguire il modello su un solo dispositivo. Nel parallelismo dei dati, ogni GPU contiene una copia completa del modello, elabora la propria porzione di ogni batch e calcola la media dei gradienti con le altre tramite un'operazione all-reduce, come avviene in DistributedDataParallel di PyTorch. I modelli troppo grandi per una singola GPU vengono suddivisi con il parallelismo dei dati completamente frammentato, il parallelismo dei tensori o il parallelismo a pipeline; l'accumulo dei gradienti permette di raggiungere dimensioni effettive elevate dei batch usando meno dispositivi.
Ultralytics YOLO usa il parallelismo dei dati per l'addestramento multi-GPU: passare device=[0, 1] avvia i processi worker DistributedDataParallel tramite torch.distributed.run e divide il batch equamente; di conseguenza, batch=64 su due GPU assegna 32 immagini a ogni GPU per passaggio.
L'inferenza scala in modo diverso, perché ogni richiesta è piccola e indipendente. Raggruppare le richieste in batch aumenta l'utilizzo della GPU e la capacità di elaborazione, con un lieve costo in termini di latenza; il batching continuo fa lo stesso per la generazione degli LLM token per token, mentre i sistemi di serving dei modelli aggiungono repliche dietro un bilanciatore del carico man mano che cresce il traffico. La quantizzazione dei modelli e il pruning riducono il costo di ogni replica, consentendo allo stesso hardware di servire più richieste; l'IA edge scala distribuendo l'inferenza su migliaia di dispositivi invece che in un unico data center.
Scalabilità e termini correlati#
- Prestazioni: velocità o accuratezza di un sistema a un determinato carico, misurate tramite latenza, capacità di elaborazione o accuratezza. La scalabilità descrive quanto questi valori si mantengono al crescere del carico e delle risorse.
- Elasticità: aggiungere e rimuovere risorse automaticamente quando la domanda cambia nel corso della giornata, di solito aggiungendo o rimuovendo repliche di un servizio scalato orizzontalmente.
- Leggi di scaling: relazioni empiriche tra la loss di un modello, i suoi parametri, i dati di addestramento e la capacità di calcolo. Consentono di prevedere la qualità del modello; la scalabilità del sistema determina se è possibile usare in modo efficiente la capacità di calcolo richiesta.










