NeMo Data Designer: 고품질 합성 데이터 생성을 위한 프레임워크 (feat. NVIDIA)

NeMo Data Designer 소개

NeMo Data Designer는 NVIDIA NeMo 생태계의 일환으로 공개된 오픈 소스 라이브러리이자 프레임워크입니다. 이 도구의 핵심 목표는 고품질 합성 데이터(Synthetic Data) 를 처음부터(from scratch) 생성하거나, 기존에 보유한 시드(Seed) 데이터를 기반으로 확장하여 AI 모델 학습 및 평가에 필요한 데이터 부족 문제를 해결하는 것입니다.

단순히 LLM에 프롬프트를 입력하는 방식으로도 데이터를 생성할 수 있지만, 생성한 데이터 간의 일관성이 떨어지거나 통계적 다양성을 확보하기 어렵다는 단점이 있습니다. 특히, LLM을 통한 데이터 생성의 경우, 생성된 데이터 행(Row)들 사이의 관계가 느슨하고, "이름은 한국인인데 주소는 미국"과 같은 논리적 오류가 발생하기 쉽습니다. 또한, 모델의 편향으로 인해 데이터 분포가 특정 패턴에 고착화되는 경향이 있을 수 있습니다.

이에 반해, NeMo Data Designer다양성(Diversity), 상관관계(Correlation), 조정 가능성(Steerability), 검증(Validation), 재현성(Reproducibility) 등을 핵심 가치로 삼아, 실제 프로덕션 환경에서 사용할 수 있는 수준의 데이터셋 구축을 지원합니다. 또한, 데이터를 모듈형 파이프라인으로 설계 및 생성하므로 각 컬럼(Column)의 생성 방식을 통계적 샘플링과 LLM 생성으로 나누어 제어할 수 있으며, 컬럼 간의 의존성(Dependency)을 명시하여 논리적 정합성을 강제할 수 있습니다. 사용자는 단순한 스크립트 실행자가 아니라, 데이터셋 아키텍트(Architect) 로서 데이터의 구조를 설계하게 됩니다.

개발자는 이 도구를 통해 인구통계학적 특성을 반영한 가상 인물 데이터를 생성하거나, 특정 비즈니스 로직에 맞는 정형/비정형 데이터를 대량으로 설계할 수 있습니다. 이는 RAG(검색 증강 생성) 시스템 평가, 모델 미세 조정(Fine-tuning), 혹은 개인정보 보호가 필요한 민감 데이터의 대체재 생성 등에 폭넓게 활용될 수 있습니다.

NeMo Curator vs. NeMo Data Designer

NeMo 생태계에는 또다른 데이터 관련 도구인 NeMo Curator가 존재합니다. 두 도구는 모두 '데이터'를 다루지만, 그 목적과 접근 방식에서 아래와 같이 명확하게 역할이 나뉘어 있습니다:

특징 NeMo Curator NeMo Data Designer
주 목적 데이터 전처리 (Data Curation) 합성 데이터 생성 (Synthetic Data Generation)
핵심 기능 중복 제거(Deduplication), 비식별화(PII Redaction), 필터링, 텍스트 추출 통계적 샘플링, LLM 기반 텍스트 생성, 데이터 상관관계 설계
대상 데이터 Common Crawl, Wikipedia 등 수십~수백 TB 규모의 원시 데이터 시드(Seed) 데이터 또는 완전히 새로운 시나리오
주요 기술 GPU 가속 (RAPIDS, CUDA), MPI 기반 분산 처리 LLM Prompting, Python/SQL 검증, Iterative Workflow
활용 단계 Pre-training (사전 학습) 데이터 준비 단계 Fine-tuning (미세 조정), RAG 평가, Alignment 데이터 준비 단계

즉, 이전에 소개했던 NeMo Curator는 이미 존재하는 대규모 데이터를 정제하는 것을 목적으로 하는 도구이고, 이번에 소개하는 NeMo Data Designer는 존재하지 않는 데이터를 생성하거나 설계하는 도구입니다.

NeMo Data Designer의 핵심 작동 방식 (4-Step Workflow)

NeMo Data Designer 프레임워크는 Configure(설정) → Design(설계) → Preview(미리보기) → Create(생성) 의 4단계 워크플로우를 따라 데이터를 생성합니다. 각 단계별로 살펴보면 다음과 같습니다:

모델 설정 (Configure)

데이터 생성의 기초가 되는 모델을 설정하는 단계입니다. NeMo Data Designer는 OpenAI API와 호환되는 다양한 모델을 지원합니다.

  • 유연한 모델 선택: NVIDIA NIM(NeMo Inference Microservices)에서 제공하는 모델이나 OpenAI의 GPT 시리즈 등 사용자가 원하는 모델 제공자(Provider)를 지정할 수 있습니다.
  • 전략 수립: 모든 데이터를 LLM으로 생성할지, 아니면 이름이나 나이 같은 정형 데이터는 통계적 샘플러(Statistical Sampler)를 사용할지 결정합니다. 이는 비용 효율성과 데이터 품질을 동시에 잡는 핵심 전략입니다.
  • CLI 지원: data-designer config providers 등의 명령어를 통해 터미널에서도 손쉽게 설정을 관리할 수 있습니다.

