https://developer.nvidia.com/blog/curating-trillion-token-datasets-introducing-nemo-data-curator/


NeMo Data Curator 등장:

  • 최근 연구에서는 Chinchilla 및 LLaMA 모델을 통해 모델 파라미터 수와 훈련 토큰 수를 동일한 비율로 확장해야 최적의 성능을 얻을 수 있음이 입증되었습니다.
  • 이를 통해 이전 최첨단 모델들은 토큰 수가 충분하지 않아 "미달 훈련(under-trained)" 상태였다고 함. 
  • 결론적으로 LLM 개발에는 더 방대한 데이터 세트가 필수적이며, 기존보다 훨씬 큰 규모(수조 토큰)의 데이터가 필요해졌습니다.
  • 하지만 대규모 데이터 세트를 구축하기 위한 소프트웨어나 도구는 대부분 공개되지 않았거나 확장성이 부족합니다. 그리고 LLM 개발자들은 자체적인 데이터 처리 파이프라인을 구축해야 하며, 이는 시간과 비용을 크게 증가시킵니다
  • NVIDIA는 위 문제를 해결하기 위해 NeMo Data Curator를 개발 및 공개했습니다. 이 도구는 수조 토큰 규모의 다국어 데이터 세트를 효율적으로 정제할 수 있도록 설계되었습니다.

 

NeMo 주요 기능:

  • MPI(Message-Passing Interface)와 Dask를 활용해 수천 개의 CPU 코어에서 병렬 처리를 지원합니다.
    • MPI: 고성능 컴퓨팅(HPC) 환경에서 분산 작업을 조율하는 표준 라이브러리. 다중 노드 간 통신을 표준화하여 병렬 작업 조율.
    • Dask: Python 기반 병렬 처리 프레임워크로, 대규모 데이터 분산 처리에 최적화됨.
  • NeMo Data Curator는 CPU 코어 수 증가에 따른 선형 확장성을 실험으로 증명함:
    • 기술적 기반은 MPI 와 Dask 를 이용한 데이터 분할 및 병렬 처리, 비동기 작업 스케줄링, 메모리 관리임.
    • 그리고 GPU 기술을 이용하면 훨씬 더 빨리 줄일 수 있다고 함:
      • CPU: 20개 노드(노드당 48코어, 188GB RAM) → 37시간 소요.
      • GPU: 4개 DGX A100 노드(노드당 8x 80GB GPU) → 3시간 소요.
  • 세분화된 데이터 처리 파이프라인 지원:
    • 데이터 다운로드: 다양한 소스에서 데이터 수집.
    • 텍스트 추출: HTML, PDF 등 비정형 데이터에서 텍스트 추출
    • 정제 및 재구성: 불필요한 포맷 제거, 일관된 구조로 변환.
    • 품질 필터링: 노이즈 데이터 제거(예: 의미 없는 텍스트, 저품질 콘텐츠).
    • 중복 제거: 정확 또는 유사 중복 문서 제거(Document-Level Deduplication)

 

