Faza 00 · lecția 09

Gestionarea datelor

Scopul lecției: Datele sunt combustibilul. Modul în care le gestionați determină cât de repede avansați.

Versiunea curentă AlexBred.com: primele 100 de lecții ale programului în limba română.

Curs
AI Engineering from Scratch
Fază
Configurare și instrumente
Lectură
9 min.
Verificat
Cuprinsul lecției
  1. Obiective de învățare
  2. Problema
  3. Conceptul
  4. Implementare
  5. Pasul 1: Instalați biblioteca datasets
  6. Pasul 2: Încărcați un set de date
  7. Pasul 3: Procesați în flux seturi de date mari
  8. Pasul 4: Formatele seturilor de date
  9. Pasul 5: Împărțirea datelor
  10. Pasul 6: Descărcați și stocați modelele în cache
  11. Pasul 7: Gestionați fișierele mari
  12. Pasul 8: Strategii de stocare
  13. Seturile de date utilizate în acest curs
  14. Utilizare
  15. Livrarea rezultatului
  16. Exerciții
  17. Termeni-cheie

Datele sunt combustibilul. Modul în care le gestionați determină cât de repede avansați.

Tip: Construire Limbaj: Python Cerințe preliminare: Faza 0, lecția 01 Durată: aproximativ 45 de minute

Obiective de învățare

  • Încărcați, procesați în flux (streaming) și stocați în cache seturi de date (datasets) folosind biblioteca Hugging Face datasets.
  • Convertiți între formatele CSV, JSON, Parquet și Arrow și explicați avantajele și dezavantajele fiecăruia.
  • Creați împărțiri reproductibile în subseturi de antrenare, validare și testare, folosind seeduri fixe (random seeds).
  • Gestionați fișierele mari ale modelelor și seturilor de date folosind .gitignore, Git LFS sau DVC (Data Version Control, controlul versiunilor pentru date).

Problema

Fiecare proiect de IA începe cu date. Trebuie să găsiți seturi de date, să le descărcați, să le convertiți dintr-un format în altul, să le împărțiți pentru antrenare și evaluare și să le gestionați versiunile (versioning), astfel încât experimentele să poată fi reproduse. Efectuarea manuală a acestor operații de fiecare dată este lentă și predispusă la erori. Aveți nevoie de un flux de lucru repetabil.

Conceptul

Диаграмма к уроку «Gestionarea datelor»

Biblioteca Hugging Face datasets este soluția standard pentru încărcarea datelor în proiectele de IA. Aceasta gestionează descărcarea, stocarea în cache, conversia formatelor și procesarea în flux fără configurare suplimentară.

Implementare

Pasul 1: Instalați biblioteca datasets

pip install datasets huggingface_hub

Pasul 2: Încărcați un set de date

from datasets import load_dataset

dataset = load_dataset("imdb")
print(dataset)
print(dataset["train"][0])

Această comandă descarcă setul de date IMDB cu recenzii de filme. După prima descărcare, acesta este încărcat din cache, de la ~/.cache/huggingface/datasets/.

Pasul 3: Procesați în flux seturi de date mari

Unele seturi de date sunt prea mari pentru a încăpea pe disc. Procesarea în flux le încarcă rând cu rând, fără a descărca întregul set.

dataset = load_dataset("wikimedia/wikipedia", "20220301.en", split="train", streaming=True)

for i, example in enumerate(dataset):
    print(example["title"])
    if i >= 4:
        break

Prin procesarea în flux obțineți un obiect IterableDataset. Procesați rândurile pe măsură ce sosesc. Memoria utilizată rămâne constantă, indiferent de dimensiunea setului de date.

Pasul 4: Formatele seturilor de date

Biblioteca datasets folosește intern Apache Arrow. Puteți efectua conversia în alte formate, în funcție de cerințele fluxului dvs. de procesare.

dataset = load_dataset("imdb", split="train")

dataset.to_csv("imdb_train.csv")
dataset.to_json("imdb_train.json")
dataset.to_parquet("imdb_train.parquet")

Comparația formatelor:

Format Dimensiune Viteza citirii Utilizare optimă
CSV Mare Lentă Ușor de citit de către oameni, foi de calcul
JSON Mare Lentă API-uri, date imbricate
Parquet Mică Rapidă Analiză, interogări pe coloane
Arrow Mică Cea mai rapidă Procesare în memorie (formatul folosit intern de datasets)

Pentru proiectele de IA, Parquet este cel mai bun format de stocare. Arrow este formatul cu care lucrați în memorie. CSV și JSON sunt destinate schimbului de date.

Pasul 5: Împărțirea datelor

Fiecare proiect de învățare automată (ML) are nevoie de trei subseturi:

  • Antrenare (train): modelul învață din acest subset (de obicei, 80%)
  • Validare (validation): verificați progresul în timpul antrenării (de obicei, 10%)
  • Testare (test): evaluarea finală după încheierea antrenării (de obicei, 10%)

Unele seturi de date sunt deja împărțite. Când nu sunt, împărțiți-le chiar dvs.:

dataset = load_dataset("imdb", split="train")

split = dataset.train_test_split(test_size=0.2, seed=42)
train_val = split["train"].train_test_split(test_size=0.125, seed=42)

train_ds = train_val["train"]
val_ds = train_val["test"]
test_ds = split["test"]

print(f"Train: {len(train_ds)}, Val: {len(val_ds)}, Test: {len(test_ds)}")

Setați întotdeauna un seed fix pentru reproductibilitate. Același seed produce de fiecare dată aceeași împărțire.

Pasul 6: Descărcați și stocați modelele în cache

Modelele sunt fișiere mari. Biblioteca huggingface_hub gestionează descărcarea și stocarea lor în cache.

