Salta ai contenuti

DataTrove - Cheatsheet Pipeline Processing Dati LLM

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

MetodoComando
pippip install datatrove
Con all extraspip install "datatrove[all]"
Processing extraspip install "datatrove[processing]"
Da sourcegit clone https://github.com/huggingface/datatrove && pip install -e .

Concetti Core

ConcettoSignificato
PipelineUna lista ordinata di blocchi che i dati attraversano
BlockUno step: lettore, filtro, dedup, writer, ecc.
DocumentL”unità (text, id, metadata)
ExecutorDove la pipeline corre (Local / Slurm / Ray)
TasksFrammenti paralleli del carico di lavoro

Blocchi Pipeline

CategoriaEsempi
ReadersWarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader
ExtractorsTrafilatura (HTML → testo)
FiltersLanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter
DedupMinhashDedup, SentenceDedup, ExactSubstrDedup
WritersJsonlWriter, ParquetWriter
TokenizationDocumentTokenizer

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)

ExecutorUsa
LocalPipelineExecutorUna macchina, multiprocessing
SlurmPipelineExecutorCluster HPC via job Slurm
RayPipelineExecutorCluster 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).

MetodoBlock
MinHash (fuzzy)MinhashDedup (multi-stage)
Esatto substringExactSubstrDedup
Sentence-levelSentenceDedup

Filtri di Qualità

FiltroEuristica
GopherQualityFilterLunghezza, rapporti di simboli, limiti bullet/ellissi
GopherRepetitionFilterRipetizione eccessiva
C4QualityFilterRegole stile C4 (punteggiatura terminale, ecc.)
FineWebQualityFilterEuristiche ricetta FineWeb
LanguageFilterSoglia di ID lingua fastText
URLFilterBlocca/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

AspettoDataTroveNeMo Curator
ComputeCPU-firstGPU-native (RAPIDS)
Migliore perRiproduci dataset stile FineWebDedup-heavy run 10T+ token
BackendLocal / Slurm / RayRay
OrigineHugging FaceNVIDIA

Risorse