Pular para o conteúdo

NeMo Curator - Curação de Dados com GPU para LLMs

NeMo Curator - Curação de Dados com GPU para LLMs

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étodoComando
pip (módulos CPU)pip install nemo-curator
pip com extras CUDApip install "nemo-curator[cuda12x]"
Containeruse imagem de container NeMo/Curator da NVIDIA
RequisitosGPU NVIDIA + CUDA para módulos acelerados; Ray para distribuição

Conceitos de Pipeline

ConceitoSignificado
DocumentDatasetA abstração de dataset (baseada em Dask/cuDF)
MóduloUma etapa de curação (filtro, dedup, classificador, …)
PipelineMódulos ordenados formando um fluxo reproduzível
BackendExecução CPU (pandas) ou GPU (cuDF/RAPIDS)
Runtime RayDistribui trabalho entre cores/GPUs/nós

Módulos Principais

EstágioMódulo(s)
Download/extraçãoCommon Crawl, arXiv, downloaders Wikipedia; extração de texto
ID de idiomaIdentificação de idioma baseada em fastText
LimpezaCorreção Unicode, remoção de boilerplate/URL, reformatação
Filtragem de qualidadeFiltros heurísticos + pontuação de qualidade baseada em classificador
ClassificaçãoClassificadores de domínio e toxidade
PII / privacidadeDetecte e remova dados pessoais
DeduplicaçãoDedup 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 dedupMétodo
ExatoHashing de documento
FuzzyMinHash + LSH (GPU via RAPIDS)
SemânticoRemoção de near-duplicate baseada em embedding

Classificadores e Filtragem

ClassificadorSinais
DomínioRótulos de tópico/domínio para controle de mixing
QualidadePontuação de qualidade alta/baixa
ToxidadeConteúdo inseguro para remoção
IdiomaMantenha/descarte por idioma

Dimensionamento

MecanismoNota
GPU (cuDF/RAPIDS)Acelera filtragem e dedup
Runtime RayDistribui entre GPUs e nós
DaskProcessamento fora do core para corpora enormes
CheckpointingRetome 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

AspectoNeMo CuratorDataTrove
AceleraçãoGPU-nativa (RAPIDS)Primeira em CPU
Melhor paraExecuções pesadas em dedup, novel 10T+ tokensReproduzir pipelines estilo FineWeb
DistribuiçãoRayExecutores local/Slurm/Ray
ModalidadesTexto, imagem, vídeo, áudioFocado em texto

Recursos