from huggingface_hub import hf_hub_download, snapshot_download

model_path = hf_hub_download(
    repo_id="sentence-transformers/all-MiniLM-L6-v2",
    filename="config.json"
)
print(f"Cached at: {model_path}")

model_dir = snapshot_download("sentence-transformers/all-MiniLM-L6-v2")
print(f"Full model at: {model_dir}")

Modelele sunt stocate în cache la ~/.cache/huggingface/hub/. După descărcare, acestea se încarcă instantaneu la rulările ulterioare.

Pasul 7: Gestionați fișierele mari

Ponderile modelelor și seturile mari de date nu ar trebui incluse în Git. Aveți trei opțiuni:

Opțiunea A: .gitignore (cea mai simplă)

*.bin
*.safetensors
*.pt
*.onnx
data/*.parquet
data/*.csv
models/

Opțiunea B: Git LFS (urmărirea fișierelor mari în Git)

git lfs install
git lfs track "*.bin"
git lfs track "*.safetensors"
git add .gitattributes

Git LFS stochează în depozit fișiere-pointer, iar fișierele propriu-zise pe un server separat. GitHub vă oferă gratuit 1 GB.

Opțiunea C: DVC (controlul versiunilor pentru date)

pip install dvc
dvc init
dvc add data/training_set.parquet
git add data/training_set.parquet.dvc data/.gitignore
git commit -m "Track training data with DVC"

DVC creează fișiere .dvc mici, care conțin referințe către datele dvs. Datele propriu-zise se află în S3, GCS sau într-un alt sistem de stocare la distanță.

Metodă Complexitate Utilizare optimă
.gitignore Redusă Proiecte personale, date descărcate pe care le puteți prelua din nou
Git LFS Medie Echipe care partajează ponderile modelelor prin Git
DVC Ridicată Experimente reproductibile, seturi mari de date, echipe

Pentru acest curs, .gitignore este suficient. Folosiți DVC atunci când trebuie să reproduceți exact experimentele pe calculatoare diferite.

Pasul 8: Strategii de stocare

Stocarea locală este potrivită pentru seturi de date mai mici de aproximativ 10 GB. Cache-ul HF gestionează automat această stocare.

Stocarea în cloud este destinată datelor mai mari sau partajate între mai multe calculatoare:

import os

local_path = os.path.expanduser("~/.cache/huggingface/datasets/")

# s3_path = "s3://my-bucket/datasets/"
# gcs_path = "gs://my-bucket/datasets/"

DVC se integrează direct cu S3 și GCS:

dvc remote add -d myremote s3://my-bucket/dvc-store
dvc push

Pentru acest curs, stocarea locală este suficientă. Stocarea în cloud devine relevantă atunci când efectuați ajustarea fină (fine-tuning) pe instanțe GPU la distanță.

Seturile de date utilizate în acest curs

Set de date Lecții Dimensiune Ce vă învață
IMDB Tokenizare, clasificare 84 MB Noțiuni de bază despre clasificarea textelor
WikiText Modelare lingvistică 181 MB Predicția tokenului următor
SQuAD Sisteme de răspuns la întrebări 35 MB Răspunsuri la întrebări, segmente de text
Common Crawl (subset) Reprezentări vectoriale (embeddings) Variabilă Procesarea textelor la scară largă
MNIST Noțiuni de bază despre viziunea artificială 21 MB Principiile clasificării imaginilor
COCO (subset) Multimodalitate Variabilă Perechi imagine-text

Nu trebuie să descărcați acum toate aceste seturi de date. Fiecare lecție precizează de ce are nevoie.

Utilizare

Rulați scriptul utilitar pentru a verifica dacă totul funcționează:

python code/data_utils.py

Acesta descarcă un set de date mic, îl convertește, îl împarte și afișează un rezumat.

Livrarea rezultatului

Această lecție produce:

  • code/data_utils.py — utilitar reutilizabil pentru încărcarea și stocarea datelor în cache
  • outputs/prompt-data-helper.md — prompt pentru găsirea setului de date potrivit unei sarcini

Exerciții

  1. Încărcați setul de date glue cu configurația mrpc și examinați primele 5 exemple.
  2. Procesați în flux setul de date c4 și numărați câte exemple puteți procesa în 10 secunde.
  3. Convertiți un set de date în Parquet și comparați dimensiunea fișierului cu cea a formatului CSV.
  4. Creați o împărțire în subseturi train/val/test de 70/15/15, cu un seed fix, și verificați dimensiunile.

Termeni-cheie

Termen Cum i se spune în mod obișnuit Ce înseamnă de fapt
Împărțire a setului de date (dataset split) „Date de antrenare” Un subset denumit (train/val/test), folosit în diferite etape ale ciclului de viață al învățării automate
Procesare în flux (streaming) „Încărcare la cerere” Procesarea datelor rând cu rând dintr-o sursă la distanță, fără a descărca întregul set de date
Parquet „CSV comprimat” Un format de fișier pe coloane, optimizat pentru interogări analitice și eficiența stocării
Arrow „DataFrame rapid” Un format în memorie, organizat pe coloane, folosit intern de biblioteca datasets pentru citiri fără copiere
Git LFS „Git pentru fișiere mari” O extensie care stochează fișierele mari în afara depozitului Git, păstrând fișiere-pointer sub controlul versiunilor
DVC „Git pentru date” Un sistem de control al versiunilor pentru seturi de date și modele, care se integrează cu stocarea în cloud
Cache „Deja descărcat” O copie locală a datelor preluate anterior, stocată implicit în ~/.cache/huggingface/

Sursă: Data Management — originalul Navigare: înapoi: 00.08 — Configurarea editorului · Faza 0 — Configurare și instrumente · Catalog complet · înainte: 00.10 — Terminal și shell.