Zum Inhalt springen

DataTrove - LLM Datenverarbeitungs-Pipelines Spickzettel

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

MethodeBefehl
pippip install datatrove
Mit allen Extraspip install "datatrove[all]"
Verarbeitungs-Extraspip install "datatrove[processing]"
Aus Quellegit clone https://github.com/huggingface/datatrove && pip install -e .

Kern-Konzepte

KonzeptBedeutung
PipelineEine geordnete Liste von Blöcken, durch die Daten fließen
BlockEin Schritt: Reader, Filter, Dedup, Writer, etc.
DocumentDie Einheit (text, id, metadata)
ExecutorWo die Pipeline ausgeführt wird (Lokal / Slurm / Ray)
TasksParallele Shards der Arbeitslast

Pipeline-Blöcke

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

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)

ExecutorVerwendung
LocalPipelineExecutorEin Rechner, Multiprocessing
SlurmPipelineExecutorHPC-Cluster via Slurm Jobs
RayPipelineExecutorRay 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).

MethodeBlock
MinHash (Fuzzy)MinhashDedup (Multi-Stage)
Exakte SubstringExactSubstrDedup
Satz-EbeneSentenceDedup

Qualitäts-Filter

FilterHeuristik
GopherQualityFilterLänge, Symbolquoten, Bullet/Ellipsis-Grenzen
GopherRepetitionFilterÜbermäßige Wiederholung
C4QualityFilterC4-Style Regeln (Terminal-Interpunktion, etc.)
FineWebQualityFilterFineWeb-Rezept-Heuristiken
LanguageFilterfastText Language ID Schwellwert
URLFilterBlockieren/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

AspektDataTroveNeMo Curator
ComputeCPU-FirstGPU-Native (RAPIDS)
Am besten fürReproduzieren von FineWeb-Style DatensätzenDedup-Heavy 10T+ Token Läufe
BackendsLokal / Slurm / RayRay
HerkunftHugging FaceNVIDIA

Ressourcen