DataTrove - Cheatsheet Pipeline Processing Dati LLM
DataTrove è una libreria open-source di Hugging Face per processing, filtraggio e deduplicazione di grandi dataset di testo per training di LLM. Fornisce un set di blocchi di pipeline componibili — lettori, filtri, stage di dedup, writer — che funzionano invariati attraverso i backend di esecuzione: localmente, su un cluster Slurm, o su Ray. È l”implementazione di riferimento dietro i dataset FineWeb e FineWeb-Edu, il che la rende lo strumento go-to quando vuoi riprodurre o adattare una pipeline di curation pubblicata, CPU-first.
Installazione
| Metodo | Comando |
|---|
| pip | pip install datatrove |
| Con all extras | pip install "datatrove[all]" |
| Processing extras | pip install "datatrove[processing]" |
| Da source | git clone https://github.com/huggingface/datatrove && pip install -e . |
Concetti Core
| Concetto | Significato |
|---|
| Pipeline | Una lista ordinata di blocchi che i dati attraversano |
| Block | Uno step: lettore, filtro, dedup, writer, ecc. |
| Document | L”unità (text, id, metadata) |
| Executor | Dove la pipeline corre (Local / Slurm / Ray) |
| Tasks | Frammenti paralleli del carico di lavoro |
Blocchi Pipeline
| Categoria | Esempi |
|---|
| Readers | WarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader |
| Extractors | Trafilatura (HTML → testo) |
| Filters | LanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter |
| Dedup | MinhashDedup, SentenceDedup, ExactSubstrDedup |
| Writers | JsonlWriter, ParquetWriter |
| Tokenization | DocumentTokenizer |
Una Pipeline di Base
from datatrove.executor import LocalPipelineExecutor
from datatrove.pipeline.readers import JsonlReader
from datatrove.pipeline.filters import LanguageFilter, GopherQualityFilter
from datatrove.pipeline.writers import JsonlWriter
pipeline = [
JsonlReader("data/input/"),
LanguageFilter(languages=["en"]),
GopherQualityFilter(),
JsonlWriter("data/output/"),
]
executor = LocalPipelineExecutor(pipeline=pipeline, tasks=8)
executor.run()
Executor (Stessa Pipeline, Backend Diversi)
| Executor | Usa |
|---|
LocalPipelineExecutor | Una macchina, multiprocessing |
SlurmPipelineExecutor | Cluster HPC via job Slurm |
RayPipelineExecutor | Cluster Ray |
from datatrove.executor import SlurmPipelineExecutor
SlurmPipelineExecutor(
pipeline=pipeline, tasks=1000, time="20:00:00",
partition="cpu", workers=200,
).run()
Deduplication
Le stage di dedup di DataTrove solitamente funzionano come pipeline multi-step (signature → bucket → cluster → filter).
| Metodo | Block |
|---|
| MinHash (fuzzy) | MinhashDedup (multi-stage) |
| Esatto substring | ExactSubstrDedup |
| Sentence-level | SentenceDedup |
Filtri di Qualità
| Filtro | Euristica |
|---|
GopherQualityFilter | Lunghezza, rapporti di simboli, limiti bullet/ellissi |
GopherRepetitionFilter | Ripetizione eccessiva |
C4QualityFilter | Regole stile C4 (punteggiatura terminale, ecc.) |
FineWebQualityFilter | Euristiche ricetta FineWeb |
LanguageFilter | Soglia di ID lingua fastText |
URLFilter | Blocca/consenti per URL/dominio |
Flussi di Lavoro Comuni
# Riproduci una pipeline web stile FineWeb (ordine concettuale)
# WarcReader → URLFilter → Trafilatura → LanguageFilter →
# GopherQuality/Repetition → C4/FineWeb filters → MinhashDedup → JsonlWriter
# Scala la pipeline identica da laptop a cluster scambiando l''executor:
# LocalPipelineExecutor → SlurmPipelineExecutor → RayPipelineExecutor
DataTrove vs NeMo Curator
| Aspetto | DataTrove | NeMo Curator |
|---|
| Compute | CPU-first | GPU-native (RAPIDS) |
| Migliore per | Riproduci dataset stile FineWeb | Dedup-heavy run 10T+ token |
| Backend | Local / Slurm / Ray | Ray |
| Origine | Hugging Face | NVIDIA |
Risorse