AEGLOSLAB 엔비디아 기술 스택

제6부 생성형 AI 플랫폼

6.6 데이터 큐레이션 — NeMo Curator

6.6.1 이 장에서 배우는 것 / 선수 지식

6.2에서 "모델 품질의 8할은 데이터"라 했고, 6.3~6.5에서 그 데이터로 학습·정렬했다. 이 장은 그 데이터를 만드는 단계 — 라이프사이클 ①(6.1) — 인 큐레이션을 판다. 수집한 원시 데이터(웹·문서·로그)는 그대로 쓸 수 없다. 중복·저품질·유해·개인정보·평가셋 오염이 섞여 있어, 정제 없이 학습하면 모델이 그 쓰레기를 배운다(garbage in, garbage out). NeMo Curator 는 이 정제를 GPU로 가속해 웹 스케일(TB~PB)로 처리하는 도구다.

핵심 통찰: 큐레이션은 "무엇을 학습할지"를 결정하는, 학습만큼 중요한 단계다. 특히 중복 제거(dedup) 는 모델 암기·평가 부풀림·컴퓨트 낭비를 막는 필수 단계이고, decontamination(평가셋 누출 제거)은 벤치마크를 정직하게 유지한다. 그리고 이 모든 것이 웹 스케일이라 GPU·분산 가속(RAPIDS/Dask) 없이는 비현실적이다.

배우는 것:

  • 큐레이션 파이프라인 — 추출 → 정제 → 품질 필터 → 중복 제거 → PII·안전 → decontamination → 블렌딩/샘플링.
  • 중복 제거 — exact(해시) vs fuzzy(MinHash+LSH), 왜 중복이 해로운가, 문서·시퀀스 수준.
  • 품질 필터 — 휴리스틱(길이·기호비·반복) vs 분류기 기반.
  • PII·유해성·decontamination — 개인정보 처리·유해 필터·평가셋 누출 제거.
  • 합성 데이터 생성 — LLM으로 SFT·정렬·증강 데이터 만들기.
  • GPU 가속이 왜 필수인가(웹 스케일·분산).
  • 사전학습 데이터(대규모·dedup 집중) vs SFT/정렬 데이터(소규모·품질·합성)의 차이.

선수 지식: 6.2(데이터 경로·블렌딩 — 큐레이션이 선행), 6.1(라이프사이클 데이터 단계), 3.8(GPU 데이터 처리), 6.4~6.5(SFT/정렬 — 합성 데이터). 환경은 6.2.

정직: NeMo Curator의 기능·API·가속 백엔드(RAPIDS/Dask 등)·지원 범위는 버전 의존이다. 이 장은 변하지 않는 큐레이션 원칙·단계·트레이드오프를 가르치고 구체 도구는 "그 버전 문서로 확인". 필터 임계·비율은 데이터·목표에 의존하니 실측·검증 필요.

6.6.2 왜 큐레이션 — garbage in, garbage out

원시 수집 데이터의 문제:

웹/문서 원시 데이터에 섞인 것:

섞인 것결과
중복(같은 문서·문단이 수천 번)모델 암기·컴퓨트 낭비·평가 부풀림
저품질(보일러플레이트·깨진 텍스트·스팸·기계 생성)학습 오염
유해(혐오·폭력·불법)안전 문제
개인정보(PII: 이름·주소·번호)프라이버시·법적 위험
평가셋 누출(벤치마크 문제가 학습에 섞임)부정직한 평가

정제 없이 학습하면 모델이 이 전부를 배운다.

큐레이션의 위치(6.2 데이터 경로의 앞단):

원시 수집 큐레이션 추출·정제·필터·dedup·PII·decontam 정제된 코퍼스 6.2 토크나이즈·바이너리 인덱싱·블렌딩 학습(6.3~6.5)

큐레이션이 '무엇을 학습할지'를 정한다. 블렌딩(6.2)은 정제된 데이터 위에서 한다.

핵심: 데이터 정제는 모델 아키텍처·하이퍼파라미터 튜닝보다 품질에 큰 영향을 줄 때가 많다. 특히 dedup·품질 필터·decontamination은 "안 하면 모델이 망가지거나 평가가 거짓이 되는" 필수 단계다.

