NeMo Curator - تجميع بيانات GPU للنماذج اللغوية
NVIDIA NeMo Curator هي مجموعة أدوات تجميع البيانات المسرعة بـ GPU مفتوحة المصدر لتحضير مجموعات بيانات كبيرة الحجم وعالية الجودة لـ pretraining أو fine-tune النماذج اللغوية. إنها تبني خطوط أنابيب قابلة للتكرار التي تنزل واستخراج البيانات وتنظيف وتطبيع النص وتحديد اللغة والتصفية والجودة وتطبيق عوامل الخصوصية و الازدواج (دقيق وضبابي) — تتسع من الكمبيوتر المحمول إلى آلاف وحدات معالجة الرسومات عبر RAPIDS/cuDF و Ray. اعتباراً من إصدارات 26.x تستخدم معمارية خط أنابيب Ray عبر النصوص والصور والفيديو والصوت.
جودة التجميع تقود جودة النموذج. الخطوة المكلفة والعالية التأثير عادة ما تكون الازدواج؛ إزالة GPU من NeMo Curator هي ميزتها الرئيسية.
التثبيت
| الطريقة | الأمر |
|---|
| pip (CPU modules) | pip install nemo-curator |
| pip with CUDA extras | pip install "nemo-curator[cuda12x]" |
| Container | use NVIDIA”s NeMo/Curator container image |
| Requirements | NVIDIA GPU(s) + CUDA for accelerated modules; Ray for distribution |
مفاهيم خط الأنابيب
| المفهوم | المعنى |
|---|
DocumentDataset | التجريد مجموعة البيانات (مدعوم من Dask/cuDF) |
| Module | خطوة التجميع (عامل التصفية والإزالة والمصنف …) |
| Pipeline | وحدات مرتبة تشكل تدفقاً قابلاً للتكرار |
| Backend | تنفيذ CPU (pandas) أو GPU (cuDF/RAPIDS) |
| Ray runtime | يوزع العمل عبر النوى/GPUs/العقد |
الوحدات الأساسية
| المرحلة | الوحدة(s) |
|---|
| Download/extract | Common Crawl, arXiv, Wikipedia downloaders; text extraction |
| Language ID | fastText-based language identification |
| Cleaning | Unicode fixing, boilerplate/URL removal, reformatting |
| Quality filtering | Heuristic filters + classifier-based quality scoring |
| Classification | Domain and toxicity classifiers |
| PII / privacy | Detect and redact personal data |
| Deduplication | Exact (hash) and fuzzy (MinHash/LSH) dedup on GPU |
تصفية الجودة (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)
الازدواج (sketch)
from nemo_curator import FuzzyDuplicates, FuzzyDuplicatesConfig
config = FuzzyDuplicatesConfig(
cache_dir="./cache",
num_buckets=20,
hashes_per_bucket=13, # MinHash/LSH parameters
)
fuzzy = FuzzyDuplicates(config=config)
duplicates = fuzzy(dataset) # GPU-accelerated near-dup detection
deduped = dataset.df[~dataset.df["id"].isin(duplicates.df["id"])]
| نوع Dedup | الطريقة |
|---|
| Exact | Document hashing |
| Fuzzy | MinHash + LSH (GPU via RAPIDS) |
| Semantic | Embedding-based near-duplicate removal |
المصنفات والتصفية
| المصنف | الأعلام |
|---|
| Domain | Topic/domain labels for mixing control |
| Quality | High/low quality scoring |
| Toxicity | Unsafe content for removal |
| Language | Keep/drop by language |
التوسع
| الآلية | ملاحظة |
|---|
| GPU (cuDF/RAPIDS) | Accelerates filtering and dedup |
| Ray runtime | Distributes across GPUs and nodes |
| Dask | Out-of-core processing for huge corpora |
| Checkpointing | Resume long curation runs |
سير العمل المشتركة
# Reproducible pretraining curation: clean → 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
# write the curated, deduplicated corpus for training
NeMo Curator مقابل DataTrove
| الجانب | NeMo Curator | DataTrove |
|---|
| Acceleration | GPU-native (RAPIDS) | CPU-first |
| Best for | Dedup-heavy, novel large runs (10T+ tokens) | Reproducing FineWeb-style pipelines |
| Distribution | Ray | Local/Slurm/Ray executors |
| Modalities | Text, image, video, audio | Text-focused |
الموارد