Big Data
I big data sono dati troppo grandi, veloci o vari per gli strumenti di una singola macchina. Tratta le tre V, MapReduce e Spark, e i dataset alla base dell'IA moderna.
I big data sono dati la cui dimensione, frequenza di arrivo o varietà di formati supera la capacità di archiviazione ed elaborazione di una singola macchina e degli strumenti di database tradizionali; per questo vengono distribuiti su cluster di macchine che li elaborano in parallelo. Nel 2001 l'analista Doug Laney di META Group ha descritto la sfida con le tre V: volume, la quantità di dati; velocità, la rapidità con cui arrivano e devono essere gestiti; varietà, la combinazione di tabelle strutturate, log, testo, immagini, audio e video. Le definizioni successive aggiungono la veridicità, cioè quanto siano affidabili i dati, e il valore. Per l'apprendimento automatico, i big data sono sia la materia prima sia una sfida ingegneristica: i modelli migliorano con più dati di addestramento e le pipeline che li raccolgono, puliscono e servono richiedono gran parte del lavoro necessario per realizzarli.
Big data nell'IA e nella visione artificiale#
Il deep learning si è sviluppato di pari passo con dataset troppo grandi per un singolo disco. ImageNet, introdotto nel 2009, è arrivato a oltre 14 milioni di immagini etichettate; le 1,28 milioni di immagini di addestramento della sua competizione a 1.000 classi hanno permesso di addestrare la rete neurale convoluzionale AlexNet, vincitrice della competizione del 2012. Il dataset SA-1B di Meta, pubblicato nel 2023 insieme al Segment Anything Model, contiene 11 milioni di immagini e 1,1 miliardi di maschere di segmentazione; Meta ha inoltre preaddestrato Llama 3 su oltre 15.000 miliardi di token di testo. Le leggi di scala spiegano perché raccolte di queste dimensioni siano efficaci: la perdita diminuisce in modo prevedibile quando dati, parametri e capacità di calcolo aumentano insieme.
Nella visione artificiale, il volume dei dati deriva da flotte di telecamere e sensori. Un singolo veicolo autonomo registra flussi di telecamere, radar e lidar per ogni ora di guida; fabbriche e negozi aggiungono migliaia di flussi video continui. La velocità è importante quando servono risultati man mano che arrivano i dati, come nell'inferenza in tempo reale su video del traffico o delle linee di produzione. La varietà comprende immagini e video, insieme ad annotazioni, metadati dei sensori e log. Più dati sono utili solo se le etichette sono accurate, quindi i grandi dataset di visione si basano sulla pulizia dei dati, sulla rimozione dei duplicati e sull'apprendimento attivo per scegliere quali nuove immagini vale la pena etichettare.
Come vengono archiviati ed elaborati i big data#
I sistemi per i big data si espandono orizzontalmente: distribuiscono dati e calcoli su molte macchine standard invece di usare un unico server più potente. L'articolo di Google del 2004 su MapReduce ha descritto il modello reso popolare dall'open source Apache Hadoop: suddividere l'input in frammenti, eseguire una funzione map in parallelo su ogni frammento sulla macchina che lo archivia e ridurre i risultati parziali a un'unica risposta. Apache Spark, avviato alla UC Berkeley nel 2009, mantiene in memoria i risultati intermedi, rendendo i processi iterativi come l'addestramento dei modelli molto più veloci rispetto a MapReduce basato su disco. I file grezzi sono solitamente archiviati nell'object storage cloud organizzato come data lake; formati colonnari come Apache Parquet consentono a una query di leggere solo le colonne necessarie, mentre piattaforme di streaming come Apache Kafka trasportano eventi ad alta velocità.
Questo esempio esegue i passaggi map e reduce su tre frammenti di etichette di immagini usando la libreria standard di Python:
from collections import Counter
from multiprocessing import Pool
# Tre frammenti di etichette di immagini; un cluster archivia ogni frammento su una macchina diversa
shards = [
["car", "person", "car", "bus"],
["person", "person", "bicycle"],
["car", "person", "dog", "car"],
]
def count_labels(shard):
"""Map step: count the labels in one shard."""
return Counter(shard)
if __name__ == "__main__":
with Pool(processes=3) as pool:
partial_counts = pool.map(count_labels, shards) # un processo worker per frammento
# Passaggio reduce: unisci i conteggi parziali in un unico totale
totals = sum(partial_counts, Counter())
print(totals.most_common())Ogni frammento viene conteggiato nel proprio processo e il passaggio reduce unisce i conteggi parziali in [('car', 4), ('person', 4), ('bus', 1), ('bicycle', 1), ('dog', 1)]. Spark e Hadoop eseguono gli stessi due passaggi su migliaia di macchine, inviando il codice map alle macchine che contengono ciascun frammento.
Addestrare modelli con i big data#
Una sessione di addestramento legge i big data in batch. I caricatori di dati decodificano da qualche decina a qualche centinaio di immagini alla volta dal disco locale o dall'object storage, usando diversi processi worker; non è quindi necessario che l'intero dataset entri in memoria. L'addestramento distribuito suddivide ogni batch tra molte GPU. Per il rilevamento di oggetti, il dataset di rilevamento Open Images V7 di Google occupa 561 GB e contiene 1,74 milioni di immagini di addestramento suddivise in 601 classi, molto più di quanto la maggior parte delle macchine possa contenere nella RAM. Se viene richiesto di memorizzare nella cache un dataset in memoria con cache="ram", l'addestramento Ultralytics YOLO stima la dimensione decodificata usando 30 immagini casuali e memorizza i dati nella cache solo se il doppio della stima rientra nella RAM disponibile; i dataset più grandi vengono letti e decodificati dal disco a ogni epoca.
Big data e termini correlati#
- Estrazione di dati: ricerca di pattern, anomalie e associazioni nei dati di qualsiasi dimensione, spesso eseguita su piattaforme per big data.
- Analisi dei dati: interrogazione, riepilogo e visualizzazione dei dati a supporto delle decisioni; l'analisi dei big data è la parte che richiede motori distribuiti.
- IA incentrata sui dati: miglioramento dei modelli attraverso il miglioramento della qualità e della copertura dei dati, particolarmente importante quando un dataset è troppo grande per essere esaminato manualmente.