6.6.3 큐레이션 파이프라인 — 단계

① 다운로드·추출: WARC(Common Crawl)·PDF· HTML에서 텍스트 추출 → 보일러플레이트(메뉴·광고) 제거, 본문만 ② 언어 식별·필터: 목표 언어만(또는 다국어 비율 관리) ③ 품질 필터: 휴리스틱(길이·기호비·반복) + 분류기(품질 점수) ④ 중복 제거(dedup): exact(해시) + fuzzy(MinHash·LSH) — 가장 비용이 크고 중요 ⑤ PII·유해성: 개인정보 탐지·수정, 유해 콘텐츠 필터 ⑥ decontamination: 평가 벤치마크 데이터 누출 제거 ⑦ 블렌딩·샘플링(6.2): 도메인 비율로 최종 코퍼스 구성

(선택) 합성 데이터 생성: LLM으로 SFT·정렬·증강 데이터(6.6.7).

이 단계들이 웹 스케일(TB~PB) 이라 GPU·분산 가속이 필수다 — 특히 ④ dedup(전체 쌍 비교에 가까움)·③ 분류기 필터는 CPU로는 비현실적. NeMo Curator는 RAPIDS/Dask로 GPU·다중 노드 분산해 이를 실행한다(3.8의 GPU 데이터 가속 정신).

6.6.4 중복 제거 — exact vs fuzzy

dedup은 큐레이션의 핵심이다. 중복이 해로운 이유:

중복이 많으면 모델이 반복 데이터를 '암기' (generalization↓, 그 문장을 그대로 토함) 같은 내용에 컴퓨트 낭비 (중복을 여러 번 학습) 평가 부풀림 (학습에 본 것을 평가에서 맞힘 → 거짓 성능) 블렌딩 비율 왜곡 (중복 많은 소스가 과대표집)

두 종류:

① Exact dedup(정확 중복). 완전히 같은 문서·문단을 해시로 찾아 제거.

각 문서(또는 청크)의 해시 계산 같은 해시 = 중복 하나만 남김

빠르고 정확하나 '거의 같은'(한 글자 다른) 중복은 검출하지 못한다.

② Fuzzy dedup(근사 중복). 약간 다른(거의 같은) 문서를 찾는다 — 웹엔 이런 것이 훨씬 많다(템플릿·재게시·소폭 편집).

MinHash + LSH (Locality-Sensitive Hashing) 각 문서를 'shingle'(n-gram 집합)로 MinHash로 시그니처(작은 벡터) LSH로 후보 쌍을 효율적으로 묶음 (유사한 문서는 비슷한 MinHash) Jaccard 유사도 임계 이상이면 중복으로 제거

전체 쌍 비교(O(n²)) 없이 근사 중복을 스케일 가능하게 찾는다. GPU 가속이 결정적이다(웹 스케일 MinHash·LSH는 부하가 크다).

  • 문서 수준 dedup(문서 단위)과 시퀀스/부분 수준 dedup(긴 반복 구절)을 구분. 보통 둘 다.
  • exact를 먼저, fuzzy를 나중(exact가 싸서 먼저 줄이고 fuzzy로 근사 중복).

핵심: fuzzy dedup이 실질적 작업이다 — 웹엔 정확 중복보다 "거의 같은" 중복이 압도적이다. MinHash+LSH로 O(n²)를 피해 스케일하고, GPU로 가속한다. dedup을 빼면 모델 암기·평가 거짓·낭비가 따라온다.

6.6.5 품질 필터·PII·decontamination

품질 필터. 두 갈래:

필터방식특징
휴리스틱 필터(규칙 기반)너무 짧거나 긴 문서, 기호/숫자 비율 과다, 반복(같은 줄 반복); 불완전한 문장 비율, 특정 보일러플레이트 패턴명백한 쓰레기를 낮은 비용으로 거름. 임계는 데이터·언어 의존(검증)
분류기 필터(모델 기반)'고품질 문서'(예: 위키·책)와 '저품질'을 구분하도록 학습한 분류기로 점수점수 임계로 필터 → 휴리스틱이 검출하지 못하는 미묘한 품질