모델 설정과 관련한 더 세부적인 내용은 관련 문서를 참고해주세요.

데이터셋 설계 (Design)

가장 핵심적인 단계로, 데이터셋의 스키마와 생성 로직을 정의합니다. Python 코드를 통해 컬럼별로 상세한 제약 조건을 걸 수 있습니다.

  • Statistical Samplers: CategorySampler, IntSampler 등을 사용하여 분포가 중요한 수치나 카테고리 데이터를 빠르고 정확하게 생성합니다.
  • LLM 기반 생성: 문맥이 필요한 텍스트 필드는 LLM을 사용하되, 앞서 생성된 다른 컬럼의 값을 프롬프트 변수로 활용하여 문맥을 연결합니다.
  • Person Sampling: 나이, 성별, 직업 등 인구통계학적 속성이 서로 모순되지 않도록(예: 5세 의사 등 방지) 현실적인 페르소나 데이터를 생성하는 특수 기능을 제공합니다.

다음은 데이터셋을 설계하는 Python 예시 코드입니다:

from data_designer.essentials import (
    CategorySamplerParams,
    DataDesigner,
    DataDesignerConfigBuilder,
    LLMTextColumnConfig,
    SamplerColumnConfig,
    SamplerType,
)

# 1. 초기화
data_designer = DataDesigner()
config_builder = DataDesignerConfigBuilder()

# 2. 통계적 샘플러: 제품 카테고리 설정
config_builder.add_column(
    SamplerColumnConfig(
        name="product_category",
        sampler_type=SamplerType.CATEGORY,
        params=CategorySamplerParams(
            values=["Electronics", "Clothing", "Home & Kitchen", "Books"],
        ),
    )
)

# 3. LLM 생성: 앞서 선택된 카테고리에 맞는 리뷰 작성 (의존성 설정)
config_builder.add_column(
    LLMTextColumnConfig(
        name="review",
        model_alias="nvidia-text",
        # {{ product_category }}를 통해 앞 컬럼의 값을 참조
        prompt="""Write a brief product review for a {{ product_category }} item you recently purchased.""",
    )
)

데이터셋 설계와 관련한 더 상세한 내용은 관련 문서를 참고해주세요.

결과 미리보기 및 반복 (Preview)

설계한 대로 데이터가 잘 나오는지 확인하는 단계입니다. 대량 생성 전에 메모리 상에서 소량의 데이터를 생성하여 검증합니다.

  • 반복적 개선(Iterative Refinement): 샘플 데이터를 눈으로 확인하거나 통계 분포를 분석하여, 프롬프트를 수정하거나 샘플링 확률을 조정합니다.
  • 이상치 탐지: 의도치 않은 데이터 편향이나 오류를 사전에 발견하여 수정할 수 있습니다.
# 미리보기 실행
preview = data_designer.preview(config_builder=config_builder)
preview.display_sample_record()

결과 미리보기 및 반복 단계는 예시 노트북을 실행하며 상세한 내용을 익힐 수 있습니다.

데이터셋 생성 및 검증 (Create & Validate)

앞서 검증이 완료된 설정을 바탕으로 실제 데이터셋을 생성하고 디스크에 저장합니다. 이 때 설정한 수만큼 데이터를 대규모 생성할 수 있으며, 생성한 데이터는 메타데이터와 로그를 포함하여 저장합니다.

또한, 생성 후에는 규칙 기반(Rule-based) 및 LLM 평가자(LLM-as-a-Judge)를 사용하여 자동 검증할 수 있습니다. 규칙 기반의 방식은 사용자가 작성한 Python 함수나 SQL 쿼리를 통해 데이터 형식을 검증하며, LLM 평가자를 사용하는 방식은 생성된 텍스트의 품질을 또 다른 LLM이 평가하여 점수를 매기거나 합격/불합격 여부를 판정합니다.

데이터셋 생성 및 검증과 관련한 예시 노트북을 직접 실행해보세요.

배포 형태: 라이브러리 vs 마이크로서비스

NeMo Data Designer는 사용 목적에 따라 두 가지 형태로 제공됩니다:

  1. 오픈소스 라이브러리 (Python Library):
    • pip install data-designer로 설치하여 로컬 환경이나 노트북(Jupyter)에서 즉시 사용 가능합니다.
    • 연구, 프로토타이핑, 커스터마이징이 필요한 개발자에게 적합합니다.
  2. NeMo Microservice:
    • 컨테이너 기반으로 배포되어 대규모 데이터를 안정적으로 생성할 수 있는 엔터프라이즈 버전입니다.
    • 다른 NeMo 서비스와 통합하여 확장형 AI 파이프라인을 구축할 때 유리합니다. 더 상세한 내용은 관련 문서를 참고해주세요.

라이선스

NeMo Data Designer 프로젝트는 Apache License 2.0으로 공개 및 배포되고 있습니다. 상업적 사용이 가능하며, 소스 코드 수정 및 재배포 시 라이선스 고지가 필요합니다.

:books: NeMo Data Designer 공식 문서

:github: NeMo Data Designer 프로젝트 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요