On this page Курирование данных с ускорением на GPU для обучения LLM. Поддерживает текст, изображения, видео, аудио. Включает нечёткую дедупликацию (в 16× быстрее), фильтрацию качества (30+ эвристик), семантическую дедупликацию, редактирование PII, обнаружение NSFW. Масштабируется на нескольких GPU с помощью RAPIDS. Используется для подготовки высококачественных обучающих датасетов, очистки веб-данных или дедупликации больших корпусов.
Метаданные навыка¶
| |
|---|---|
|Источник| Опциональный — установка через hermes skills install official/mlops/nemo-curator|
|Путь| optional-skills/mlops/nemo-curator|
|Версия| 1.0.0|
|Автор| Orchestra Research|
|Лицензия| MIT|
|Зависимости| nemo-curator, cudf, dask, rapids|
|Теги| Data Processing, NeMo Curator, Data Curation, GPU Acceleration, Deduplication, Quality Filtering, NVIDIA, RAPIDS, PII Redaction, Multimodal, LLM Training Data|
Справочник: полный SKILL.md¶
info Ниже приведено полное описание навыка, которое Hermes загружает при его активации. Это инструкции, которые видит агент, когда навык активен.
NeMo Curator — Курирование данных с ускорением на GPU¶
Инструментарий NVIDIA для подготовки высококачественных обучающих данных для LLM.
Когда использовать NeMo Curator¶
Используйте NeMo Curator когда: * Нужно подготовить данные для обучения LLM из веб-скрапов (Common Crawl) * Требуется быстрая дедупликация (в 16× быстрее, чем на CPU) * Вы курируете мультимодальные датасеты (текст, изображения, видео, аудио) * Нужно фильтровать низкокачественный или токсичный контент * Требуется масштабирование обработки данных на кластере GPU
Производительность: * В 16× быстрее нечёткая дедупликация (8 ТБ RedPajama v2) * На 40% ниже TCO по сравнению с CPU-альтернативами * Почти линейное масштабирование на узлах GPU
Используйте альтернативы когда: * datatrove: CPU-ориентированная, открытая обработка данных * dolma: Инструментарий данных от Allen AI * Ray Data: Общая обработка ML-данных (без фокуса на курирование)
Быстрый старт¶
Установка¶
[code]
# Текстовая курация (CUDA 12)
uv pip install "nemo-curator[text_cuda12]"
# Все модальности
uv pip install "nemo-curator[all_cuda12]"
# Только CPU (медленнее)
uv pip install "nemo-curator[cpu]"
[/code]
Базовый пайплайн текстовой курации¶
[code]
from nemo_curator import ScoreFilter, Modify
from nemo_curator.datasets import DocumentDataset
import pandas as pd
# Загрузка данных
df = pd.DataFrame({"text": ["Good document", "Bad doc", "Excellent text"]})
dataset = DocumentDataset(df)
# Фильтрация качества
def quality_score(doc):
return len(doc["text"].split()) > 5 # Фильтр коротких документов
filtered = ScoreFilter(quality_score)(dataset)
# Дедупликация
from nemo_curator.modules import ExactDuplicates
deduped = ExactDuplicates()(filtered)
# Сохранение
deduped.to_parquet("curated_data/")
[/code]
Пайплайн курации данных¶
Этап 1: Фильтрация качества¶
[code]
from nemo_curator.filters import (
WordCountFilter,
RepeatedLinesFilter,
UrlRatioFilter,
NonAlphaNumericFilter
)
# Применение 30+ эвристических фильтров
from nemo_curator import ScoreFilter
# Фильтр по количеству слов
dataset = dataset.filter(WordCountFilter(min_words=50, max_words=100000))
# Удаление повторяющегося контента
dataset = dataset.filter(RepeatedLinesFilter(max_repeated_line_fraction=0.3))
# Фильтр по доле URL
dataset = dataset.filter(UrlRatioFilter(max_url_ratio=0.2))
[/code]
Этап 2: Дедупликация¶
Точная дедупликация: [code] from nemo_curator.modules import ExactDuplicates
# Удаление точных дубликатов
deduped = ExactDuplicates(id_field="id", text_field="text")(dataset)
[/code] Нечёткая дедупликация (в 16× быстрее на GPU): [code] from nemo_curator.modules import FuzzyDuplicates
# MinHash + LSH дедупликация
fuzzy_dedup = FuzzyDuplicates(
id_field="id",
text_field="text",
num_hashes=260, # Параметры MinHash
num_buckets=20,
hash_method="md5"
)
deduped = fuzzy_dedup(dataset)
[/code] Семантическая дедупликация: [code] from nemo_curator.modules import SemanticDuplicates
# Дедупликация на основе эмбеддингов
semantic_dedup = SemanticDuplicates(
id_field="id",
text_field="text",
embedding_model="sentence-transformers/all-MiniLM-L6-v2",
threshold=0.8 # Порог косинусного сходства
)
deduped = semantic_dedup(dataset)
[/code]
Этап 3: Редактирование PII¶
[code]
from nemo_curator.modules import Modify
from nemo_curator.modifiers import PIIRedactor
# Редактирование личной информации
pii_redactor = PIIRedactor(
supported_entities=["EMAIL_ADDRESS", "PHONE_NUMBER", "PERSON", "LOCATION"],
anonymize_action="replace" # или "redact"
)
redacted = Modify(pii_redactor)(dataset)
[/code]
Этап 4: Фильтрация классификатором¶
[code] from nemo_curator.classifiers import QualityClassifier
# Классификация качества
quality_clf = QualityClassifier(
model_path="nvidia/quality-classifier-deberta",
batch_size=256,
device="cuda"
)
# Фильтрация низкокачественных документов
high_quality = dataset.filter(lambda doc: quality_clf(doc["text"]) > 0.5)
[/code]
Ускорение на GPU¶
Производительность GPU vs CPU¶
Операция| CPU (16 ядер)| GPU (A100)| Ускорение
---|---|---|---|---
Нечёткая дедупл. (8 ТБ)| 120 часов| 7.5 часов| 16×
Точная дедупл. (1 ТБ)| 8 часов| 0.5 часов| 16×
Фильтрация качества| 2 часа| 0.2 часа| 10×
Масштабирование на нескольких GPU¶
[code]
from nemo_curator import get_client
import dask_cuda
# Инициализация GPU-кластера
client = get_client(cluster_type="gpu", n_workers=8)
# Обработка на 8 GPU
deduped = FuzzyDuplicates(...)(dataset)
[/code]
Мультимодальная курация¶
Курация изображений¶
[code]
from nemo_curator.image import (
AestheticFilter,
NSFWFilter,
CLIPEmbedder
)
# Оценка эстетики
aesthetic_filter = AestheticFilter(threshold=5.0)
filtered_images = aesthetic_filter(image_dataset)
# Обнаружение NSFW
nsfw_filter = NSFWFilter(threshold=0.9)
safe_images = nsfw_filter(filtered_images)
# Генерация CLIP-эмбеддингов
clip_embedder = CLIPEmbedder(model="openai/clip-vit-base-patch32")
image_embeddings = clip_embedder(safe_images)
[/code]
Курация видео¶
[code]
from nemo_curator.video import (
SceneDetector,
ClipExtractor,
InternVideo2Embedder
)
# Обнаружение сцен
scene_detector = SceneDetector(threshold=27.0)
scenes = scene_detector(video_dataset)
# Извлечение клипов
clip_extractor = ClipExtractor(min_duration=2.0, max_duration=10.0)
clips = clip_extractor(scenes)
# Генерация эмбеддингов
video_embedder = InternVideo2Embedder()
video_embeddings = video_embedder(clips)
[/code]
Курация аудио¶
[code]
from nemo_curator.audio import (
ASRInference,
WERFilter,
DurationFilter
)
# ASR транскрипция
asr = ASRInference(model="nvidia/stt_en_fastconformer_hybrid_large_pc")
transcribed = asr(audio_dataset)
# Фильтрация по WER (коэффициент ошибок в словах)
wer_filter = WERFilter(max_wer=0.3)
high_quality_audio = wer_filter(transcribed)
# Фильтрация по длительности
duration_filter = DurationFilter(min_duration=1.0, max_duration=30.0)
filtered_audio = duration_filter(high_quality_audio)
[/code]
Типовые сценарии¶
Курация веб-скрапов (Common Crawl)¶
[code]
from nemo_curator import ScoreFilter, Modify
from nemo_curator.filters import
from nemo_curator.modules import
from nemo_curator.datasets import DocumentDataset
# Загрузка данных Common Crawl
dataset = DocumentDataset.read_parquet("common_crawl/*.parquet")
# Пайплайн
pipeline = [
# 1. Фильтрация качества
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. Языковая фильтрация
LanguageIdentificationFilter(target_languages=["en"]),
# 3. Дедупликация
ExactDuplicates(id_field="id", text_field="text"),
FuzzyDuplicates(id_field="id", text_field="text", num_hashes=260),
# 4. Редактирование PII
PIIRedactor(),
# 5. NSFW фильтрация
NSFWClassifier(threshold=0.8)
]
# Выполнение
for stage in pipeline:
dataset = stage(dataset)
# Сохранение
dataset.to_parquet("curated_common_crawl/")
[/code]
Распределённая обработка¶
[code]
from nemo_curator import get_client
from dask_cuda import LocalCUDACluster
# Много-GPU кластер
cluster = LocalCUDACluster(n_workers=8)
client = get_client(cluster=cluster)
# Обработка большого датасета
dataset = DocumentDataset.read_parquet("s3://large_dataset/*.parquet")
deduped = FuzzyDuplicates(...)(dataset)
# Очистка
client.close()
cluster.close()
[/code]
Бенчмарки производительности¶
Нечёткая дедупликация (8 ТБ RedPajama v2)¶
- CPU (256 ядер): 120 часов
- GPU (8× A100): 7.5 часов
- Ускорение: 16×
Точная дедупликация (1 ТБ)¶
- CPU (64 ядра): 8 часов
- GPU (4× A100): 0.5 часов
- Ускорение: 16×
Фильтрация качества (100 ГБ)¶
- CPU (32 ядра): 2 часа
- GPU (2× A100): 0.2 часа
- Ускорение: 10×
Сравнение стоимости¶
Курация на CPU (AWS c5.18xlarge × 10): * Стоимость: $3.60/час × 10 = $36/час * Время для 8 ТБ: 120 часов * Итого: $4,320
Курация на GPU (AWS p4d.24xlarge × 2): * Стоимость: $32.77/час × 2 = $65.54/час * Время для 8 ТБ: 7.5 часов * Итого: $491.55
Экономия: 89% (сэкономлено $3,828)
Поддерживаемые форматы данных¶
- Входные: Parquet, JSONL, CSV
- Выходные: Parquet (рекомендуется), JSONL
- WebDataset: TAR-архивы для мультимодальных данных
Варианты использования¶
Продуктовые развёртывания: * NVIDIA использовала NeMo Curator для подготовки данных обучения Nemotron-4 * Курированные датасеты с открытым исходным кодом: RedPajama v2, The Pile
Ссылки¶
- Руководство по фильтрации \- 30+ фильтров качества, эвристики
- Руководство по дедупликации \- Точные, нечёткие и семантические методы
Ресурсы¶
- GitHub: https://github.com/NVIDIA/NeMo-Curator ⭐ 500+
- Документация: https://docs.nvidia.com/nemo-framework/user-guide/latest/datacuration/
- Версия: 0.4.0+
-
Лицензия: Apache 2.0
- Справочник: полный SKILL.md
- Когда использовать NeMo Curator
- Быстрый старт
- Пайплайн курации данных
- Ускорение на GPU
- Мультимодальная курация
- Типовые сценарии
- Бенчмарки производительности
- Сравнение стоимости
- Поддерживаемые форматы данных
- Варианты использования
- Ссылки
- Ресурсы