제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 데이터 경로의 앞단):
큐레이션이 '무엇을 학습할지'를 정한다. 블렌딩(6.2)은 정제된 데이터 위에서 한다.
핵심: 데이터 정제는 모델 아키텍처·하이퍼파라미터 튜닝보다 품질에 큰 영향을 줄 때가 많다. 특히 dedup·품질 필터·decontamination은 "안 하면 모델이 망가지거나 평가가 거짓이 되는" 필수 단계다.
6.6.3 큐레이션 파이프라인 — 단계
(선택) 합성 데이터 생성: 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은 큐레이션의 핵심이다. 중복이 해로운 이유:
두 종류:
① Exact dedup(정확 중복). 완전히 같은 문서·문단을 해시로 찾아 제거.
빠르고 정확하나 '거의 같은'(한 글자 다른) 중복은 검출하지 못한다.
② Fuzzy dedup(근사 중복). 약간 다른(거의 같은) 문서를 찾는다 — 웹엔 이런 것이 훨씬 많다(템플릿·재게시·소폭 편집).
전체 쌍 비교(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을 안 하면 벤치마크 점수가 거짓이다 — 모델이 잘하는 것이 아니라 답을 외운 것. 정직한 평가(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"로 감싸여 다시 등장한다.