NeMo Curator - Cheatsheet GPU Data Curation per LLM
NVIDIA NeMo Curator è un toolkit open-source GPU-accelerated data curation per preparare dataset su larga scala e di alta qualità per il pretraining o fine-tuning di LLM. Costruisce pipeline ripetibili che scaricano ed estraggono dati, puliscono e normalizzano il testo, identificano la lingua, quality-filter, classificano il dominio/tossicità, applicano filtri di privacy, e deduplicano (esatta e fuzzy) — scalando da un laptop a migliaia di GPU via RAPIDS/cuDF e Ray. A partire dalle release 26.x usa un”architettura pipeline basata su Ray attraverso testo, immagini, video e audio.
La qualità della curation guida la qualità del modello. Lo step caro e ad alto impatto è solitamente la deduplicazione; il dedup GPU di NeMo Curator è il suo vantaggio principale.
Installazione
| Metodo | Comando |
|---|
| pip (moduli CPU) | pip install nemo-curator |
| pip con CUDA extras | pip install "nemo-curator[cuda12x]" |
| Container | usa l”immagine container NVIDIA NeMo/Curator |
| Requisiti | GPU NVIDIA + CUDA per moduli accelerati; Ray per distribuzione |
Concetti Pipeline
| Concetto | Significato |
|---|
DocumentDataset | L”astrazione dataset (supportata da Dask/cuDF) |
| Module | Uno step di curation (filtro, dedup, classificatore, …) |
| Pipeline | Moduli ordinati che formano un flusso ripetibile |
| Backend | Esecuzione CPU (pandas) o GPU (cuDF/RAPIDS) |
| Ray runtime | Distribuisce il lavoro tra core/GPU/nodi |
Moduli Core
| Stage | Module(s) |
|---|
| Download/extract | Common Crawl, arXiv, Wikipedia downloader; text extraction |
| Language ID | Identificazione lingua basata su fastText |
| Cleaning | Unicode fixing, boilerplate/URL removal, riformattazione |
| Quality filtering | Filtri euristici + quality scoring basato su classificatore |
| Classification | Classificatori domain e tossicità |
| PII / privacy | Rilevamento e redazione di dati personali |
| Deduplication | Dedup esatto (hash) e fuzzy (MinHash/LSH) su GPU |
Quality Filtering (sketch)
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)
Deduplication (sketch)
from nemo_curator import FuzzyDuplicates, FuzzyDuplicatesConfig
config = FuzzyDuplicatesConfig(
cache_dir="./cache",
num_buckets=20,
hashes_per_bucket=13, # parametri MinHash/LSH
)
fuzzy = FuzzyDuplicates(config=config)
duplicates = fuzzy(dataset) # rilevamento near-dup GPU-accelerato
deduped = dataset.df[~dataset.df["id"].isin(duplicates.df["id"])]
| Tipo di dedup | Metodo |
|---|
| Esatto | Document hashing |
| Fuzzy | MinHash + LSH (GPU via RAPIDS) |
| Semantic | Rimozione near-duplicate basata su embedding |
Classificatori & Filtraggio
| Classificatore | Segnala |
|---|
| Domain | Etichette topic/domain per controllo mixing |
| Quality | Scoring alta/bassa qualità |
| Toxicity | Contenuto unsafe per la rimozione |
| Language | Mantieni/scarta per lingua |
Scaling
| Meccanismo | Nota |
|---|
| GPU (cuDF/RAPIDS) | Accelera filtraggio e dedup |
| Ray runtime | Distribuisce attraverso GPU e nodi |
| Dask | Out-of-core processing per corpora enormi |
| Checkpointing | Riprendi lunghe esecuzioni di curation |
Flussi di Lavoro Comuni
# Curation riproducibile per pretraining: pulisci → quality filter → dedup
from nemo_curator.datasets import DocumentDataset
ds = DocumentDataset.read_json("raw/*.jsonl", backend="cudf")
# 1) language ID + cleaning 2) quality ScoreFilter 3) FuzzyDuplicates
# scrivi il corpus curato e deduplicato per il training
NeMo Curator vs DataTrove
| Aspetto | NeMo Curator | DataTrove |
|---|
| Accelerazione | GPU-native (RAPIDS) | CPU-first |
| Migliore per | Dedup-heavy, run novel su larga scala (10T+ token) | Riproduci pipeline stile FineWeb |
| Distribuzione | Ray | Local/Slurm/Ray executor |
| Modalità | Testo, immagini, video, audio | Testo-focused |
Risorse