DataTrove - LLM 데이터 처리 파이프라인 치트시트
DataTrove는 대규모 텍스트 데이터셋을 처리, 필터링, 중복 제거하기 위한 Hugging Face의 오픈소스 라이브러리입니다. 판독기, 필터, 중복 제거 단계, 작성자(writer)로 구성되는 composable 파이프라인 블록을 제공합니다. 실행 백엔드 변경 없이 로컬, Slurm 클러스터 또는 Ray에서 동일하게 실행됩니다. FineWeb 및 FineWeb-Edu 데이터셋 뒤의 참조 구현이므로, 게시된 CPU 우선 큐레이션 파이프라인을 재현하거나 조정하려 할 때 가는 도구입니다.
설치
| 방법 | 명령어 |
|---|
| pip | pip install datatrove |
| 모든 extras 포함 | pip install "datatrove[all]" |
| Processing extras | pip install "datatrove[processing]" |
| 소스에서 | git clone https://github.com/huggingface/datatrove && pip install -e . |
핵심 개념
| 개념 | 의미 |
|---|
| Pipeline | 데이터가 흐르는 순서 있는 블록 목록 |
| Block | 한 단계: reader, filter, dedup, writer 등 |
| Document | 단위 (text, id, metadata) |
| Executor | 파이프라인이 실행되는 곳 (Local / Slurm / Ray) |
| Tasks | 워크로드의 병렬 샤드 |
파이프라인 블록
| 카테고리 | 예 |
|---|
| Readers | WarcReader, JsonlReader, ParquetReader, HuggingFaceDatasetReader |
| Extractors | Trafilatura (HTML → 텍스트) |
| Filters | LanguageFilter, GopherQualityFilter, GopherRepetitionFilter, C4QualityFilter, FineWebQualityFilter, URLFilter |
| Dedup | MinhashDedup, SentenceDedup, ExactSubstrDedup |
| Writers | JsonlWriter, ParquetWriter |
| Tokenization | DocumentTokenizer |
기본 파이프라인
from datatrove.executor import LocalPipelineExecutor
from datatrove.pipeline.readers import JsonlReader
from datatrove.pipeline.filters import LanguageFilter, GopherQualityFilter
from datatrove.pipeline.writers import JsonlWriter
pipeline = [
JsonlReader("data/input/"),
LanguageFilter(languages=["en"]),
GopherQualityFilter(),
JsonlWriter("data/output/"),
]
executor = LocalPipelineExecutor(pipeline=pipeline, tasks=8)
executor.run()
Executors (같은 파이프라인, 다른 백엔드)
| Executor | 사용 |
|---|
LocalPipelineExecutor | 한 머신, multiprocessing |
SlurmPipelineExecutor | HPC 클러스터 via Slurm jobs |
RayPipelineExecutor | Ray 클러스터 |
from datatrove.executor import SlurmPipelineExecutor
SlurmPipelineExecutor(
pipeline=pipeline, tasks=1000, time="20:00:00",
partition="cpu", workers=200,
).run()
중복 제거
DataTrove의 중복 제거 단계는 일반적으로 다중 단계 파이프라인으로 실행됩니다 (서명 → 버킷 → 클러스터 → 필터).
| 방법 | 블록 |
|---|
| MinHash (퍼지) | MinhashDedup (다단계) |
| Exact substring | ExactSubstrDedup |
| Sentence-level | SentenceDedup |
품질 필터
| 필터 | 휴리스틱 |
|---|
GopherQualityFilter | 길이, 기호 비율, bullet/생략 부호 제한 |
GopherRepetitionFilter | 과도한 반복 |
C4QualityFilter | C4 스타일 규칙 (터미널 구두점 등) |
FineWebQualityFilter | FineWeb 레시피 휴리스틱 |
LanguageFilter | fastText 언어 ID 임계값 |
URLFilter | URL/도메인별 블록/허용 |
일반적인 워크플로우
# FineWeb 스타일 웹 파이프라인 재현 (개념적 순서)
# WarcReader → URLFilter → Trafilatura → LanguageFilter →
# GopherQuality/Repetition → C4/FineWeb filters → MinhashDedup → JsonlWriter
# executor를 교환하여 노트북에서 클러스터로 동일한 파이프라인 스케일:
# LocalPipelineExecutor → SlurmPipelineExecutor → RayPipelineExecutor
DataTrove vs NeMo Curator
| 측면 | DataTrove | NeMo Curator |
|---|
| Compute | CPU 우선 | GPU 네이티브 (RAPIDS) |
| 최적 | FineWeb 스타일 데이터셋 재현 | 중복 제거 집약적 10T+ 토큰 실행 |
| Backends | Local / Slurm / Ray | Ray |
| Origin | Hugging Face | NVIDIA |
리소스