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ă.
Cuprinsul lecției
- Obiective de învățare
- Problema
- Conceptul
- Implementare
- Pasul 1: Instalați biblioteca datasets
- Pasul 2: Încărcați un set de date
- Pasul 3: Procesați în flux seturi de date mari
- Pasul 4: Formatele seturilor de date
- Pasul 5: Împărțirea datelor
- Pasul 6: Descărcați și stocați modelele în cache
- Pasul 7: Gestionați fișierele mari
- Pasul 8: Strategii de stocare
- Seturile de date utilizate în acest curs
- Utilizare
- Livrarea rezultatului
- Exerciții
- 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
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 cacheoutputs/prompt-data-helper.md— prompt pentru găsirea setului de date potrivit unei sarcini
Exerciții
- Încărcați setul de date
gluecu configurațiamrpcși examinați primele 5 exemple. - Procesați în flux setul de date
c4și numărați câte exemple puteți procesa în 10 secunde. - Convertiți un set de date în Parquet și comparați dimensiunea fișierului cu cea a formatului CSV.
- 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.