Zum Inhalt springen

NeMo Curator - GPU Daten-Kuratierung für LLMs Spickzettel

NeMo Curator - GPU Daten-Kuratierung für LLMs Spickzettel

NVIDIA NeMo Curator ist ein Open-Source, GPU-beschleunigtes Daten-Kuratierungs-Toolkit zur Vorbereitung großer, hochqualitativer Datensätze zum Pre-Training oder Fine-Tuning von LLMs. Es erstellt wiederholbare Pipelines, die Daten herunterladen und extrahieren, Text bereinigen und normalisieren, Sprache identifizieren, qualitäts-filtern, Domain/Toxizität klassifizieren, Datenschutz-Filter anwenden und deduplizieren (exakt und fuzzy) — skalierend von einem Laptop zu Tausenden GPUs über RAPIDS/cuDF und Ray. Ab den 26.x Releases nutzt es eine Ray-basierte Pipeline-Architektur über Text, Bild, Video und Audio.

Kuration-Qualität treibt Modell-Qualität. Der teure, hochauswirkungsvolle Schritt ist normalerweise Deduplizierung; NeMo Curators GPU-Dedup ist sein Vorteil.

Installation

MethodeBefehl
pip (CPU Module)pip install nemo-curator
pip mit CUDA Extraspip install "nemo-curator[cuda12x]"
ContainerNVIDIA”s NeMo/Curator Container-Image nutzen
AnforderungenNVIDIA GPU(s) + CUDA für beschleunigte Module; Ray zur Verteilung

Pipeline-Konzepte

KonzeptBedeutung
DocumentDatasetDie Datensatz-Abstraktion (unterstützt durch Dask/cuDF)
ModuleEin Kuration-Schritt (Filter, Dedup, Klassifizierer, …)
PipelineGeordnete Module bilden einen reproduzierbaren Fluss
BackendCPU (pandas) oder GPU (cuDF/RAPIDS) Ausführung
Ray RuntimeVerteilt Arbeit über Cores/GPUs/Knoten

Kern-Module

StufeModul(e)
Download/ExtractCommon Crawl, arXiv, Wikipedia Downloader; Text-Extraktion
Language IDfastText-basierte Sprach-Identifikation
BereinigungUnicode-Fixing, Boilerplate/URL-Entfernung, Reformat
Qualitäts-FilterungHeuristische Filter + Klassifizierer-basierte Qualitäts-Bewertung
KlassifizierungDomain- und Toxizitäts-Klassifizierer
PII / DatenschutzPersönliche Daten erkennen und redigieren
DeduplizierungExakt (Hash) und Fuzzy (MinHash/LSH) Dedup auf GPU

Qualitäts-Filterung (Skizze)

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)

Deduplizierung (Skizze)

from nemo_curator import FuzzyDuplicates, FuzzyDuplicatesConfig

config = FuzzyDuplicatesConfig(
    cache_dir="./cache",
    num_buckets=20,
    hashes_per_bucket=13,   # MinHash/LSH Parameter
)
fuzzy = FuzzyDuplicates(config=config)
duplicates = fuzzy(dataset)        # GPU-beschleunigte Nähe-Dup-Erkennung
deduped = dataset.df[~dataset.df["id"].isin(duplicates.df["id"])]
Dedup TypMethode
ExaktDokument Hashing
FuzzyMinHash + LSH (GPU via RAPIDS)
SemanticEmbedding-basierte Nähe-Duplikat-Entfernung

Klassifizierer & Filterung

KlassifiziererFlags
DomainTopic/Domain-Labels für Mischungs-Kontrolle
QualitätHoch/Niedrig Qualitäts-Bewertung
ToxizitätUnsicherer Inhalt zur Entfernung
SpracheNach Sprache behalten/verwerfen

Skalierung

MechanismusNotiz
GPU (cuDF/RAPIDS)Beschleunigt Filterung und Dedup
Ray RuntimeVerteilt über GPUs und Knoten
DaskOut-of-Core Verarbeitung für riesige Korpora
CheckpointingLange Kuration-Läufe fortsetzen

Häufige Workflows

# Reproduzierbare Pre-Training-Kuratierung: bereinigen → Qualitäts-Filter → Dedup
from nemo_curator.datasets import DocumentDataset
ds = DocumentDataset.read_json("raw/*.jsonl", backend="cudf")
# 1) Language ID + Bereinigung  2) Qualitäts ScoreFilter  3) FuzzyDuplicates
# Den kurierten, dedupizierten Korpus zum Training schreiben

NeMo Curator vs DataTrove

AspektNeMo CuratorDataTrove
BeschleunigungGPU-Native (RAPIDS)CPU-First
Am besten fürDedup-Heavy, neue große Läufe (10T+ Tokens)Reproduzieren von FineWeb-Style Pipelines
VerteilungRayLokal/Slurm/Ray Executors
ModalitätenText, Bild, Video, AudioText-fokussiert

Ressourcen