PII(개인정보) 처리. 이름·주소·전화·이메일·주민번호 등을 탐지·수정(redact) 또는 제거. 프라이버시·법규(GDPR 등) 대응. 정규식 + 모델 기반 탐지.

유해성 필터. 혐오·폭력·불법 콘텐츠를 분류기로 필터(또는 다운웨이트). 안전(6.11)의 데이터 단계 대응.

Decontamination(평가셋 누출 제거). 학습 데이터에서 평가 벤치마크 문제·답을 제거한다. 안 하면 모델이 학습에서 본 문제를 평가에서 맞혀 성능이 거짓으로 과대 측정된다(test set leakage).

decontamination: 평가 벤치마크의 n-gram·문제를 학습 코퍼스에서 검색해 제거(또는 그 문서 제외) 평가가 '일반화'를 재는지 '암기'를 재는지를 가르는 핵심 모델 리포트의 신뢰성은 decontamination에 달림

정직: decontamination을 안 하면 벤치마크 점수가 거짓이다 — 모델이 잘하는 것이 아니라 답을 외운 것. 정직한 평가(6.5·7.7)의 전제. 큐레이션 단계에서 평가셋을 학습에서 빼는 것이 정직성의 기본.

6.6.6 워크스루 — 큐레이션 파이프라인

개념 흐름(API·도구 버전 의존):

# NeMo Curator 파이프라인(개념 — 실제 클래스·인자는 버전 문서)
# RAPIDS/Dask로 GPU·분산 처리
import nemo_curator as nc   # 명칭·구조 버전 의존

dataset = nc.load("/raw/commoncrawl")          # 분산 데이터셋(Dask)

dataset = nc.extract_text(dataset)             # ① HTML/WARC → 본문 텍스트
dataset = nc.filter_language(dataset, keep=["ko","en"])   # ② 언어
dataset = nc.heuristic_filter(dataset,         # ③ 휴리스틱 품질
              max_symbol_ratio=0.1, min_words=50, max_repeat=0.3)
dataset = nc.quality_classifier_filter(dataset, threshold=0.5)  # ③ 분류기
dataset = nc.exact_dedup(dataset)              # ④ 정확 중복(해시)
dataset = nc.fuzzy_dedup(dataset, threshold=0.8)   # ④ 근사 중복(MinHash+LSH)
dataset = nc.redact_pii(dataset, types=["email","phone","ssn"])  # ⑤ PII
dataset = nc.decontaminate(dataset, eval_sets=["mmlu","gsm8k"])  # ⑥ 누출 제거
dataset.save("/curated/corpus")                # → 6.2 토크나이즈·인덱싱으로
GPU 가속이 결정적인 단계이유
fuzzy dedup(MinHash·LSH)가장 고부하, GPU·분산 필수
분류기 필터모델 추론을 전체 코퍼스에(Triton/배치 추론)
대규모 텍스트 처리RAPIDS(cuDF)로 GPU DataFrame

CPU만으로 PB 스케일은 비현실적 — NeMo Curator의 존재 이유다.

실무: 단계 순서가 중요하다(저비용 필터 먼저, 고비용 dedup 나중; exact 먼저 fuzzy 나중). 각 필터의 임계·제거율을 로깅해 과/소 필터를 모니터(얼마나 버려지나). 샘플을 눈으로 검수해 필터가 좋은 데이터를 버리지 않는지 확인.

6.6.7 합성 데이터 생성

큐레이션의 또 다른 축: 데이터를 만드는 것. 특히 SFT·정렬 데이터(6.4~6.5)는 양질의 instruction·선호 쌍의 비용이 커서, LLM으로 생성·증강한다.

합성 데이터 활용:

활용내용
SFT강한 모델로 instruction-response 생성(seed 프롬프트 → 다양화)
정렬선호 쌍 생성(RLAIF — AI가 chosen/rejected 라벨, 6.5)
증강기존 데이터를 패러프레이즈·다양화·번역
도메인부족한 도메인 데이터를 생성으로 보충

주의:

주의설명
품질·다양성 검증생성 데이터도 큐레이션 대상 — dedup·필터
model collapse 위험자기 생성만 반복 학습 시 다양성 붕괴
라이선스·편향생성 모델의 편향이 전파
인간 검증 병행특히 정렬·안전

