🚀 The GPU-Accelerated Open Source Framework for Efficient Generative AI Model Data Curation 🚀
NeMo Curator is a Python library specifically designed for fast and scalable dataset preparation and curation for generative AI use cases such as foundation language model pretraining, text-to-image model training, domain-adaptive pretraining (DAPT), supervised fine-tuning (SFT) and parameter-efficient fine-tuning (PEFT). It greatly accelerates data curation by leveraging GPUs with Dask and RAPIDS, resulting in significant time savings. The library provides a customizable and modular interface, simplifying pipeline expansion and accelerating model convergence through the preparation of high-quality tokens.
NeMo Curator provides a collection of scalable data curation modules for text and image curation.
All of our text pipelines have great multilingual support.
- Download and Extraction
- Default implementations for Common Crawl, Wikipedia, and ArXiv sources
- Easily customize and extend to other sources
- Language Identification
- Unicode Reformatting
- Heuristic Filtering
- Classifier Filtering
- fastText
- GPU-Accelerated models: Domain, Quality, and Safety Classification
- GPU-Accelerated Deduplication
- Exact Deduplication
- Fuzzy Deduplication via MinHash Locality Sensitive Hashing
- Semantic Deduplication
- Downstream-task Decontamination
- Personal Identifiable Information (PII) Redaction
- Embedding Creation
- Classifier Filtering
- GPU Deduplication
These modules offer flexibility and permit reordering, with only a few exceptions. All the modules automatically scale to multiple nodes to increase throughput.
- Documentation
- Examples
- Tutorials
- Blog posts
- Curating Trillion-Token Datasets: Introducing NVIDIA NeMo Data Curator
- Scale and Curate High-Quality Datasets for LLM Training with NVIDIA NeMo Curator
- Curating Custom Datasets for LLM Training with NVIDIA NeMo Curator
- Curating Custom Datasets for LLM Parameter-Efficient Fine-Tuning with NVIDIA NeMo Curator
- Streamlining Data Processing for Domain Adaptive Pretraining with NVIDIA NeMo Curator
This section explains how to install NeMo Curator and use the Python library, Python modules, and CLI scripts. It also includes a list of tutorials to help you get started right away. Finally, this section explains how to use the NeMo Framework Launcher as an alternative method for interfacing with NeMo Curator.
Before installing NeMo Curator, ensure that the following requirements are met:
- Python 3.10
- Ubuntu 22.04/20.04
- NVIDIA GPU (optional)
- Volta™ or higher (compute capability 7.0+)
- CUDA 12 (or above)
You can get NeMo-Curator in 3 ways.
- PyPi
- Source
- NeMo Framework Container
pip install cython
pip install --extra-index-url https://pypi.nvidia.com nemo-curator[all]
git clone https://github.com/NVIDIA/NeMo-Curator.git
pip install cython
pip install --extra-index-url https://pypi.nvidia.com "./NeMo-Curator[all]"
The latest release of NeMo Curator comes preinstalled in the NeMo Framework Container. If you want the latest commit inside the container, you can reinstall NeMo Curator using:
pip uninstall nemo-curator
rm -r /opt/NeMo-Curator
git clone https://github.com/NVIDIA/NeMo-Curator.git /opt/NeMo-Curator
pip install --extra-index-url https://pypi.nvidia.com "/opt/NeMo-Curator[all]"
NeMo Curator has a set of extras you can use to only install the necessary modules for your workload. These extras are available for all installation methods provided.
pip install nemo-curator # Installs CPU-only text curation modules
pip install --extra-index-url https://pypi.nvidia.com nemo-curator[cuda12x] # Installs CPU + GPU text curation modules
pip install --extra-index-url https://pypi.nvidia.com nemo-curator[image] # Installs CPU + GPU text and image curation modules
pip install --extra-index-url https://pypi.nvidia.com nemo-curator[all] # Installs all of the above
You can also install NeMo Curator using the RAPIDS Nightly Builds. To do so, you can set the environment variable RAPIDS_NIGHTLY=1
.
# installing from pypi
RAPIDS_NIGHTLY=1 pip install --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple "nemo-curator[cuda12x]"
# installing from source
RAPIDS_NIGHTLY=1 pip install --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple ".[cuda12x]"
When the RAPIDS_NIGHTLY
variable is set to 0 (which is the default), it will use the stable version of RAPIDS.
The following snippet demonstrates how to create a small data curation pipeline that downloads and curates a small subset of the Common Crawl dataset.
# Download your dataset
dataset = download_common_crawl("/datasets/common_crawl/", "2021-04", "2021-10", url_limit=10)
# Build your pipeline
curation_pipeline = Sequential([
# Fix unicode
Modify(UnicodeReformatter()),
# Discard short records
ScoreFilter(WordCountFilter(min_words=80)),
# Discard low-quality records
ScoreFilter(FastTextQualityFilter(model_path="model.bin")),
# Discard records from the evaluation metrics to prevent test set leakage.
TaskDecontamination([Winogrande(), Squad(), TriviaQA()])
])
# Execute the pipeline on your dataset
curated_dataset = curation_pipeline(dataset)
To get started with NeMo Curator, you can follow the tutorials available here. These tutorials include:
tinystories
which focuses on data curation for training LLMs from scratch.peft-curation
which focuses on data curation for LLM parameter-efficient fine-tuning (PEFT) use-cases.distributed_data_classification
which focuses on using the quality and domain classifiers to help with data annotation.single_node_tutorial
which demonstrates an end-to-end data curation pipeline for curating Wikipedia data in Thai.image-curation
which explores the scalable image curation modules.
The NeMo Curator section of the NeMo Framework User Guide provides in-depth information about how the Python modules work. The examples directory in the GitHub repository provides scripts that showcase these modules.
NeMo Curator also offers CLI scripts for you to use. The scripts in nemo_curator/scripts
map closely to the supplied Python modules. Refer to the NeMo Framework User Guide for more information about the Python modules and scripts.
As an alternative method for interfacing with NeMo Curator, you can use the NeMo Framework Launcher. The launcher enables you to easily configure the parameters and cluster. It can also automatically generate the Slurm batch scripts that wrap around the CLI scripts required to run your pipeline.
In addition, other methods are available to run NeMo Curator on Slurm. For example, refer to the example scripts in examples/slurm
for information on how to run NeMo Curator on Slurm without the NeMo Framework Launcher.
The modules within NeMo Curator were primarily designed to curate high-quality documents from Common Crawl snapshots in a scalable manner. To evaluate the quality of the curated Common Crawl documents, we conducted a series of ablation experiments. In these experiments, we trained a 357M-parameter GPT-style model using datasets generated at various stages of our data curation pipeline, which was implemented in NeMo Curator.
The following figure shows that the use of different data curation modules implemented in NeMo Curator led to improved model zero-shot downstream task performance.
In terms of scalability and compute performance, using the combination of RAPIDS and Dask fuzzy deduplication enabled us to deduplicate the 1.1 Trillion token Red Pajama dataset in 1.8 hours with 64 NVIDIA A100 Tensor Core GPUs.
Additionally, using the CPU-based modules, the following table shows the time required and resulting data size reduction for each processing step Common Crawl snapshot from November/December of 2020 using 30 CPU nodes (with hardware similar to the c5.24xlarge
Amazon AWS C5 instance).
Dataset | Download and text extraction | Text cleaning | Quality filtering | |||
---|---|---|---|---|---|---|
Time | Output Size | Time | Output Size | Time | Output Size | |
Common Crawl 2020-50 | 36 hrs | 2.8 TB | 1 hr | 2.8 TB | 0.2 hr | 0.52 TB |
We welcome community contributions! Please refer to CONTRIBUTING.md for the process.