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
| Methode | Befehl |
|---|
| pip (CPU Module) | pip install nemo-curator |
| pip mit CUDA Extras | pip install "nemo-curator[cuda12x]" |
| Container | NVIDIA”s NeMo/Curator Container-Image nutzen |
| Anforderungen | NVIDIA GPU(s) + CUDA für beschleunigte Module; Ray zur Verteilung |
Pipeline-Konzepte
| Konzept | Bedeutung |
|---|
DocumentDataset | Die Datensatz-Abstraktion (unterstützt durch Dask/cuDF) |
| Module | Ein Kuration-Schritt (Filter, Dedup, Klassifizierer, …) |
| Pipeline | Geordnete Module bilden einen reproduzierbaren Fluss |
| Backend | CPU (pandas) oder GPU (cuDF/RAPIDS) Ausführung |
| Ray Runtime | Verteilt Arbeit über Cores/GPUs/Knoten |
Kern-Module
| Stufe | Modul(e) |
|---|
| Download/Extract | Common Crawl, arXiv, Wikipedia Downloader; Text-Extraktion |
| Language ID | fastText-basierte Sprach-Identifikation |
| Bereinigung | Unicode-Fixing, Boilerplate/URL-Entfernung, Reformat |
| Qualitäts-Filterung | Heuristische Filter + Klassifizierer-basierte Qualitäts-Bewertung |
| Klassifizierung | Domain- und Toxizitäts-Klassifizierer |
| PII / Datenschutz | Persönliche Daten erkennen und redigieren |
| Deduplizierung | Exakt (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 Typ | Methode |
|---|
| Exakt | Dokument Hashing |
| Fuzzy | MinHash + LSH (GPU via RAPIDS) |
| Semantic | Embedding-basierte Nähe-Duplikat-Entfernung |
Klassifizierer & Filterung
| Klassifizierer | Flags |
|---|
| Domain | Topic/Domain-Labels für Mischungs-Kontrolle |
| Qualität | Hoch/Niedrig Qualitäts-Bewertung |
| Toxizität | Unsicherer Inhalt zur Entfernung |
| Sprache | Nach Sprache behalten/verwerfen |
Skalierung
| Mechanismus | Notiz |
|---|
| GPU (cuDF/RAPIDS) | Beschleunigt Filterung und Dedup |
| Ray Runtime | Verteilt über GPUs und Knoten |
| Dask | Out-of-Core Verarbeitung für riesige Korpora |
| Checkpointing | Lange 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
| Aspekt | NeMo Curator | DataTrove |
|---|
| Beschleunigung | GPU-Native (RAPIDS) | CPU-First |
| Am besten für | Dedup-Heavy, neue große Läufe (10T+ Tokens) | Reproduzieren von FineWeb-Style Pipelines |
| Verteilung | Ray | Lokal/Slurm/Ray Executors |
| Modalitäten | Text, Bild, Video, Audio | Text-fokussiert |
Ressourcen