견해: 합성 데이터는 데이터 부족을 메우는 강력한 도구지만 생성 데이터도 큐레이션해야 한다(dedup·품질·다양성·인간 검증). 자기 생성만 반복하면 다양성이 붕괴(model collapse)할 수 있으니, 실데이터와 섞고 다양성을 관리한다. RLAIF(AI 피드백)는 인간 라벨 비용을 줄이되 인간 검증과 병행.

6.6.8 중간 점검 (체크포인트)

  • [ ] 큐레이션이 "무엇을 학습할지"를 정하며, 정제 없는 데이터(중복·저품질·유해·PII·누출)가 모델을 어떻게 망치는지 안다.
  • [ ] 큐레이션 파이프라인 단계(추출·언어·품질·dedup·PII·decontam·블렌딩)를 순서와 함께 제시한다.
  • [ ] exact vs fuzzy dedup(MinHash+LSH)의 차이와, 왜 fuzzy가 핵심이며 GPU 가속이 필요한지 설명한다.
  • [ ] 품질 필터(휴리스틱·분류기)·PII·decontamination(평가 누출 제거)의 역할을 안다.
  • [ ] 합성 데이터 생성의 활용과 위험(품질·model collapse·검증)을 안다.
  • [ ] GPU·분산 가속이 웹 스케일 큐레이션에 왜 필수인지 안다.

증상→의심: 모델이 학습 문장을 그대로 토함·암기 → dedup 부족(특히 fuzzy) → MinHash+LSH dedup. 벤치마크는 높은데 실사용 약함 → 평가셋 누출(decontam 안 함) → decontamination, 거짓 점수 의심. 저품질·스팸 학습 → 품질 필터 약함 → 휴리스틱·분류기 강화. PII 유출 위험 → redaction 미적용 → PII 처리. 큐레이션이 너무 느림 → CPU만 사용 → GPU·분산(Curator). 좋은 데이터까지 버려짐 → 과필터 → 임계·제거율 모니터·샘플 검수. 합성 데이터로 다양성 붕괴 → model collapse → 실데이터 혼합·다양성 관리.

6.6.9 트레이드오프·대안

필터 강도·dedup 선택.

결정트레이드오프
공격적 필터품질↑·노이즈↓, 그러나 좋은 데이터·다양성·소수 도메인 손실 위험
보수적 필터데이터·다양성 보존, 그러나 노이즈 잔존
exact만 dedup빠름, 근사 중복 잔존(암기 위험)
fuzzy dedup근사 중복 제거(품질↑), 비용이 크고 GPU 필요·임계 튜닝
합성 데이터부족 보충, model collapse·편향 위험
GPU 가속(Curator)웹 스케일 가능, 인프라 필요

견해: dedup(exact+fuzzy)·decontamination은 타협 없이 한다(거짓 평가·암기 방지). 품질 필터는 데이터 규모·목표로 강도 조절 — 대규모 사전학습은 다양성 보존(너무 공격적이면 소수 도메인 손실), SFT는 품질 우선(소량 고품질). 제거율·샘플을 모니터해 과필터를 막는다. 웹 스케일이면 GPU·분산이 필수(Curator 또는 동급).

비엔비디아 정직: 큐레이션 기법(MinHash dedup·품질 분류기·decontamination·합성 데이터)은 공개 연구·표준이고 다른 도구(자체 Spark/Dask 파이프라인, 오픈 dedup 라이브러리)로도 가능하다. NeMo Curator의 강점은 GPU 가속(RAPIDS)·분산·엔드투엔드 통합·NeMo 연계다. 핵심은 단계·원칙(특히 dedup·decontam)을 이해하는 것 — 도구는 중립.

