NeMo Curator - LLM 用 GPU データキュレーション チートシート
NVIDIA NeMo Curator はオープンソースのGPU 加速データキュレーションツールキット — LLM をプリトレイン又はファインチューンするための大規模で高品質なデータセットの準備。ダウンロードおよび抽出、テキストのクリーンおよび正規化、言語識別、品質フィルタ、分類ドメイン/毒性、プライバシーフィルタを適用、重複排除(完全および曖昧な)の反復パイプラインを構築 — RAPIDS/cuDF および Ray を通じてラップトップから数千 GPU にスケール。26.x リリースの時点で、テキスト、イメージ、ビデオ、オーディオ全体で Ray ベースのパイプラインアーキテクチャを使用。
キュレーション品質はモデル品質を駆動。通常の高額で高インパクトなステップは重複排除;NeMo Curator の GPU 重複排除はそのヘッドラインアドバンテージ。
インストール
| 方法 | コマンド |
|---|
| pip(CPU モジュール) | pip install nemo-curator |
| CUDA エクストラ付き pip | pip install "nemo-curator[cuda12x]" |
| コンテナ | NVIDIA の NeMo/Curator コンテナイメージを使用 |
| 要件 | GPU(複数)+ 加速モジュール用 CUDA;分配用 Ray |
パイプラインコンセプト
| コンセプト | 意味 |
|---|
DocumentDataset | データセット抽象化(Dask/cuDF バックアップ) |
| モジュール | キュレーションステップ(フィルタ、重複排除、分類器…) |
| パイプライン | 反復可能なフローを形成する順序付きモジュール |
| バックエンド | CPU(pandas)または GPU(cuDF/RAPIDS)実行 |
| Ray ランタイム | コア/GPU/ノード全体で作業を分配 |
コアモジュール
| ステージ | モジュール |
|---|
| ダウンロード/抽出 | Common Crawl、arXiv、Wikipedia ダウンローダー;テキスト抽出 |
| 言語 ID | fastText ベースの言語識別 |
| クリーニング | Unicode 修正、ボイラープレート/URL 削除、再フォーマット |
| 品質フィルタリング | ヒューリスティックフィルタ + 分類器ベースの品質スコアリング |
| 分類 | ドメインおよび毒性分類器 |
| PII / プライバシー | 個人データを検出および削除 |
| 重複排除 | 完全(ハッシュ)および曖昧(MinHash/LSH)GPU 上の重複排除 |
品質フィルタリング(スケッチ)
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)
重複排除(スケッチ)
from nemo_curator import FuzzyDuplicates, FuzzyDuplicatesConfig
config = FuzzyDuplicatesConfig(
cache_dir="./cache",
num_buckets=20,
hashes_per_bucket=13, # MinHash/LSH パラメータ
)
fuzzy = FuzzyDuplicates(config=config)
duplicates = fuzzy(dataset) # GPU 加速近重複検出
deduped = dataset.df[~dataset.df["id"].isin(duplicates.df["id"])]
| 重複排除タイプ | メソッド |
|---|
| 完全 | ドキュメントハッシング |
| 曖昧 | MinHash + LSH(RAPIDS 経由 GPU) |
| セマンティック | 埋め込みベースの近重複削除 |
分類器 & フィルタリング
| 分類器 | フラグ |
|---|
| ドメイン | ミックス制御用トピック/ドメインラベル |
| 品質 | 高/低品質スコアリング |
| 毒性 | 削除用アンセーフコンテンツ |
| 言語 | 言語別に保持/削除 |
スケーリング
| メカニズム | 注釈 |
|---|
| GPU(cuDF/RAPIDS) | フィルタリングと重複排除を加速 |
| Ray ランタイム | GPU とノード全体で分配 |
| Dask | 巨大な語彙の外メモリ処理 |
| チェックポイント | 長いキュレーション実行を再開 |
一般的なワークフロー
# 再現可能なプリトレインキュレーション:クリーン → 品質フィルタ → 重複排除
from nemo_curator.datasets import DocumentDataset
ds = DocumentDataset.read_json("raw/*.jsonl", backend="cudf")
# 1) 言語 ID + クリーニング 2) 品質 ScoreFilter 3) FuzzyDuplicates
# トレーニング用にキュレーション済み、重複排除済みの語彙を書き込み
NeMo Curator vs DataTrove
| 側面 | NeMo Curator | DataTrove |
|---|
| アクセラレーション | GPU ネイティブ(RAPIDS) | CPU ファースト |
| 最適用途 | 重複排除ヘビー、小説の大規模実行(10T+ トークン) | FineWeb スタイルパイプラインの再現 |
| 分配 | Ray | ローカル/Slurm/Ray エグゼキューター |
| モダリティ | テキスト、イメージ、ビデオ、オーディオ | テキスト中心 |
リソース