Aller au contenu

DataTrove - Pipelines de traitement de données LLM

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éthodeCommande
pippip install datatrove
Avec tous les extraspip install "datatrove[all]"
Extras de traitementpip install "datatrove[processing]"
Depuis la sourcegit clone https://github.com/huggingface/datatrove && pip install -e .

Concepts principaux

ConceptSignification
PipelineUne liste ordonnée de blocs par lesquels les données circulent
BlocUne étape: lecteur, filtre, dedup, rédacteur, etc.
DocumentL”unité (text, id, metadata)
ExécuteurOù le pipeline s”exécute (Local / Slurm / Ray)
TâchesShards parallèles de la charge de travail

Blocs du pipeline

CatégorieExemples
LecteursWarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader
ExtracteursTrafilatura (HTML → texte)
FiltresLanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter
DedupMinhashDedup, SentenceDedup, ExactSubstrDedup
RédacteursJsonlWriter, ParquetWriter
TokénisationDocumentTokenizer

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écuteurUtiliser
LocalPipelineExecutorUne machine, multitraitement
SlurmPipelineExecutorClusters HPC via les travaux Slurm
RayPipelineExecutorClusters 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éthodeBloc
MinHash (approximatif)MinhashDedup (multi-étape)
Sous-chaîne exacteExactSubstrDedup
Niveau phraseSentenceDedup

Filtres de qualité

FiltreHeuristique
GopherQualityFilterLongueur, rapports de symboles, limites de balles/ellipse
GopherRepetitionFilterRépétition excessive
C4QualityFilterRègles de style C4 (ponctuation terminale, etc.)
FineWebQualityFilterHeuristiques de recette FineWeb
LanguageFilterSeuil d”identification de langue fastText
URLFilterBloquer/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

AspectDataTroveNeMo Curator
CalculCPU d”abordGPU natif (RAPIDS)
Meilleur pourReproduction des ensembles de données FineWebExécutions 10T+ token lourdes de dedup
BackendsLocal / Slurm / RayRay
OrigineHugging FaceNVIDIA

Ressources