Ir al contenido

DataTrove - Canalizaciones de Procesamiento de Datos para LLMs

DataTrove - Canalizaciones de Procesamiento de Datos para LLMs

DataTrove es una biblioteca de código abierto de Hugging Face para procesar, filtrar y deduplicar grandes conjuntos de datos de texto para entrenamiento de LLMs. Proporciona bloques de canalización componibles — lectores, filtros, etapas de dedup, escritores — que se ejecutan sin cambios en backends de ejecución: localmente, en un clúster Slurm, o en Ray. Es la implementación de referencia detrás de los conjuntos de datos FineWeb y FineWeb-Edu, lo que la convierte en la herramienta de referencia cuando quieres reproducir o adaptar una canalización de curación publicada enfocada en CPU.

Instalación

MétodoComando
pippip install datatrove
Con todos los extraspip install "datatrove[all]"
Extras de procesamientopip install "datatrove[processing]"
Desde fuentegit clone https://github.com/huggingface/datatrove && pip install -e .

Conceptos Principales

ConceptoSignificado
CanalizaciónUna lista ordenada de bloques que flujo de datos atraviesa
BloqueUn paso: lector, filtro, dedup, escritor, etc.
DocumentoLa unidad (text, id, metadata)
EjecutorDónde se ejecuta la canalización (Local / Slurm / Ray)
TareasFragmentos paralelos de la carga de trabajo

Bloques de Canalización

CategoríaEjemplos
LectoresWarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader
ExtractoresTrafilatura (HTML → texto)
FiltrosLanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter
DedupMinhashDedup, SentenceDedup, ExactSubstrDedup
EscritoresJsonlWriter, ParquetWriter
TokenizaciónDocumentTokenizer

Una Canalización Básica

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

Ejecutores (Misma Canalización, Diferentes Backends)

EjecutorUso
LocalPipelineExecutorUna máquina, multiprocesamiento
SlurmPipelineExecutorClústeres HPC vía trabajos Slurm
RayPipelineExecutorClústeres Ray
from datatrove.executor import SlurmPipelineExecutor
SlurmPipelineExecutor(
    pipeline=pipeline, tasks=1000, time="20:00:00",
    partition="cpu", workers=200,
).run()

Deduplicación

Las etapas de dedup de DataTrove típicamente se ejecutan como canalizaciones de múltiples pasos (firmas → cubos → clusters → filtro).

MétodoBloque
MinHash (difusa)MinhashDedup (múltiples etapas)
Substring exactoExactSubstrDedup
Nivel de oraciónSentenceDedup

Filtros de Calidad

FiltroHeurística
GopherQualityFilterLongitud, ratios de símbolo, límites de bala/elipsis
GopherRepetitionFilterRepetición excesiva
C4QualityFilterReglas estilo C4 (puntuación terminal, etc.)
FineWebQualityFilterHeurísticas de receta FineWeb
LanguageFilterUmbral de ID de idioma fastText
URLFilterBloquea/permite por URL/dominio

Flujos de Trabajo Comunes

# Reproduce una canalización de web estilo FineWeb (orden conceptual)
# WarcReader → URLFilter → Trafilatura → LanguageFilter →
# GopherQuality/Repetition → Filtros C4/FineWeb → MinhashDedup → JsonlWriter
# Escala la canalización idéntica de portátil a clúster intercambiando el ejecutor:
#   LocalPipelineExecutor  →  SlurmPipelineExecutor  →  RayPipelineExecutor

DataTrove vs NeMo Curator

AspectoDataTroveNeMo Curator
ComputaciónCPU-primeroGPU-nativo (RAPIDS)
Mejor paraReproducción de conjuntos de datos estilo FineWebEjecuciones 10T+ token pesadas en dedup
BackendsLocal / Slurm / RayRay
OrigenHugging FaceNVIDIA

Recursos