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étodo | Comando |
|---|
| pip | pip install datatrove |
| Com todos os extras | pip install "datatrove[all]" |
| Extras de processamento | pip install "datatrove[processing]" |
| From source | git clone https://github.com/huggingface/datatrove && pip install -e . |
Conceitos Principais
| Conceito | Significado |
|---|
| Pipeline | Uma lista ordenada de blocos pelos quais os dados fluem |
| Bloco | Um passo: leitor, filtro, dedup, escritor, etc. |
| Documento | A unidade (text, id, metadata) |
| Executor | Onde o pipeline executa (Local / Slurm / Ray) |
| Tarefas | Shards paralelos da carga de trabalho |
Blocos de Pipeline
| Categoria | Exemplos |
|---|
| Leitores | WarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader |
| Extratores | Trafilatura (HTML → texto) |
| Filtros | LanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter |
| Dedup | MinhashDedup, SentenceDedup, ExactSubstrDedup |
| Escritores | JsonlWriter, ParquetWriter |
| Tokenização | DocumentTokenizer |
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)
| Executor | Uso |
|---|
LocalPipelineExecutor | Uma máquina, multiprocessing |
SlurmPipelineExecutor | Clusters HPC via jobs Slurm |
RayPipelineExecutor | Clusters 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étodo | Bloco |
|---|
| MinHash (fuzzy) | MinhashDedup (multi-etapa) |
| Substring exato | ExactSubstrDedup |
| Nível de sentença | SentenceDedup |
Filtros de Qualidade
| Filtro | Heurística |
|---|
GopherQualityFilter | Comprimento, proporções de símbolo, limites de bullet/ellipsis |
GopherRepetitionFilter | Repetição excessiva |
C4QualityFilter | Regras estilo C4 (pontuação terminal, etc.) |
FineWebQualityFilter | Heurísticas de receita FineWeb |
LanguageFilter | Limiar ID de idioma fastText |
URLFilter | Bloquear/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
| Aspecto | DataTrove | NeMo Curator |
|---|
| Computação | Primeira em CPU | GPU-nativa (RAPIDS) |
| Melhor para | Reproduzir datasets estilo FineWeb | Dedup-pesado 10T+ token runs |
| Backends | Local / Slurm / Ray | Ray |
| Origem | Hugging Face | NVIDIA |
Recursos