6.6.10 흔한 함정

  • dedup 생략·exact만. 근사 중복(웹에 다수)이 남아 모델 암기·평가 부풀림·낭비. fuzzy dedup(MinHash+LSH) 필수.
  • decontamination 생략. 평가셋이 학습에 누출되어 벤치마크 점수가 거짓. 정직한 평가의 전제 — 반드시.
  • 과필터. 너무 공격적이면 좋은 데이터·다양성·소수 도메인·언어를 버림. 제거율·샘플 모니터.
  • 임계를 검증 없이. 필터 임계·dedup 유사도는 데이터·언어·목표 의존 — 샘플 검수·제거율로 튜닝.
  • PII 누락. 개인정보를 redact 안 하면 프라이버시·법적 위험·학습 유출. 탐지·수정.
  • CPU로 웹 스케일. PB를 CPU로는 비현실적 → GPU·분산(Curator). 안 그러면 큐레이션이 병목.
  • 합성 데이터 무검증. 생성 데이터도 dedup·품질·다양성 검증 필요. 자기 생성 반복은 model collapse.
  • 단계 순서 무시. 저비용 필터 먼저·고비용 dedup 나중, exact 먼저 fuzzy 나중 — 순서가 비용을 좌우.

6.6.11 연습문제

연습 1 (왜 dedup). 웹 코퍼스에서 중복 제거를 안 하면 생기는 문제 넷을 들고, exact dedup만으로 부족하고 fuzzy dedup이 필요한 이유를 설명하라.

정답

문제: ① 암기 — 중복 문장을 여러 번 봐 generalization 대신 그대로 토함. ② 컴퓨트 낭비 — 같은 내용을 반복 학습. ③ 평가 부풀림 — 중복으로 학습에 본 것을 평가에서 맞혀 거짓 성능(특히 평가셋이 중복으로 섞이면). ④ 블렌딩 왜곡 — 중복 많은 소스가 과대표집되어 도메인 비율(6.2)이 의도와 달라짐. exact만 부족한 이유: 웹엔 완전 동일보다 "거의 같은"(템플릿·재게시·소폭 편집·다른 헤더) 중복이 압도적이다. exact 해시는 한 글자만 달라도 다른 문서로 봐 놓침. fuzzy(MinHash+LSH) 는 shingle 기반 유사도로 근사 중복을 검출해 실제 중복의 대부분을 제거 — O(n²) 없이 LSH로 스케일.

연습 2 (fuzzy dedup 메커니즘). MinHash + LSH가 어떻게 전체 쌍 비교 없이 근사 중복을 찾는지 단계로 설명하라.

정답

① Shingle: 각 문서를 n-gram 집합(shingle)으로 표현 — 문서를 단어/문자 n-gram의 집합으로. ② MinHash: 그 집합을 여러 해시 함수의 최솟값으로 압축한 시그니처(작은 벡터) 로. MinHash의 성질: 두 문서의 시그니처가 일치할 확률 ≈ 두 집합의 Jaccard 유사도. ③ LSH(Locality-Sensitive Hashing): 시그니처를 밴드로 나눠 해시 → 비슷한 시그니처가 같은 버킷에 들어가게. 같은 버킷의 문서만 후보 쌍으로 → 전체 O(n²) 비교를 피함. ④ 후보 쌍의 Jaccard 유사도가 임계(예 0.8) 이상이면 중복으로 제거. 결과: 근사 중복을 선형에 가까운 비용으로 웹 스케일에서 찾음 — GPU로 가속(MinHash·LSH가 고부하). 임계는 정밀/재현 트레이드오프로 튜닝.

연습 3 (decontamination). 새 모델이 MMLU에서 매우 높은 점수인데 실제 사용에선 그만큼 못한다. (a) 의심할 원인, (b) 큐레이션에서 무엇을 했어야 하나, (c) 이것이 왜 정직성 문제인가?

정답

(a) 평가셋 누출(test set contamination) — MMLU 문제·답이 학습 코퍼스에 섞여, 모델이 일반화가 아니라 본 문제를 암기해 점수를 받음. (b) decontamination — 큐레이션 단계에서 MMLU 등 평가 벤치마크의 n-gram·문제를 학습 데이터에서 검색해 제거(또는 그 문서 제외) 했어야 한다. 웹 코퍼스엔 벤치마크가 자연히 섞이므로 능동적 제거가 필요. (c) 정직성: decontamination 없는 벤치마크 점수는 모델 능력이 아니라 암기를 잰 거짓 지표다. 모델을 비교·선택·홍보하는 근거가 거짓이 되어 사용자·이해관계자를 오도. 정직한 평가(6.5·7.7)의 전제는 학습-평가 분리이고, 그 책임이 큐레이션의 decontamination 단계에 있다.

