DataTrove - Pipelines de traitement de données LLM
DataTrove est une bibliothèque open-source de Hugging Face pour le traitement, le filtrage et la déduplication des grands ensembles de données textuelles pour l”entraînement LLM. Elle fournit un ensemble de blocs de pipeline composables — lecteurs, filtres, étapes de dedup, rédacteurs — qui s”exécutent sans modification sur les backends d”exécution: localement, sur un cluster Slurm, ou sur Ray. C”est l”implémentation de référence derrière les ensembles de données FineWeb et FineWeb-Edu, ce qui en fait l”outil incontournable quand vous voulez reproduire ou adapter un pipeline de curation publié, axé sur CPU.
Installation
| Méthode | Commande |
|---|
| pip | pip install datatrove |
| Avec tous les extras | pip install "datatrove[all]" |
| Extras de traitement | pip install "datatrove[processing]" |
| Depuis la source | git clone https://github.com/huggingface/datatrove && pip install -e . |
Concepts principaux
| Concept | Signification |
|---|
| Pipeline | Une liste ordonnée de blocs par lesquels les données circulent |
| Bloc | Une étape: lecteur, filtre, dedup, rédacteur, etc. |
| Document | L”unité (text, id, metadata) |
| Exécuteur | Où le pipeline s”exécute (Local / Slurm / Ray) |
| Tâches | Shards parallèles de la charge de travail |
Blocs du pipeline
| Catégorie | Exemples |
|---|
| Lecteurs | WarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader |
| Extracteurs | Trafilatura (HTML → texte) |
| Filtres | LanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter |
| Dedup | MinhashDedup, SentenceDedup, ExactSubstrDedup |
| Rédacteurs | JsonlWriter, ParquetWriter |
| Tokénisation | DocumentTokenizer |
Un pipeline de 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()
Exécuteurs (même pipeline, différents backends)
| Exécuteur | Utiliser |
|---|
LocalPipelineExecutor | Une machine, multitraitement |
SlurmPipelineExecutor | Clusters HPC via les travaux Slurm |
RayPipelineExecutor | Clusters Ray |
from datatrove.executor import SlurmPipelineExecutor
SlurmPipelineExecutor(
pipeline=pipeline, tasks=1000, time="20:00:00",
partition="cpu", workers=200,
).run()
Déduplication
Les étapes de dedup de DataTrove s”exécutent généralement en tant que pipelines multi-étapes (signatures → buckets → clusters → filtre).
| Méthode | Bloc |
|---|
| MinHash (approximatif) | MinhashDedup (multi-étape) |
| Sous-chaîne exacte | ExactSubstrDedup |
| Niveau phrase | SentenceDedup |
Filtres de qualité
| Filtre | Heuristique |
|---|
GopherQualityFilter | Longueur, rapports de symboles, limites de balles/ellipse |
GopherRepetitionFilter | Répétition excessive |
C4QualityFilter | Règles de style C4 (ponctuation terminale, etc.) |
FineWebQualityFilter | Heuristiques de recette FineWeb |
LanguageFilter | Seuil d”identification de langue fastText |
URLFilter | Bloquer/autoriser par URL/domaine |
Flux de travail courants
# Reproduire un pipeline web de style FineWeb (ordre conceptuel)
# WarcReader → URLFilter → Trafilatura → LanguageFilter →
# GopherQuality/Repetition → C4/FineWeb filters → MinhashDedup → JsonlWriter
# Mettre à l'échelle le pipeline identique d'un ordinateur portable au cluster en permutant l'exécuteur:
# LocalPipelineExecutor → SlurmPipelineExecutor → RayPipelineExecutor
DataTrove vs NeMo Curator
| Aspect | DataTrove | NeMo Curator |
|---|
| Calcul | CPU d”abord | GPU natif (RAPIDS) |
| Meilleur pour | Reproduction des ensembles de données FineWeb | Exécutions 10T+ token lourdes de dedup |
| Backends | Local / Slurm / Ray | Ray |
| Origine | Hugging Face | NVIDIA |
Ressources