Pular para o conteúdo

DataTrove - Pipelines de Processamento de Dados para LLM

DataTrove - Pipelines de Processamento de Dados para LLM

DataTrove é uma biblioteca de código aberto da Hugging Face para processar, filtrar e deduplicar grandes datasets de texto para treinamento de LLM. Fornece um conjunto de blocos de pipeline compostos — leitores, filtros, estágios de dedup, escritores — que executam sem mudanças entre backends de execução: localmente, em um cluster Slurm ou em Ray. É a implementação de referência por trás dos datasets FineWeb e FineWeb-Edu, o que o torna a ferramenta de referência quando você quer reproduzir ou adaptar um pipeline publicado de CPU-first e curação.

Instalação

MétodoComando
pippip install datatrove
Com todos os extraspip install "datatrove[all]"
Extras de processamentopip install "datatrove[processing]"
From sourcegit clone https://github.com/huggingface/datatrove && pip install -e .

Conceitos Principais

ConceitoSignificado
PipelineUma lista ordenada de blocos pelos quais os dados fluem
BlocoUm passo: leitor, filtro, dedup, escritor, etc.
DocumentoA unidade (text, id, metadata)
ExecutorOnde o pipeline executa (Local / Slurm / Ray)
TarefasShards paralelos da carga de trabalho

Blocos de Pipeline

CategoriaExemplos
LeitoresWarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader
ExtratoresTrafilatura (HTML → texto)
FiltrosLanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter
DedupMinhashDedup, SentenceDedup, ExactSubstrDedup
EscritoresJsonlWriter, ParquetWriter
TokenizaçãoDocumentTokenizer

Um Pipeline Básico

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()

Executores (Mesmo Pipeline, Diferentes Backends)

ExecutorUso
LocalPipelineExecutorUma máquina, multiprocessing
SlurmPipelineExecutorClusters HPC via jobs Slurm
RayPipelineExecutorClusters Ray
from datatrove.executor import SlurmPipelineExecutor
SlurmPipelineExecutor(
    pipeline=pipeline, tasks=1000, time="20:00:00",
    partition="cpu", workers=200,
).run()

Deduplicação

As etapas de dedup do DataTrove normalmente executam como pipelines multi-etapas (assinaturas → buckets → clusters → filtro).

MétodoBloco
MinHash (fuzzy)MinhashDedup (multi-etapa)
Substring exatoExactSubstrDedup
Nível de sentençaSentenceDedup

Filtros de Qualidade

FiltroHeurística
GopherQualityFilterComprimento, proporções de símbolo, limites de bullet/ellipsis
GopherRepetitionFilterRepetição excessiva
C4QualityFilterRegras estilo C4 (pontuação terminal, etc.)
FineWebQualityFilterHeurísticas de receita FineWeb
LanguageFilterLimiar ID de idioma fastText
URLFilterBloquear/permitir por URL/domínio

Fluxos de Trabalho Comuns

# Reproduza um pipeline web estilo FineWeb (ordem conceitual)
# WarcReader → URLFilter → Trafilatura → LanguageFilter →
# GopherQuality/Repetition → C4/FineWeb filters → MinhashDedup → JsonlWriter
# Dimensione o pipeline idêntico de laptop para cluster trocando o executor:
#   LocalPipelineExecutor  →  SlurmPipelineExecutor  →  RayPipelineExecutor

DataTrove vs NeMo Curator

AspectoDataTroveNeMo Curator
ComputaçãoPrimeira em CPUGPU-nativa (RAPIDS)
Melhor paraReproduzir datasets estilo FineWebDedup-pesado 10T+ token runs
BackendsLocal / Slurm / RayRay
OrigemHugging FaceNVIDIA

Recursos