NVIDIA NeMo Curator é um toolkit de curação de dados acelerado por GPU e de código aberto para preparar datasets em larga escala e alta qualidade para pré-treino ou fine-tuning de LLMs. Constrói pipelines reproduzíveis que baixam e extraem dados, limpam e normalizam texto, identificam idioma, filtram por qualidade, classificam domínio/toxidade, aplicam filtros de privacidade e deduplicam (exato e fuzzy) — dimensionando de um laptop para milhares de GPUs via RAPIDS/cuDF e Ray. A partir das versões 26.x usa uma arquitetura de pipeline baseada em Ray em texto, imagem, vídeo e áudio.
A qualidade de curação impulsiona a qualidade do modelo. O passo caro e de alto impacto geralmente é deduplicação; o dedup com GPU do NeMo Curator é sua vantagem principal.
Instalação
| Método | Comando |
|---|
| pip (módulos CPU) | pip install nemo-curator |
| pip com extras CUDA | pip install "nemo-curator[cuda12x]" |
| Container | use imagem de container NeMo/Curator da NVIDIA |
| Requisitos | GPU NVIDIA + CUDA para módulos acelerados; Ray para distribuição |
Conceitos de Pipeline
| Conceito | Significado |
|---|
DocumentDataset | A abstração de dataset (baseada em Dask/cuDF) |
| Módulo | Uma etapa de curação (filtro, dedup, classificador, …) |
| Pipeline | Módulos ordenados formando um fluxo reproduzível |
| Backend | Execução CPU (pandas) ou GPU (cuDF/RAPIDS) |
| Runtime Ray | Distribui trabalho entre cores/GPUs/nós |
Módulos Principais
| Estágio | Módulo(s) |
|---|
| Download/extração | Common Crawl, arXiv, downloaders Wikipedia; extração de texto |
| ID de idioma | Identificação de idioma baseada em fastText |
| Limpeza | Correção Unicode, remoção de boilerplate/URL, reformatação |
| Filtragem de qualidade | Filtros heurísticos + pontuação de qualidade baseada em classificador |
| Classificação | Classificadores de domínio e toxidade |
| PII / privacidade | Detecte e remova dados pessoais |
| Deduplicação | Dedup exato (hash) e fuzzy (MinHash/LSH) em GPU |
Filtragem de Qualidade (esboço)
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)
Deduplicação (esboço)
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) # detecção de near-dup acelerada por GPU
deduped = dataset.df[~dataset.df["id"].isin(duplicates.df["id"])]
| Tipo de dedup | Método |
|---|
| Exato | Hashing de documento |
| Fuzzy | MinHash + LSH (GPU via RAPIDS) |
| Semântico | Remoção de near-duplicate baseada em embedding |
Classificadores e Filtragem
| Classificador | Sinais |
|---|
| Domínio | Rótulos de tópico/domínio para controle de mixing |
| Qualidade | Pontuação de qualidade alta/baixa |
| Toxidade | Conteúdo inseguro para remoção |
| Idioma | Mantenha/descarte por idioma |
Dimensionamento
| Mecanismo | Nota |
|---|
| GPU (cuDF/RAPIDS) | Acelera filtragem e dedup |
| Runtime Ray | Distribui entre GPUs e nós |
| Dask | Processamento fora do core para corpora enormes |
| Checkpointing | Retome execuções de curação longas |
Fluxos de Trabalho Comuns
# Curação reproduzível de pré-treinamento: limpar → filtro de qualidade → dedup
from nemo_curator.datasets import DocumentDataset
ds = DocumentDataset.read_json("raw/*.jsonl", backend="cudf")
# 1) ID de idioma + limpeza 2) ScoreFilter de qualidade 3) FuzzyDuplicates
# escreva o corpus curado e deduplicado para treinamento
NeMo Curator vs DataTrove
| Aspecto | NeMo Curator | DataTrove |
|---|
| Aceleração | GPU-nativa (RAPIDS) | Primeira em CPU |
| Melhor para | Execuções pesadas em dedup, novel 10T+ tokens | Reproduzir pipelines estilo FineWeb |
| Distribuição | Ray | Executores local/Slurm/Ray |
| Modalidades | Texto, imagem, vídeo, áudio | Focado em texto |
Recursos