Data-curation pipeline 소개:

  • NeMo Data Curator의 데이터 정제 파이프라인을 단계별로 상세히 설명하며, 각 단계의 기술적 구현과 성능 최적화 방법을 소개.
  • 전체 파이프라인은 대규모 데이터를 체계적으로 처리해 LLM 훈련에 적합한 고품질 데이터셋을 생성하는 데 초점을 맞춥니다
  • 전체 파이프라인 개요:
    • 웹 크롤링 데이터(Common Crawl 등)를 다운로드 → 텍스트 추출 → 정제 → 중복 제거 → 품질 필터링을 거쳐 LLM 훈련에 필요한 데이터로 변환.
    • 확장성과 효율성을 위해 MPI와 Dask를 활용해 수천 개의 CPU/GPU 코어에서 병렬 처리가 가능하다는게 장점.
    • Scaling Language Models: Methods, Analysis & Insights from Training Gopher
    • GPU 가속을 통해 대용량 데이터 처리 시간을 시간 단위로 단축합니다(기존 일 단위 대비).
  • 단계별 설명:
    • (1) 데이터 다운로드 및 텍스트 추출:
      • 입력 데이터 소스: Common Crawl, Wikidumps, ArXiv 등에서 미리 크롤링된 웹 페이지 URL 목록을 사용합니다
      • 대규모 병렬 처리: MPI와 Python Multiprocessing을 결합해 수천 개의 비동기 작업자를 실행합니다.
      • 유연성: 사용자 정의 다운로드/추출 함수를 지원하여 다양한 데이터 소스 처리 가능
      • 출력 형식: 추출된 텍스트는 JSONL 파일로 저장됩니다.
    • (2) 텍스트 재구성 및 정제:
      • Unicode 오류 수정: ftfy 라이브러리를 사용해 텍스트 디코딩 오류를 자동으로 복구합니다.
      • 텍스트 정규화: 공백, 특수 문자, 대소문자 등을 일관된 형식으로 표준화합니다.
      • 중복 제거 효율화: 정규화를 통해 문서 중복 검출 정확도(recall)를 향상시킵니다.
    • (3) 문서 수준 중복 제거:
      • 중복 문서는 LLM의 성능 저하 (일반화 능력 감소, 생성 다양성 부족)를 유발합니다.
      • 기술적 접근:
        • 정확 중복 제거(Exact Deduplication):
          • 각 문서의 128비트 해시 값을 계산 → 동일한 해시를 가진 문서 그룹에서 하나만 남기고 제거.
        • 유사 중복 제거(Fuzzy Deduplication):
          • MinHashLSH 알고리즘 활용:
            • 문서마다 MinHash 생성 → Locality-Sensitive Hashing(LSH)으로 유사한 문서를 그룹화 함. 
              •  
            • 그룹 내 문서 유사도 계산 → 임계값 이상의 중복 문서 제거.
            • 코사인 유사도 기법에 비해 계산 효율성이 뛰어나다는게 장점임. 그래서 대규모 데이터에 적합할 것. 
      • RAPIDS 프레임워크를 이용해 GPU에서 중복 제거 작업을 가속화합니다.
        • CPU(20개 노드, 37시간) vs. GPU(4개 DGX A100 노드, 3시간) → 12배 속도 향상.
        • 비용 절감 효과: CPU 대비 20배 빠르고 5배 저렴
        • GPU 기반 중복 제거 기능은 향후 NeMo Data Curator 버전에 추가될 예정입니다
    • (4) 문서 품질 필터링:
      • 문제점: 웹 크롤링 데이터에는 URL, 상용구 텍스트, 반복 문자열 등 저품질 콘텐츠가 다량 포함됩니다.
      • 해결 방법:
        • 휴리스틱 필터 사용:
          • 사용자가 정의한 규칙(예: 특수 문자 비율, 문장 길이, 언어 감지)을 적용해 저품질 문서 제거.
        • 언어 데이터 필터:
          • 분류기(Classifier) 또는 휴리스틱 기반 필터를 사용해 고품질 텍스트만 선별합니다(참고 연구).
          • Scaling Language Models: Methods, Analysis & Insights from Training Gopher
          • 분류기 기반 필터 사용: 
            • 고품질 텍스트 데이터 (예: 위키 피디아, 전문 도메인 문서) 와 저품질 텍스트 (예: 스팸, 무의미한 콘텐츠) 를 레이블링해서 분류기를 훈련시키는 방법을 말함. 
            • BERT 와 RoBERT 같은 사전 훈련된 언어 모델을 이용해서 분류를 함. 

 

 

배경지식: MInHashLSM 알고리즘

  • (1) 문서를 단어 또는 n-gram 으로 변환: 
    • 예: 문서 A = {a, b, c}, 문서 B = {a, b, d} 
  • (2) 이렇게 단어 집합을 구성한 후 해시 함수 적용: 
    • 문서 A 기준 = {h(a), h(b), h(c)} 가 생성될 것. 
  • (3) 해시 값 중 최소 값을 MinHash 로 선택, 그리고 이를 K번 반복해서 버킷에 할당 
    • 같은 버킷에 있는 건 K 개의 겹침 해시값이 있는 거고 확률상 이게 중복된 문서일 수 있다고 가정함.
  • (4) 이런 중복 판단은 빠르지만 거짓 양성일 수 있으니 버킷 내 문서들끼리 Jaccard 유사도를 통해 비교: 
    • Jaccard 유사도 비교를 통해 임계값 (예: 0.8) 이상이면 중복이라고 판단. -> 유사도가 높은 문서 하나만 남기고 나머지 제거.
    • Jaccard 유사도: 
      • 문서의 두 단어 집합에서 교집합/합집합 으로 계산한 걸 말함. 
      • 예: 문서 A = {a, b, c}, 문서 B = {a, b, d} 라면 Jaccard 유사도는 2/4 가 될거임. 

+ Recent posts