NeMo Curator - Curación de Datos en GPU para LLMs
NVIDIA NeMo Curator es un conjunto de herramientas de curación de datos acelerado por GPU de código abierto para preparar conjuntos de datos a gran escala y alta calidad para pre-entrenar o ajustar finamente LLMs. Construye canalizaciones repetibles que descargan y extraen datos, limpian y normalizan texto, identifican idioma, filtran por calidad, clasifican dominio/toxicidad, aplican filtros de privacidad, y dedulican (exacta y difusa) — escalando desde un portátil a miles de GPUs vía RAPIDS/cuDF y Ray. A partir de los lanzamientos 26.x utiliza una arquitectura de canalización basada en Ray a través de texto, imagen, video y audio.
La calidad de curación impulsa la calidad del modelo. El paso costoso e impactante es generalmente la deduplicación; la dedup en GPU de NeMo Curator es su ventaja titular.
Instalación
| Método | Comando |
|---|
| pip (módulos CPU) | pip install nemo-curator |
| pip con extras CUDA | pip install "nemo-curator[cuda12x]" |
| Contenedor | usa imagen de contenedor NeMo/Curator de NVIDIA |
| Requisitos | GPU de NVIDIA + CUDA para módulos acelerados; Ray para distribución |
Conceptos de Canalización
| Concepto | Significado |
|---|
DocumentDataset | La abstracción de conjunto de datos (respaldada por Dask/cuDF) |
| Módulo | Un paso de curación (filtro, dedup, clasificador, …) |
| Canalización | Módulos ordenados formando un flujo reproducible |
| Backend | Ejecución CPU (pandas) o GPU (cuDF/RAPIDS) |
| Tiempo de ejecución Ray | Distribuye trabajo entre núcleos/GPUs/nodos |
Módulos Principales
| Etapa | Módulo(s) |
|---|
| Descargar/extractor | Descargadores de Common Crawl, arXiv, Wikipedia; extracción de texto |
| ID de idioma | Identificación de idioma basada en fastText |
| Limpieza | Corrección Unicode, eliminación de código estándar/URL, reformateo |
| Filtrado de calidad | Filtros heurísticos + puntuación de calidad basada en clasificador |
| Clasificación | Clasificadores de dominio y toxicidad |
| PII / privacidad | Detecta y redacta datos personales |
| Deduplicación | Dedup exacta (hash) y difusa (MinHash/LSH) en GPU |
Filtrado de Calidad (bosquejo)
from nemo_curator import ScoreFilter
from nemo_curator.filters import WordCountFilter
from nemo_curator.datasets import DocumentDataset
dataset = DocumentDataset.read_json("input/*.jsonl", backend="cudf")
filter_step = ScoreFilter(
WordCountFilter(min_words=50, max_words=100000),
text_field="text",
)
clean = filter_step(dataset)
clean.to_json("filtered/", write_to_filename=True)
Deduplicación (bosquejo)
from nemo_curator import FuzzyDuplicates, FuzzyDuplicatesConfig
config = FuzzyDuplicatesConfig(
cache_dir="./cache",
num_buckets=20,
hashes_per_bucket=13, # Parámetros MinHash/LSH
)
fuzzy = FuzzyDuplicates(config=config)
duplicates = fuzzy(dataset) # Detección de casi-duplicados acelerada por GPU
deduped = dataset.df[~dataset.df["id"].isin(duplicates.df["id"])]
| Tipo de dedup | Método |
|---|
| Exacta | Hashing de documento |
| Difusa | MinHash + LSH (GPU vía RAPIDS) |
| Semántica | Eliminación de cuasi-duplicados basada en incrustación |
Clasificadores y Filtrado
| Clasificador | Banderas |
|---|
| Dominio | Etiquetas de tema/dominio para control de mezcla |
| Calidad | Puntuación de calidad alta/baja |
| Toxicidad | Contenido inseguro para eliminación |
| Idioma | Mantener/soltar por idioma |
Escalado
| Mecanismo | Nota |
|---|
| GPU (cuDF/RAPIDS) | Acelera filtrado y dedup |
| Tiempo de ejecución Ray | Distribuye entre GPUs y nodos |
| Dask | Procesamiento fuera de núcleo para corpus enormes |
| Punto de control | Reanuda ejecuciones de curación largas |
Flujos de Trabajo Comunes
# Curación reproducible de pre-entrenamiento: limpia → filtra por calidad → dedup
from nemo_curator.datasets import DocumentDataset
ds = DocumentDataset.read_json("raw/*.jsonl", backend="cudf")
# 1) ID de idioma + limpieza 2) ScoreFilter de calidad 3) FuzzyDuplicates
# escribe el corpus curado y deduplicado para entrenamiento
NeMo Curator vs DataTrove
| Aspecto | NeMo Curator | DataTrove |
|---|
| Aceleración | GPU-nativo (RAPIDS) | CPU-primero |
| Mejor para | Ejecuciones pesadas en dedup, novela grande (10T+ tokens) | Reproducción de canalizaciones estilo FineWeb |
| Distribución | Ray | Ejecutores local/Slurm/Ray |
| Modalidades | Texto, imagen, video, audio | Enfocado en texto |
Recursos