DataTrove - LLM Datenverarbeitungs-Pipelines Spickzettel
DataTrove ist eine Open-Source-Bibliothek von Hugging Face zum Verarbeiten, Filtern und Deduplizieren großer Textdatensätze für LLM-Training. Sie stellt eine Reihe zusammensetzbarer Pipeline-Blöcke bereit — Reader, Filter, Dedup-Stufen, Writer — die unverändert über Ausführungs-Backends ausgeführt werden: lokal, auf einem Slurm-Cluster oder auf Ray. Sie ist die Referenzimplementierung hinter den FineWeb- und FineWeb-Edu-Datensätzen, was sie zum Go-To-Tool macht, wenn du eine veröffentlichte, CPU-First-Kurationsgrpipeline reproduzieren oder anpassen möchtest.
Installation
| Methode | Befehl |
|---|
| pip | pip install datatrove |
| Mit allen Extras | pip install "datatrove[all]" |
| Verarbeitungs-Extras | pip install "datatrove[processing]" |
| Aus Quelle | git clone https://github.com/huggingface/datatrove && pip install -e . |
Kern-Konzepte
| Konzept | Bedeutung |
|---|
| Pipeline | Eine geordnete Liste von Blöcken, durch die Daten fließen |
| Block | Ein Schritt: Reader, Filter, Dedup, Writer, etc. |
| Document | Die Einheit (text, id, metadata) |
| Executor | Wo die Pipeline ausgeführt wird (Lokal / Slurm / Ray) |
| Tasks | Parallele Shards der Arbeitslast |
Pipeline-Blöcke
| Kategorie | Beispiele |
|---|
| Readers | WarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader |
| Extractors | Trafilatura (HTML → Text) |
| Filters | LanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter |
| Dedup | MinhashDedup, SentenceDedup, ExactSubstrDedup |
| Writers | JsonlWriter, ParquetWriter |
| Tokenization | DocumentTokenizer |
Eine grundlegende Pipeline
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()
Executors (Gleiche Pipeline, Unterschiedliche Backends)
| Executor | Verwendung |
|---|
LocalPipelineExecutor | Ein Rechner, Multiprocessing |
SlurmPipelineExecutor | HPC-Cluster via Slurm Jobs |
RayPipelineExecutor | Ray Cluster |
from datatrove.executor import SlurmPipelineExecutor
SlurmPipelineExecutor(
pipeline=pipeline, tasks=1000, time="20:00:00",
partition="cpu", workers=200,
).run()
Deduplizierung
DataTrove”s Dedup-Stufen laufen typischerweise als Multi-Step-Pipelines (Signaturen → Buckets → Cluster → Filter).
| Methode | Block |
|---|
| MinHash (Fuzzy) | MinhashDedup (Multi-Stage) |
| Exakte Substring | ExactSubstrDedup |
| Satz-Ebene | SentenceDedup |
Qualitäts-Filter
| Filter | Heuristik |
|---|
GopherQualityFilter | Länge, Symbolquoten, Bullet/Ellipsis-Grenzen |
GopherRepetitionFilter | Übermäßige Wiederholung |
C4QualityFilter | C4-Style Regeln (Terminal-Interpunktion, etc.) |
FineWebQualityFilter | FineWeb-Rezept-Heuristiken |
LanguageFilter | fastText Language ID Schwellwert |
URLFilter | Blockieren/Zulassen nach URL/Domain |
Häufige Workflows
# FineWeb-Style Web-Pipeline reproduzieren (konzeptuelle Reihenfolge)
# WarcReader → URLFilter → Trafilatura → LanguageFilter →
# GopherQuality/Repetition → C4/FineWeb Filter → MinhashDedup → JsonlWriter
# Identische Pipeline von Laptop zu Cluster skalieren durch Executor tauschen:
# LocalPipelineExecutor → SlurmPipelineExecutor → RayPipelineExecutor
DataTrove vs NeMo Curator
| Aspekt | DataTrove | NeMo Curator |
|---|
| Compute | CPU-First | GPU-Native (RAPIDS) |
| Am besten für | Reproduzieren von FineWeb-Style Datensätzen | Dedup-Heavy 10T+ Token Läufe |
| Backends | Lokal / Slurm / Ray | Ray |
| Herkunft | Hugging Face | NVIDIA |
Ressourcen