Addestramento Efficiente di Modelli Video su Macchine Singole
Scopri come allenare modelli video in modo efficiente con risorse minime.
― 8 leggere min
Allenare grandi modelli per capire i video è diventato un argomento caldo negli ultimi anni. Però, questi modelli richiedono spesso un sacco di potenza di calcolo, e il setup normale prevede di usare tante macchine potenti che possono lavorare insieme. Questo rende tutto un bel problema per i ricercatori nelle università, che magari non hanno accesso a risorse del genere.
Questo articolo spiega come allenare un modello video moderno usando solo una macchina con otto GPU di fascia consumer, in un solo giorno. Concentrandoci su tre principali sfide-caricamento dei dati, elaborazione CPU e calcoli GPU-possiamo rendere il processo di allenamento più veloce ed efficiente.
La Sfida di Allenare Modelli Video
I video contengono un sacco di informazioni e possono essere molto pesanti, il che li rende complicati da gestire. Allenare questi modelli di solito richiede diversi giorni e molte GPU. Questo ha portato a una situazione in cui la maggior parte dello sviluppo di modelli di questo tipo avviene nell'industria piuttosto che in ambito accademico.
I modelli video sono progrediti molto grazie a macchine migliori e dataset più grandi. Tuttavia, questo comporta costi più alti, soprattutto con il passaggio dai modelli più vecchi a quelli più nuovi chiamati Transformers. Anche se questi tipi di modelli si basano spesso su modelli di immagini di successo, i video presentano sfide uniche.
Ad esempio, i video sono altamente compressi rispetto alle immagini. Questo significa che decodificarli richiede molto tempo e può rallentare l'intero processo. Inoltre, la quantità di dati cresce non solo con ogni singolo fotogramma, ma anche con la lunghezza del video. Questo può consumare molta memoria e complicare il pre-processing.
Analizzando il Processo di Allenamento
Quando si tratta di allenare modelli video, ci sono tre aree principali in cui possiamo migliorare l'efficienza: il modello stesso, come carichiamo i video e come elaboriamo i dati video. Ognuna di queste aree impatta la GPU, la CPU e le operazioni di input/output (IO) in modi diversi.
Attraverso un design attento, abbiamo trovato modi per velocizzare significativamente il processo di allenamento.
Dal lato del modello, abbiamo iniziato con un tipo base di Vision Transformer (ViT). Siamo riusciti a ridurre l'uso della memoria grazie a una tecnica chiamata FlashAttention. Questo metodo spezza l'intera sequenza di dati in pezzi più piccoli e gestibili, permettendoci di ridurre i requisiti di memoria mentre velocizziamo l'elaborazione.
Facendo questo aggiustamento, abbiamo potuto lavorare con batch più grandi di video contemporaneamente, il che è particolarmente utile per alcuni tipi di modelli che necessitano di molti dati per un allenamento efficace.
Anche con hardware migliorato, allenare modelli video moderni può comunque richiedere molto tempo. Spesso, può richiedere l'equivalente di diversi anni di calcolo su macchine avanzate. Tuttavia, abbiamo dimostrato che è possibile allenare un modello performante su una singola macchina in meno di un giorno.
Ottimizzando il Caricamento e l'Elaborazione dei Video
Con il nostro nuovo approccio, abbiamo anche dovuto affrontare altre sfide che si presentano con velocità di elaborazione più elevate. Un cambiamento importante che abbiamo fatto riguarda come carichiamo e decodifichiamo i dati video.
Invece di caricare interi video in una volta, li abbiamo suddivisi in segmenti più brevi. Ogni segmento viene elaborato separatamente, il che riduce la quantità di dati gestiti contemporaneamente. Questo cambiamento allevia la pressione sulle operazioni di input/output e velocizza il processo di decodifica video.
Abbiamo anche combinato trasformazioni di dati comunemente utilizzate nella fase di caricamento video. Ad esempio, abbiamo integrato un'operazione di ritaglio comune nel primo passo di decodifica. Questo riduce il tempo speso a decodificare parti superflue del video.
Per liberare risorse CPU, abbiamo spostato molti compiti di aumento dei dati sulle GPU. Questo consente loro di lavorare contemporaneamente, sfruttando la loro capacità di elaborare molti compiti in una volta.
Abbiamo testato la nostra configurazione con un ampio database di coppie video e testo, allenando un modello per capire la connessione tra di essi. La nostra nuova pipeline è stata in grado di raggiungere risultati paragonabili a quelli che richiederebbero setup molto più potenti. Questo ha comportato un uso della memoria notevolmente ridotto, meno tempo speso sulle GPU e costi più bassi.
L'Impatto delle Tecniche di Allenamento Migliorate
Il nostro sistema non è limitato ad allenare solo un tipo di modello. I metodi che abbiamo sviluppato possono funzionare anche con altri modelli e compiti. Abbiamo applicato con successo tecniche simili all'allenamento di altri tipi di modelli video, come i Video Masked Auto-Encoders (MAE), dimostrando ulteriormente quanto sia flessibile e utile il nostro approccio.
Ricerche Precedenti sul Riconoscimento Video Efficiente
I modelli video sono noti per essere pesanti in termini di risorse, portando a molti sforzi di ricerca focalizzati su come renderli più efficienti. Le innovazioni includono diversi tipi di metodi di convoluzione, aggiustamenti alle pipeline di allenamento e varie tecniche per minimizzare il consumo di memoria.
Sebbene altri studi abbiano esaminato miglioramenti nell'efficienza nell'allenamento dei modelli video, il nostro lavoro si distingue perché affronta specificamente i colli di bottiglia di IO e CPU negli setup di allenamento tipici per video.
Efficienza della Memoria nei Modelli Video
Per gestire efficacemente l'uso della memoria, molti approcci si concentrano sulla suddivisione dei video in fotogrammi o clip più piccole e sull'uso di modelli aggiuntivi per comprendere il movimento. Tuttavia, la maggior parte di questi sforzi si è concentrata sul migliorare le prestazioni dei modelli durante la fase di test piuttosto che su come vengono allenati.
La nostra attenzione all'ottimizzazione del processo di allenamento effettivo per i modelli video consente alle nostre tecniche di applicarsi ampiamente a diversi tipi di modelli.
La Pipeline Standard di Allenamento Video
La pipeline abituale per allenare modelli video condivide somiglianze con l'allenamento dei modelli di immagini. Prima, il video viene letto e decodificato in singoli fotogrammi, che vengono poi selezionati e trasformati in un formato adatto per il modello. Questo include vari aggiustamenti e aumentazioni che migliorano l'utilità dei dati.
Tipicamente, il caricamento e la decodifica video richiedono risorse significative della CPU, mentre il modello stesso gira sulla GPU. Questa divisione può portare a inefficienze, soprattutto quando la CPU non riesce a stare al passo con le richieste delle GPU.
Velocizzare il Caricamento e l'Elaborazione dei Video
Abbiamo riconosciuto l'impatto dei processi di caricamento video più lenti sul tempo complessivo di allenamento. Ottimizzando come i video vengono memorizzati ed elaborati, siamo stati in grado di ridurre significativamente il tempo necessario per caricare i dati.
Uno dei cambiamenti chiave ha comportato la riduzione della dimensione dei singoli segmenti video caricati in memoria. Invece di leggere video lunghi, li abbiamo spezzati in pezzi più piccoli, permettendo accessi e processamenti più veloci.
Il Metodo Fused DecodeCrop
Abbiamo progettato un nuovo metodo chiamato Fused DecodeCrop, che ci permette di decodificare i video mentre li ritagliamo contemporaneamente. Questo approccio minimizza il lavoro inutile e accelera il processo di caricamento dei dati, che di solito è un collo di bottiglia.
Il successo di Fused DecodeCrop non solo rende l'allenamento video più veloce, ma apre anche la porta a ulteriori trasformazioni da applicare senza compromettere le prestazioni.
Allenamento con Video Lunghi
Quando lavoriamo con video lunghi, spesso ci troviamo di fronte a problemi legati allo spazio su disco e alla gestione della memoria. Una soluzione è tagliare questi video in base a timestamp predefiniti prima di passarli al modello. Tuttavia, questo può portare a un aumento delle esigenze di archiviazione e rende alcune parti dei video inutilizzabili per l'allenamento.
Invece, suddividere i video in pezzi gestibili può ridurre il tempo necessario per leggerli e decodificarli. Questo metodo consente ai modelli di elaborare segmenti video più rapidamente evitando il tempo sprecato su dati non necessari.
Valutazione delle Prestazioni e Risultati
Per testare l'efficacia del nostro approccio, abbiamo utilizzato un noto dataset video per il pre-allenamento e poi valutato quanto bene il nostro modello si è comportato su un compito specifico di riconoscimento video.
Il nostro metodo ha sostituito gli approcci tradizionali per il contrasto tra video e linguaggio e ha superato i lavori precedenti sia in efficienza che in accuratezza, anche utilizzando meno risorse.
Vantaggi dell'Allenamento a Lotti Grandi
Durante i nostri test, abbiamo osservato che utilizzare dimensioni di batch più grandi può migliorare significativamente i risultati dell'allenamento. Dimensioni di batch più grandi portano a una migliore performance del modello, specialmente se abbinate a dataset più ampi.
Tuttavia, raggiungere quelle dimensioni di batch più grandi è stata una sfida nell'allenamento tradizionale dei modelli video a causa dei limiti di memoria e della velocità di elaborazione. Le nostre ottimizzazioni ci hanno permesso di spingere i limiti di ciò che è possibile in questo senso.
Conclusione
In sintesi, abbiamo dimostrato che non solo è possibile, ma è anche efficiente allenare modelli video moderni su una singola macchina. Affrontando i principali colli di bottiglia nel caricamento dei dati, nell'elaborazione CPU e nei calcoli GPU, abbiamo avanzato notevolmente la pipeline di allenamento.
Questo lavoro apre nuove possibilità per i ricercatori in ambito accademico, permettendo loro di lavorare su modelli video all'avanguardia senza dover avere accesso a enormi cluster di calcolo. Le tecniche che abbiamo delineato possono servire come base per future esplorazioni nella comprensione e nel riconoscimento video, rendendo il modellamento video più accessibile a chiunque sia interessato in questo campo entusiasmante.
Titolo: Training a Large Video Model on a Single Machine in a Day
Estratto: Videos are big, complex to pre-process, and slow to train on. State-of-the-art large-scale video models are trained on clusters of 32 or more GPUs for several days. As a consequence, academia largely ceded the training of large video models to industry. In this paper, we show how to still train a state-of-the-art video model on a single machine with eight consumer-grade GPUs in a day. We identify three bottlenecks, IO, CPU, and GPU computation, and optimize each. The result is a highly efficient video training pipeline. For comparable architectures, our pipeline achieves higher accuracies with $\frac{1}{8}$ of the computation compared to prior work. Code is available at https://github.com/zhaoyue-zephyrus/AVION.
Autori: Yue Zhao, Philipp Krähenbühl
Ultimo aggiornamento: 2023-09-28 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2309.16669
Fonte PDF: https://arxiv.org/pdf/2309.16669
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.