{/ Эта страница автоматически создается на основе файла SKILL.md навыка с помощью сайта site/scripts/generate-skill-docs.py. Редактируйте исходный код SKILL.md, а не эту страницу. /}

Немо Куратор

Обработка данных с ускорением на графическом процессоре для обучения LLM. Поддерживает текст/изображение/видео/аудио. Функции нечеткой дедупликации (в 16 раз быстрее), качественной фильтрации (более 30 эвристик), семантической дедупликации, редактирования PII, обнаружения NSFW. Масштабируется между графическими процессорами с помощью RAPIDS. Используйте для подготовки высококачественных наборов обучающих данных, очистки веб-данных или дедупликации крупных корпусов.

Метаданные навыков

Источник Необязательно — установите с помощью hermesskills installofficial/mlops/nemo-curator
Путь optional-skills/mlops/nemo-curator
Версия 1.0.0
Автор Исследование оркестра
Лицензия Массачусетский технологический институт
Зависимости немо-куратор, жва, даск, пороги
Платформы Linux, MacOS
Теги «Обработка данных», «NeMo Curator», «Курирование данных», «Ускорение графического процессора», «Дедупликация», «Фильтрация качества», «NVIDIA», «RAPIDS», «Редактирование личных данных», «Мультимодальный», «Обучающие данные LLM»

Ссылка: полная версия SKILL.md:::информация

Ниже приведено полное определение навыка, которое Гермес загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навык активен.

NeMo Curator — Курирование данных с ускорением на графическом процессоре

Набор инструментов NVIDIA для подготовки высококачественных обучающих данных для программ LLM.

Когда использовать NeMo Curator

Используйте NeMo Curator, когда: - Подготовка данных обучения LLM из веб-страниц (обычное сканирование) - Требуется быстрая дедупликация (в 16 раз быстрее, чем процессор) - Курирование мультимодальных наборов данных (текст, изображения, видео, аудио) - Фильтрация некачественного или токсичного контента. - Масштабирование обработки данных в кластере графических процессоров.

Производительность: - в 16 раз быстрее нечеткая дедупликация (8 ТБ RedPajama v2) - Совокупная стоимость владения на 40 % ниже по сравнению с альтернативными процессорами - Почти линейное масштабирование по узлам графического процессора.

Вместо этого используйте альтернативы: - datatrove: обработка данных с открытым исходным кодом на базе ЦП. - dolma: набор инструментов для работы с данными Allen AI. - Ray Data: общая обработка данных машинного обучения (без курирования).

Быстрый старт

Установка

# Text curation (CUDA 12)
uv pip install "nemo-curator[text_cuda12]"

# All modalities
uv pip install "nemo-curator[all_cuda12]"

# CPU-only (slower)
uv pip install "nemo-curator[cpu]"

Базовый конвейер курирования текста

from nemo_curator import ScoreFilter, Modify
from nemo_curator.datasets import DocumentDataset
import pandas as pd

# Load data
df = pd.DataFrame({"text": ["Good document", "Bad doc", "Excellent text"]})
dataset = DocumentDataset(df)

# Quality filtering
def quality_score(doc):
    return len(doc["text"].split()) > 5  # Filter short docs

filtered = ScoreFilter(quality_score)(dataset)

# Deduplication
from nemo_curator.modules import ExactDuplicates
deduped = ExactDuplicates()(filtered)

# Save
deduped.to_parquet("curated_data/")

Конвейер обработки данных

Этап 1. Качественная фильтрация

from nemo_curator.filters import (
    WordCountFilter,
    RepeatedLinesFilter,
    UrlRatioFilter,
    NonAlphaNumericFilter
)

# Apply 30+ heuristic filters
from nemo_curator import ScoreFilter

# Word count filter
dataset = dataset.filter(WordCountFilter(min_words=50, max_words=100000))

# Remove repetitive content
dataset = dataset.filter(RepeatedLinesFilter(max_repeated_line_fraction=0.3))

# URL ratio filter
dataset = dataset.filter(UrlRatioFilter(max_url_ratio=0.2))

Этап 2. Дедупликация

Точная дедупликация:

from nemo_curator.modules import ExactDuplicates

# Remove exact duplicates
deduped = ExactDuplicates(id_field="id", text_field="text")(dataset)

Нечеткая дедупликация (в 16 раз быстрее на графическом процессоре):

from nemo_curator.modules import FuzzyDuplicates

# MinHash + LSH deduplication
fuzzy_dedup = FuzzyDuplicates(
    id_field="id",
    text_field="text",
    num_hashes=260,      # MinHash parameters
    num_buckets=20,
    hash_method="md5"
)

deduped = fuzzy_dedup(dataset)

Семантическая дедупликация:

from nemo_curator.modules import SemanticDuplicates

# Embedding-based deduplication
semantic_dedup = SemanticDuplicates(
    id_field="id",
    text_field="text",
    embedding_model="sentence-transformers/all-MiniLM-L6-v2",
    threshold=0.8  # Cosine similarity threshold
)

deduped = semantic_dedup(dataset)

Этап 3. Редактирование личных данных

from nemo_curator.modules import Modify
from nemo_curator.modifiers import PIIRedactor

# Redact personally identifiable information
pii_redactor = PIIRedactor(
    supported_entities=["EMAIL_ADDRESS", "PHONE_NUMBER", "PERSON", "LOCATION"],
    anonymize_action="replace"  # or "redact"
)

