În era modelelor de limbaj de mari dimensiuni (LLM) și a inteligenței artificiale generative, volumul de date necesar pentru antrenare a depășit de mult capacitatea de stocare a hard disk-urilor convenționale. Cercetătorii și inginerii se confruntă zilnic cu o problemă critică: cum să gestioneze seturi de date de ordinul terabyților fără a bloca infrastructura sau fără a aștepta ore întregi pentru descărcarea acestora? Răspunsul vine sub forma unei inovații tehnice majore în biblioteca `datasets` de la Hugging Face: optimizarea streaming-ului, care face acest proces de 100 de ori mai eficient.
Revoluția TL;DR: Streaming cu o singură linie de cod
Nucleul acestei actualizări este simplitatea. Echipa Hugging Face a reușit să boosteze funcția `load_dataset('dataset', streaming=True)`, permițând streaming-ul seturilor de date fără a fi nevoie de descărcarea acestora locale. Aceasta nu este doar o simplă îmbunătățire incrementală, ci o schimbare de paradigmă. Dezvoltatorii pot începe antrenarea pe seturi de date de multi-TB instantaneu, eliminând configurările complexe, descărcările interminabile, erorile de tip „disk out of space” (spațiu insuficient pe disc) sau temutele erori 429 „stop requesting!” care apar atunci când serverele limitează accesul din cauza solicitărilor excesive.
Rezultatele sunt, pur și simplu, uimitoare. În testele pe 64 de procesoare grafice H100 cu 256 de workere, viteza de streaming a depășit performanța SSD-urilor locale. Aceasta înseamnă că datele curg din cloud mai repede decât ar putea fi citite de pe un hard disk de înaltă performanță montat direct pe server. Din punct de vedere tehnic, îmbunătățirile se traduc prin: o reducere a numărului de cereri de 100 de ori, o rezoluție a datelor de 10 ori mai rapidă, o rată de eșantionare dublată (2x sample/sec) și zero crash-uri ale workerelelor chiar și la 256 de utilizatori concurenți.
Provocarea: Streaming-ul la scară largă
Încărcarea datelor, în special la scara terabyților, a fost întotdeauna un „bătător de cap” în fluxurile de lucru din machine learning. Echipa Hugging Face a simțit această durere direct în timpul antrenării modelului SmolLM3. La un moment dat, erau nevoiți să aștepte trei ore înainte de fiecare rulare, doar pentru a descărca suficientă date pentru a începe antrenamentul. Deși streaming-ul a fost întotdeauna posibil în biblioteca `datasets`, antrenarea la scară largă cu seturi de date masive a rămas o provocare tehnică majoră.
Până acum, dezvoltatorii foloseau streaming-ul pentru a înțelege rapid un set de date, dar pentru antrenare, de obicei descărcau datele local sau foloseau servicii de stocare în cloud precum S3. Totuși, atunci când au încercat să streameze direct de pe Hub pentru dezvoltarea nanoVLM, au descoperit o problemă critică: o singură rulare de test a generat peste 100.000 de cereri în mai puțin de un minut, ducând la blocarea IP-ului lor de către Hub. Aceasta s-a întâmplat deoarece fiecare worker din DataLoader inițializa setul de date independent, creând o furtună de cereri redundante. Noua arhitectură rezolvă această problemă, reducând cererile de pornire cu un factor de 100.
Sub capotă: Ce s-a îmbunătățit tehnic?
Inginerii s-au concentrat pe două faze distincte: pornirea (startup) și streaming-ul efectiv.
1. Faza de Startup ⚡️: Rezoluția inițială a fișierelor de date crea un volum uriaș de cereri. S-au făcut două modificări majore pentru a combate acest lucru. În primul rând, s-a implementat un mecanism de partajare a stării între workere. În loc ca fiecare worker să interogheze independent structura setului de date, informația este acum partajată, eliminând redundanța. În al doilea rând, s-a optimizat modul în care sunt listate și accesate fișierele Parquet, reducând drastic numărul de apeluri necesare către server.
2. Faza de Streaming 🏎️: Pentru a îmbunătăți debitul (throughput) în timpul streaming-ului, au fost introduse două funcții noi: prefetching (preîncărcarea datelor) și ajustarea dinamică a dimensiunii cererilor. Utilizatorii pot configura acum o dimensiune minimă a cererii (de exemplu, de la 32MiB la 128MiB) și pot activa prefetching-ul pentru a asigura un flux continuu de date către GPU, minimizând timpul de așteptare (latența).
De ce suntem mai rapizi decât S3-ul simplu: Xet
O componentă cheie a acestei viteze superioare este utilizarea sistemului de stocare Xet de către Hugging Face. Xet este un sistem bazat pe deduplicare care permite încărcări și descărcări rapide. Spre deosebire de stocarea tradițională remote, transferurile de date pe Xet sunt mai rapide deoarece datele duplicate sunt transferate o singură dată. Această tehnologie este susținută de Parquet Content Defined Chunking (CDC), care permite deduplicarea la nivel de blocuri de date în interiorul fișierelor Parquet. Practic, dacă un model este antrenat pe seturi de date care conțin duplicate (o situație frecventă), Xet transferă doar informația unică, economisind lățime de bandă și timp.
Construirea de pipeline-uri personalizate
Înțelegând că unele formate de fișiere nu sunt suportate nativ sau că unele proiecte necesită un control granular, echipa a îmbunătățit și `HfFileSystem` din biblioteca `huggingface_hub`. Aceasta permite construirea ușoară a unor pipeline-uri de streaming personalizate. Această funcționalitate a fost testată în condiții de luptă în biblioteca LeRobot pentru eșantionarea cadrelor video și în WebDataset pentru streaming de arhive TAR. Dezvoltatorii pot accesa fișierele remote direct, cu posibilități de căutare aleatorie (random access), exact ca și cum ar fi locale.
Pushing the Limit: Aplicații practice
Aceste îmbunătățiri nu sunt doar teoretice. Ele sunt utilizate acum în proiectul nanoVLM pentru a antrena următoarea generație de modele SmolVLM. Cu aceste ajustări, performanța streaming-ului a depășit-o pe cea a configurării cu hard disk-uri ierarhice din cluster-ul lor. Faptul că streaming-ul este acum la fel de rapid ca citirea de pe SSD-urile locale elimină necesitatea transferului și stocării locale, un proces care anterior întârzia antrenamentele cu trei ore.
Pentru a începe să utilizați aceste funcții, utilizatorii trebuie doar să își actualizeze bibliotecile (`pip install --upgrade datasets huggingface_hub`). Ca un exemplu practic, echipa a preconcatenat și amestecat toate sursele de date din FineVision în FineVisionMax, un set de date unic, gata de utilizare pentru antrenarea modelelor vizuale (VLM), care poate fi streamat instantaneu fără a umple discul local, chiar și în condițiile unor resurse de stocare limitate (de exemplu, sub 100GB).
Streaming de date: O metodă de 100 de ori mai eficientă pentru antrenarea modelelor AI