연습 4 (필터 강도). 대규모 다국어 사전학습 코퍼스에 공격적 품질 필터를 적용했더니 소수 언어·전문 도메인 데이터가 크게 줄었다. (a) 무슨 트레이드오프이고, (b) 어떻게 조정하나?

정답

(a) 과필터 트레이드오프 — 공격적 품질 필터(고자원 언어·일반 텍스트 기준 임계)가 소수 언어·전문 도메인 텍스트를 "저품질"로 오판해 버림 → 그 언어·도메인 능력이 약해지고 다양성·포용성 손실. 품질↑와 다양성/커버리지↓의 상충. (b) 조정: ① 언어·도메인별 임계 — 단일 전역 임계가 아니라 언어/도메인마다 분리(소수 언어는 완화). ② 제거율 모니터 — 각 언어·소스의 제거 비율을 보고 과도하면 완화. ③ 샘플 검수 — 버려진 데이터를 눈으로 봐 좋은 데이터가 버려지는지 확인. ④ 분류기를 다국어·도메인 데이터로 학습(편향 완화). ⑤ 소수 도메인은 보수적 필터 + 별도 큐레이션. 목표·다양성 균형을 데이터로 검증하며 임계 튜닝.

연습 5 (합성 데이터). SFT 데이터가 부족해 강한 LLM으로 instruction-response를 대량 생성하려 한다. (a) 이점, (b) 위험 셋, (c) 안전하게 쓰는 절차.

정답

(a) 이점: 양질의 instruction 데이터를 빠르고 저렴하게 대량 확보, 부족한 도메인·형식을 보충, seed 프롬프트로 다양화. (b) 위험: ① 품질·정확성 — 생성 모델이 틀린·환각 응답을 만들 수 있음. ② 다양성 붕괴(model collapse) — 자기/단일 모델 생성만 반복 학습 시 분포가 좁아짐. ③ 편향·라이선스 전파 — 생성 모델의 편향·라이선스 제약이 데이터에 전파. (c) 절차: ① 생성 데이터도 큐레이션(dedup·품질 필터·다양성 점검) — 생성물도 정제 대상. ② 실데이터와 혼합(합성만 쓰지 않음)으로 다양성 유지. ③ 인간 검증·스팟 체크(특히 정확성·안전·정렬, 6.5). ④ seed·프롬프트를 다양화해 분포 폭 확보. ⑤ 라이선스·정책 확인. 핵심: 합성 데이터는 강력하나 검증·다양성·혼합 없이는 collapse·편향을 부른다.

6.6.12 요약 · 다음 장

  • 큐레이션은 "무엇을 학습할지"를 정하는 단계 — 정제 없는 데이터(중복·저품질·유해·PII·평가 누출)는 모델 품질을 저하시킨다. 데이터 정제가 아키텍처 튜닝보다 품질에 큰 영향을 줄 때가 많다.
  • 파이프라인: 추출 → 언어 → 품질 필터(휴리스틱·분류기) → 중복 제거 → PII·유해성 → decontamination → 블렌딩(6.2).
  • dedup의 핵심은 fuzzy(MinHash+LSH) — 웹의 근사 중복을 O(n²) 없이 제거(암기·평가 부풀림·낭비 방지). decontamination은 평가셋 누출을 막아 정직한 평가를 보장.
  • 합성 데이터는 부족을 메우나 dedup·품질·다양성·인간 검증 없이는 model collapse·편향을 부른다.
  • 웹 스케일이라 GPU·분산 가속(NeMo Curator/RAPIDS) 이 필수. 기법은 공개·도구 중립이나 dedup·decontam은 타협 없이.
  • 정직: Curator API·기능 버전 의존, 필터 임계는 검증, decontamination 없는 벤치마크는 거짓.

다음 장: 6.7 NIM I — 구조·OpenAI 호환 API. 데이터(①)·학습(②③)을 봤으니, 라이프사이클 ④(배포)로 간다 — 학습·커스터마이즈한 모델(또는 기성 모델)을 NIM(NVIDIA Inference Microservices) 으로 OpenAI 호환 마이크로서비스로 배포하는 구조를 본다. 제5부의 TRT-LLM·Triton(5.7~5.15)이 "완제품 API"로 감싸여 다시 등장한다.