redacted = Modify(pii_redactor)(dataset)

Этап 4. Фильтрация классификатора

from nemo_curator.classifiers import QualityClassifier

# Quality classification
quality_clf = QualityClassifier(
    model_path="nvidia/quality-classifier-deberta",
    batch_size=256,
    device="cuda"
)

# Filter low-quality documents
high_quality = dataset.filter(lambda doc: quality_clf(doc["text"]) > 0.5)

ускорение графического процессора

Производительность графического процессора и процессора

Операция ЦП (16 ядер) Графический процессор (А100) Ускорение
Нечеткая дедупликация (8 ТБ) 120 часов 7,5 часов 16×
Точная дедупликация (1 ТБ) 8 часов 0,5 часа 16×
Качественная фильтрация 2 часа 0,2 часа 10 ×

Масштабирование нескольких графических процессоров

from nemo_curator import get_client
import dask_cuda

# Initialize GPU cluster
client = get_client(cluster_type="gpu", n_workers=8)

# Process with 8 GPUs
deduped = FuzzyDuplicates(...)(dataset)

Мультимодальное курирование

Курирование изображений

from nemo_curator.image import (
    AestheticFilter,
    NSFWFilter,
    CLIPEmbedder
)

# Aesthetic scoring
aesthetic_filter = AestheticFilter(threshold=5.0)
filtered_images = aesthetic_filter(image_dataset)

# NSFW detection
nsfw_filter = NSFWFilter(threshold=0.9)
safe_images = nsfw_filter(filtered_images)

# Generate CLIP embeddings
clip_embedder = CLIPEmbedder(model="openai/clip-vit-base-patch32")
image_embeddings = clip_embedder(safe_images)

Курирование видео

from nemo_curator.video import (
    SceneDetector,
    ClipExtractor,
    InternVideo2Embedder
)

# Detect scenes
scene_detector = SceneDetector(threshold=27.0)
scenes = scene_detector(video_dataset)

# Extract clips
clip_extractor = ClipExtractor(min_duration=2.0, max_duration=10.0)
clips = clip_extractor(scenes)

# Generate embeddings
video_embedder = InternVideo2Embedder()
video_embeddings = video_embedder(clips)

Аудио курирование

from nemo_curator.audio import (
    ASRInference,
    WERFilter,
    DurationFilter
)

# ASR transcription
asr = ASRInference(model="nvidia/stt_en_fastconformer_hybrid_large_pc")
transcribed = asr(audio_dataset)

# Filter by WER (word error rate)
wer_filter = WERFilter(max_wer=0.3)
high_quality_audio = wer_filter(transcribed)

# Duration filtering
duration_filter = DurationFilter(min_duration=1.0, max_duration=30.0)
filtered_audio = duration_filter(high_quality_audio)

Общие шаблоны

Курирование веб-скрапинга (обычное сканирование)

from nemo_curator import ScoreFilter, Modify
from nemo_curator.filters import *
from nemo_curator.modules import *
from nemo_curator.datasets import DocumentDataset

# Load Common Crawl data
dataset = DocumentDataset.read_parquet("common_crawl/*.parquet")

# Pipeline
pipeline = [
    # 1. Quality filtering
    WordCountFilter(min_words=100, max_words=50000),
    RepeatedLinesFilter(max_repeated_line_fraction=0.2),
    SymbolToWordRatioFilter(max_symbol_to_word_ratio=0.3),
    UrlRatioFilter(max_url_ratio=0.3),

    # 2. Language filtering
    LanguageIdentificationFilter(target_languages=["en"]),

    # 3. Deduplication
    ExactDuplicates(id_field="id", text_field="text"),
    FuzzyDuplicates(id_field="id", text_field="text", num_hashes=260),

    # 4. PII redaction
    PIIRedactor(),

    # 5. NSFW filtering
    NSFWClassifier(threshold=0.8)
]

# Execute
for stage in pipeline:
    dataset = stage(dataset)

# Save
dataset.to_parquet("curated_common_crawl/")

Распределенная обработка

from nemo_curator import get_client
from dask_cuda import LocalCUDACluster

# Multi-GPU cluster
cluster = LocalCUDACluster(n_workers=8)
client = get_client(cluster=cluster)

# Process large dataset
dataset = DocumentDataset.read_parquet("s3://large_dataset/*.parquet")
deduped = FuzzyDuplicates(...)(dataset)

# Cleanup
client.close()
cluster.close()

Тесты производительности

Нечеткая дедупликация (RedPajama v2, 8 ТБ)

Точная дедупликация (1 ТБ)

Фильтрация качества (100 ГБ)

Сравнение затрат

Курирование на базе ЦП (AWS c5.18xlarge × 10): - Стоимость: 3,60 доллара США в час × 10 = 36 долларов США в час. - Время на 8 ТБ: 120 часов - Всего: 4320 долларов США.

Курирование на основе графического процессора (AWS p4d.24xlarge × 2): - Стоимость: 32,77 доллара США в час × 2 = 65,54 доллара США в час. - Время на 8ТБ: 7,5 часов - Итого: 491,55 доллара США.

Экономия: скидка 89 % (экономия 3828 долларов США).

Поддерживаемые форматы данных

Варианты использования

Производственное развертывание: - NVIDIA использовала NeMo Curator для подготовки данных обучения Nemotron-4. - Курируются наборы данных с открытым исходным кодом: RedPajama v2, The Pile.

Ссылки

Ресурсы