Salta ai contenuti

NeMo Curator - Cheatsheet GPU Data Curation per LLM

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

MetodoComando
pip (moduli CPU)pip install nemo-curator
pip con CUDA extraspip install "nemo-curator[cuda12x]"
Containerusa l”immagine container NVIDIA NeMo/Curator
RequisitiGPU NVIDIA + CUDA per moduli accelerati; Ray per distribuzione

Concetti Pipeline

ConcettoSignificato
DocumentDatasetL”astrazione dataset (supportata da Dask/cuDF)
ModuleUno step di curation (filtro, dedup, classificatore, …)
PipelineModuli ordinati che formano un flusso ripetibile
BackendEsecuzione CPU (pandas) o GPU (cuDF/RAPIDS)
Ray runtimeDistribuisce il lavoro tra core/GPU/nodi

Moduli Core

StageModule(s)
Download/extractCommon Crawl, arXiv, Wikipedia downloader; text extraction
Language IDIdentificazione lingua basata su fastText
CleaningUnicode fixing, boilerplate/URL removal, riformattazione
Quality filteringFiltri euristici + quality scoring basato su classificatore
ClassificationClassificatori domain e tossicità
PII / privacyRilevamento e redazione di dati personali
DeduplicationDedup 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 dedupMetodo
EsattoDocument hashing
FuzzyMinHash + LSH (GPU via RAPIDS)
SemanticRimozione near-duplicate basata su embedding

Classificatori & Filtraggio

ClassificatoreSegnala
DomainEtichette topic/domain per controllo mixing
QualityScoring alta/bassa qualità
ToxicityContenuto unsafe per la rimozione
LanguageMantieni/scarta per lingua

Scaling

MeccanismoNota
GPU (cuDF/RAPIDS)Accelera filtraggio e dedup
Ray runtimeDistribuisce attraverso GPU e nodi
DaskOut-of-core processing per corpora enormi
CheckpointingRiprendi 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

AspettoNeMo CuratorDataTrove
AccelerazioneGPU-native (RAPIDS)CPU-first
Migliore perDedup-heavy, run novel su larga scala (10T+ token)Riproduci pipeline stile FineWeb
DistribuzioneRayLocal/Slurm/Ray executor
ModalitàTesto, immagini, video, audioTesto-focused

Risorse