← 목록으로
AI2026.10.10 02:21

합성 데이터로 LLM 파인튜닝 데이터셋 구축하기

레이블 데이터가 비싼 의료·법률·금융 도메인을 위한 합성 데이터 파인튜닝 가이드입니다. Self-Instruct·Evol-Instruct로 다양성을 넓히고 LLM-as-Judge로 품질을 거르는 법을 다룹니다.

목차

  1. 개요
  2. 합성 데이터의 원리와 생성 메커니즘
  3. 파인튜닝 데이터셋 설계 전략
  4. 합성 데이터 생성 구현
  5. 데이터 품질 검증과 필터링
  6. 운영 환경 적용 시 고려사항
  7. 맺음말

개요

문제 배경

LLM(대형 언어 모델)을 특정 도메인에 맞게 파인튜닝하려면 수천~수만 건의 고품질 레이블 데이터가 필요합니다. 의료, 법률, 금융처럼 전문성이 요구되는 분야일수록 도메인 전문가가 직접 데이터를 생성하거나 검수해야 하므로 비용과 시간이 기하급수적으로 늘어납니다. 이 문제를 해결하기 위해 최근 현업 AI 팀들이 주목하는 접근법이 바로 합성 데이터(Synthetic Data) 생성입니다. 강력한 대형 모델(Teacher Model)을 활용해 소형 모델(Student Model) 학습용 데이터를 자동으로 생성하는 이 전략은 데이터 수집 비용을 크게 낮추면서도 모델 성능을 실질적으로 끌어올릴 수 있다는 점에서 주목받고 있습니다.

기존 방식의 한계

전통적인 파인튜닝 데이터 구축 방법은 크게 두 가지입니다. 첫째는 실제 사용자 로그나 운영 데이터를 직접 수집하는 방식이고, 둘째는 크라우드소싱 또는 전문가를 통해 수작업으로 데이터를 생성하는 방식입니다. 전자는 개인정보 및 보안 이슈가 발생하기 쉽고, 데이터 분포가 실제 사용 패턴에 편향되어 있어 엣지 케이스를 충분히 커버하기 어렵습니다. 후자는 전문가 한 명당 하루에 생성할 수 있는 데이터량이 수십~수백 건에 불과해 속도와 비용 면에서 확장성이 떨어집니다. 특히 챗봇 응답 품질 개선이나 특수 목적 지시 수행(Instruction Following) 같은 작업에서는 다양한 입력 변형이 필요한데, 수작업으로는 그 다양성을 확보하기 어렵습니다.

합성 데이터 접근법은 이 두 가지 한계를 동시에 해결합니다. 프롬프트 설계와 생성 파이프라인만 잘 갖추면, 기존 대비 10~100배 빠른 속도로 다양성 높은 데이터를 확보할 수 있습니다. 다만 "합성"이라는 특성상 데이터 품질 검증과 편향 제거가 수반되지 않으면 오히려 모델 성능이 저하될 수 있어, 생성과 검증을 함께 설계하는 것이 핵심입니다.

합성 데이터로 LLM 파인튜닝 데이터셋 구축하기 데이터 수집 방식(운영 로그·전문가 수작업·합성 생성) 세 갈래 중 합성 생성 경로가 Teacher LLM을 거쳐 Student 파인튜닝으로 이어지는 흐름을 보여주는 플로우차트. 데이터 필요 start 수집 방식 선택 운영 로그 전문가 작성 합성 생성 RISK 실 데이터 개인정보 위험 LIMIT 전문가 수작업 속도·비용 한계 LLM Teacher LLM 데이터 생성 학습 DATASET 합성 데이터 다양성 확보 FINE-TUNE Student 파인튜닝 model training LEGEND 권장 경로 (합성 생성) 비권장 경로 (위험·한계) 핵심 노드 제한 요인

합성 데이터 파이프라인은 "Teacher → 생성 → 검증 → Student" 흐름을 따르며, 검증 단계를 생략하면 품질 보장이 어렵습니다.


합성 데이터의 원리와 생성 메커니즘

동작 원리: Teacher-Student 패러다임

합성 데이터 생성의 핵심 패러다임은 **지식 증류(Knowledge Distillation)**의 데이터 버전입니다. GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Pro처럼 파라미터 수가 수백억 이상인 Teacher 모델이 고품질 응답을 생성하면, 그 입출력 쌍을 학습 데이터로 활용해 더 작은 Student 모델을 파인튜닝합니다. Student 모델은 Teacher의 추론 방식과 응답 패턴을 모사하도록 학습되므로, 직접 인간이 레이블을 붙이지 않아도 Teacher 수준의 행동을 상당 부분 내재화할 수 있습니다.

이 패러다임이 효과적인 이유는 Teacher 모델이 **다양한 표현 변형(Paraphrase)**과 엣지 케이스를 자연스럽게 포함한 데이터를 생성할 수 있기 때문입니다. 예를 들어 고객 서비스 봇을 파인튜닝한다면, "환불 요청"이라는 단일 의도에 대해 "환불해 주세요", "결제 취소 부탁드립니다", "돈 돌려받고 싶어요", "refund 가능한가요?" 같은 수십 가지 표현 변형을 자동으로 생성할 수 있습니다. 수작업이라면 이런 변형을 일일이 작성해야 하지만, Teacher 모델은 몇 초 안에 이를 처리합니다.

주요 생성 기법

합성 데이터를 생성하는 방법은 목적에 따라 여러 기법으로 나뉩니다. Self-Instruct 방식은 소수의 시드(Seed) 예제에서 출발해 LLM 스스로 새로운 지시문과 응답 쌍을 생성하게 하는 기법으로, Stanford Alpaca가 이 방식으로 52K개의 데이터를 만들어 LLaMA를 파인튜닝한 것이 대표적입니다. Evol-Instruct 방식은 단순한 지시문을 점진적으로 복잡하게 발전시키는 기법으로, WizardLM 계열 모델이 이 방식으로 복잡한 추론 능력을 키웠습니다. Persona-Driven 방식은 다양한 사용자 페르소나(전문가, 학생, 비전문가 등)를 설정해 관점 다양성을 확보하는 기법입니다.

기법 핵심 아이디어 강점 주의점
Self-Instruct 시드에서 자기 증식 데이터 다양성 높음 반복·중복 필터 필수
Evol-Instruct 점진적 복잡도 증가 추론 능력 향상 과도한 복잡화 주의
Persona-Driven 페르소나별 응답 관점 다양성 페르소나 품질 의존
Backtranslation 응답 → 질문 역생성 자연스러운 질문 정합성 검증 필요

데이터 흐름: 생성 파이프라인 구조

실제 합성 데이터 파이프라인은 단순히 "LLM에게 물어보고 저장"하는 것이 아닙니다. 시드 데이터 준비 → 프롬프트 구성 → LLM 호출 → 응답 파싱 → 품질 필터링 → 포맷 변환의 단계를 거칩니다. 각 단계에서 실패나 품질 저하가 발생하면 다운스트림 전체에 영향을 미치므로, 단계별 검증 체크포인트를 두는 것이 중요합니다. 특히 LLM 호출 단계에서는 API 속도 제한(Rate Limit), 토큰 비용, 응답 일관성이라는 세 가지 제약이 동시에 작용합니다.

합성 데이터 LLM 파인튜닝 파이프라인 시드 데이터에서 출발해 Teacher LLM API 호출과 품질 검증을 거쳐 JSONL 학습 데이터셋을 생성하는 7단계 합성 데이터 파이프라인 흐름도. 예 아니오 INPUT 시드 데이터 100–1000건 PROMPT 프롬프트 템플릿 구성 template · few-shot LLM Teacher LLM API 호출 GPT-4o · Claude · Gemini PARSE 응답 파싱 JSON 추출 품질 기준 통과? FORMAT 포맷 변환 JSONL SKIP 재생성 또는 폐기 retry · discard STORE 학습 데이터셋 저장 .jsonl · HuggingFace INPUT FOCAL STEP DECISION SKIP STORE

파이프라인은 시드에서 출발해 품질 체크포인트를 거쳐야만 최종 데이터셋에 포함되며, 탈락한 데이터는 재생성하거나 폐기합니다.


파인튜닝 데이터셋 설계 전략

데이터 포맷 선택: SFT vs. DPO

파인튜닝 방식에 따라 필요한 데이터 포맷이 달라집니다. **SFT(Supervised Fine-Tuning)**는 (instruction, response) 쌍으로 구성된 가장 기본적인 포맷을 사용합니다. 모델이 주어진 지시문에 대해 올바른 응답을 생성하도록 학습하는 방식으로, 구현이 단순하고 데이터 생성 비용이 낮습니다. 반면 **DPO(Direct Preference Optimization)**는 (instruction, chosen_response, rejected_response) 형태의 선호도 쌍(Preference Pair)을 필요로 합니다. 같은 지시문에 대해 "좋은 응답"과 "나쁜 응답"을 함께 제공해 모델이 선호 방향을 학습하게 하는 방식으로, 응답의 안전성, 유용성, 무해성을 세밀하게 조율할 때 효과적입니다.

합성 데이터로 DPO 쌍을 만들 때는 Teacher 모델에게 "좋은 응답"과 "의도적으로 품질이 낮은 응답"을 동시에 생성하게 하거나, 동일한 프롬프트에 다른 설정(temperature, system prompt)을 적용해 응답 품질의 격차를 만들어 낼 수 있습니다. 이 방법은 완전한 인간 선호도 레이블보다는 정밀도가 낮지만, 대량 생성이 가능하다는 장점이 있어 초기 정렬(Alignment) 단계에서 실용적으로 활용됩니다.

LLM 파인튜닝 데이터 포맷 흐름 지시문에서 SFT 포맷과 DPO 포맷 두 경로로 분기되어 각각 행동 학습·도메인 적응과 선호도 정렬·안전성·품질 결과로 이어지는 합성 데이터 파이프라인 흐름도. INPUT 지시문 Instruction SFT SFT 포맷 지시·응답 쌍 DPO DPO 포맷 선호도 쌍 OUTPUT 행동 학습 도메인 적응 OUTPUT 선호도 정렬 안전성 · 품질 LEGEND 입력 포맷 분기 (핵심) 학습 결과 주 경로 일반 경로

SFT는 도메인 적응에, DPO는 응답 품질 정렬에 적합하며 두 방식을 순차적으로 적용하는 것이 일반적입니다.


시드 데이터 설계의 중요성

합성 데이터의 품질은 시드 데이터에 크게 좌우됩니다. 시드가 편향되어 있으면 생성되는 합성 데이터도 같은 편향을 가지게 됩니다. 좋은 시드 데이터는 도메인 커버리지, 난이도 분포, 표현 다양성 세 가지 축을 균형 있게 갖추어야 합니다.

예를 들어 법률 문서 요약 모델을 만든다면, 민사·형사·상사·행정 등 여러 법률 영역을 고루 포함하고(도메인 커버리지), 단순한 사실 요약부터 복잡한 판례 분석까지 난이도를 분산하며(난이도 분포), 동일한 판례도 실무자 관점과 비전문가 관점으로 다르게 표현된 예시를 포함해야(표현 다양성) 합니다. 현업에서는 50~200건의 고품질 시드 데이터를 준비한 뒤, 이를 10~50배로 증폭하는 전략이 일반적입니다.

시드가 너무 적으면 생성 데이터가 단조로워지고, 너무 많으면 시드 준비 자체의 비용이 증가합니다. 100건 내외의 정제된 시드로 출발해 파이프라인을 검증한 뒤 점진적으로 시드를 확장하는 방식이 리스크를 줄이는 데 효과적입니다.

다양성 확보 전략

같은 의도를 다양하게 표현하기 위한 기법으로는 Paraphrase Generation(동일 내용을 다른 표현으로 재작성), Context Augmentation(배경 정보를 추가하거나 제거), Persona Variation(사용자 페르소나 변경)이 있습니다. 이 중 특히 Persona Variation은 동일한 질문도 사용자 배경에 따라 전혀 다른 응답이 필요한 경우(초보자 vs. 전문가 응답 수준 조절)에 유효합니다.

데이터 다양성을 정량적으로 측정하려면 Self-BLEU 지표를 활용합니다. 생성된 데이터셋 내 샘플들 간의 유사도를 측정해 값이 낮을수록 다양성이 높다고 판단합니다. Self-BLEU가 0.5 이상이면 중복이 과도하다는 신호로 볼 수 있으며, 이 경우 생성 프롬프트의 temperature를 높이거나 시드 다양성을 확대해야 합니다.

합성 데이터 다양성 검증 흐름 시드 데이터에서 세 가지 증강 기법(Paraphrase, Context Aug, Persona)으로 합성 데이터셋을 만들고, Self-BLEU 기준으로 다양성을 검증해 조건을 충족하거나 온도·시드를 재조정하는 흐름. 예 아니오 INPUT 시드 데이터 AUG Paraphrase 표현 변형 AUG Context Aug 맥락 추가·제거 AUG Persona 페르소나 변경 MERGE 혼합 데이터셋 Self-BLEU 0.5 미만? PASS 다양성 충족 RETRY 온도·시드 조정 입력 증강 기법 / 병합 기준 충족 재조정 필요 조건 판별

세 가지 다양성 전략을 혼합해 데이터셋을 구성하고, Self-BLEU로 다양성을 수치화해 기준 미달 시 즉시 파라미터를 조정합니다.


합성 데이터 생성 구현

기본 설정과 환경 구성

합성 데이터 생성 파이프라인을 구축하기 전에 Teacher 모델 API 접근 방식을 결정해야 합니다. OpenAI API, Anthropic API, 또는 로컬 모델(vLLM, Ollama)을 Teacher로 활용할 수 있으며, 비용과 품질의 균형을 고려해 선택합니다. 대규모 생성에는 배치(Batch) API를 활용하면 비용을 최대 50% 절감할 수 있습니다.

파이프라인의 핵심 라이브러리로는 datasets(Hugging Face), openai 또는 anthropic SDK, tenacity(재시도 로직), pydantic(응답 검증)을 주로 사용합니다. 생성된 데이터는 Hugging Face JSONL 포맷으로 저장하는 것이 파인튜닝 프레임워크(TRL, LLaMA-Factory 등)와의 호환성 측면에서 가장 보편적입니다.

아래는 Self-Instruct 방식의 기본 생성 루프를 구현한 예시입니다. 시드 예제를 기반으로 새로운 지시문과 응답 쌍을 생성하고, Pydantic 모델로 응답 스키마를 검증합니다.

python
import json
import random
from pydantic import BaseModel, ValidationError
from anthropic import Anthropic
from tenacity import retry, stop_after_attempt, wait_exponential

client = Anthropic()

class SyntheticSample(BaseModel):
    instruction: str
    response: str
    category: str

SEED_EXAMPLES = [
    {"instruction": "파이썬에서 리스트 컴프리헨션을 설명해 주세요.",
     "response": "리스트 컴프리헨션은 기존 리스트를 변환하거나 필터링하는 간결한 문법입니다...",
     "category": "python_basics"},
]

GENERATION_PROMPT = """
다음 예시를 참고해 새로운 지시문과 응답 쌍을 {n_samples}개 생성하세요.
기존 예시와 유사하되 다른 주제와 표현을 사용하세요.

예시:
{examples}

JSON 배열로 응답하세요:
[{{"instruction": "...", "response": "...", "category": "..."}}]
"""

@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=1, max=10))
def generate_batch(seed_examples: list, n_samples: int = 5) -> list[SyntheticSample]:
    examples_str = json.dumps(random.sample(seed_examples, min(3, len(seed_examples))),
                               ensure_ascii=False, indent=2)
    prompt = GENERATION_PROMPT.format(n_samples=n_samples, examples=examples_str)

    message = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=4096,
        messages=[{"role": "user", "content": prompt}]
    )

    raw = message.content[0].text
    json_start = raw.find("[")
    parsed = json.loads(raw[json_start:])  # 결과: JSON 배열 파싱

    validated = []
    for item in parsed:
        try:
            validated.append(SyntheticSample(**item))
        except ValidationError:
            pass  # 스키마 불일치 샘플은 제외

    return validated  # 결과: 검증 통과한 SyntheticSample 리스트

@retry 데코레이터로 API 일시 장애를 자동 복구하고, ValidationError를 개별 샘플 단위로 처리해 배치 전체가 실패하는 상황을 방지한 것이 핵심입니다. Teacher 모델의 응답이 항상 완벽한 JSON을 반환하지는 않으므로, 파싱 로직에 방어적 코드를 두는 것이 중요합니다.


핵심 구현: Evol-Instruct 적용

Evol-Instruct는 단순한 지시문을 점진적으로 복잡하게 변형하는 기법입니다. 각 지시문에 "더 많은 제약 조건 추가", "구체적인 예시 요구", "다단계 추론 필요" 같은 변형 연산자를 적용합니다.

python
EVOLUTION_OPERATORS = [
    "더 구체적인 제약 조건을 추가하여 더 어렵게 만드세요",
    "추론 단계를 여러 번 거쳐야 답할 수 있도록 복잡하게 만드세요",
    "실제 운영 환경 시나리오로 구체화하세요",
    "엣지 케이스나 예외 상황을 포함하도록 확장하세요",
]

def evolve_instruction(instruction: str, operator: str) -> str:
    """지시문을 주어진 연산자로 복잡도를 높입니다."""
    prompt = f"""다음 지시문을 아래 방식으로 발전시켜 더 복잡한 지시문을 만드세요.
방식: {operator}

원본 지시문: {instruction}

발전된 지시문만 출력하세요 (설명 없이):"""

    message = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=512,
        messages=[{"role": "user", "content": prompt}]
    )
    return message.content[0].text.strip()
    # 결과: 복잡도가 높아진 새로운 지시문 문자열

def build_evolved_dataset(seeds: list, evolution_rounds: int = 3) -> list:
    evolved = list(seeds)
    for round_idx in range(evolution_rounds):
        new_samples = []
        for sample in evolved[-len(seeds):]:  # 직전 라운드 샘플만 선택
            op = random.choice(EVOLUTION_OPERATORS)
            new_instr = evolve_instruction(sample["instruction"], op)
            new_samples.append({**sample, "instruction": new_instr,
                                  "evolution_round": round_idx + 1})
        evolved.extend(new_samples)
    return evolved

각 라운드에서 직전 라운드의 샘플만 진화시키는 설계가 핵심입니다. 전체 누적 샘플을 다시 진화시키면 초기 단순 샘플이 불필요하게 복잡해져 데이터 품질 분포가 무너집니다.


데이터 품질 검증과 필터링

자동 품질 평가 기준

합성 데이터는 생성 속도가 빠른 만큼 저품질 샘플도 많이 포함됩니다. **자동 품질 평가(Automated Quality Evaluation)**를 파이프라인에 통합하지 않으면, 노이즈가 섞인 데이터로 파인튜닝을 진행하게 되어 오히려 모델 성능이 저하됩니다. 자동 평가 기준은 크게 네 가지로 구성됩니다.

형식 유효성 검사는 응답이 요구된 포맷(JSON, Markdown, 코드 블록 등)을 지키는지 확인합니다. 길이 적합성 검사는 지시문 대비 응답 길이 비율이 합리적인지 확인하며, 지시문보다 짧은 응답이나 지나치게 장황한 응답을 필터링합니다. 의미 일관성 검사는 임베딩 유사도를 활용해 지시문과 응답이 의미적으로 연관되어 있는지 검증합니다. 중복 제거는 MinHash나 코사인 유사도로 중복·유사 샘플을 식별해 데이터셋 다양성을 유지합니다.

검사 종류 측정 방법 통과 기준 실패 시 처리
형식 유효성 파싱 성공 여부 100% 파싱 성공 즉시 폐기
길이 적합성 응답/지시문 비율 0.5~10 범위 폐기 또는 재생성
의미 일관성 코사인 유사도 ≥ 0.3 재생성 권장
중복 MinHash Jaccard < 0.85 하나만 보존

LLM-as-Judge 활용

자동 지표만으로는 잡기 어려운 미묘한 품질 문제(논리적 오류, 사실 오류, 불명확한 서술)를 Teacher 모델에게 재평가하게 하는 방식을 LLM-as-Judge라고 합니다. 생성된 데이터셋에서 무작위로 샘플을 추출해 1~5점 척도로 품질 점수를 매기도록 Teacher 모델에 요청하면, 수작업 검토 없이도 품질 분포를 파악할 수 있습니다. 점수가 일정 기준(예: 3점) 미만인 샘플은 제거하거나 재생성합니다.

LLM-as-Judge 방식의 주의점은 Teacher 모델이 자신이 생성한 데이터를 평가할 경우 **자기 편향(Self-Preference Bias)**이 발생할 수 있다는 점입니다. 이를 완화하려면 다른 모델(예: GPT-4o로 생성한 데이터를 Claude로 평가)을 Judge로 활용하거나, 동일 모델을 Judge로 쓸 때는 평가 프롬프트에 엄격한 비판적 관점을 명시하는 것이 효과적입니다.

합성 데이터 품질 필터링 파이프라인 생성된 샘플이 자동 필터를 거쳐 LLM Judge 점수 3 이상이면 최종 데이터셋에 포함되고, 미달 시 재생성 가능 여부에 따라 재시도하거나 폐기되는 순환 흐름. 예 아니오 아니오 예 INPUT 생성된 샘플 FILTER 자동 필터 형식 · 길이 · 중복 LLM Judge 점수 3 이상? OUTPUT 최종 데이터셋 재생성 가능? 폐기 LEGEND 처리 단계 판단 분기 미포함(폐기) 통과 흐름 비활성 경로

자동 필터와 LLM Judge를 직렬로 연결하면 최종 데이터셋에 도달하는 비율이 낮아지지만, 품질 밀도가 높아져 파인튜닝 효율이 개선됩니다.


편향 감지와 균형 맞추기

합성 데이터에는 Teacher 모델이 학습한 편향이 그대로 전이될 수 있습니다. 예를 들어 Teacher 모델이 특정 정치적 관점이나 문화적 시각에 편향되어 있다면, 생성된 데이터도 같은 편향을 띠게 됩니다. 카테고리별 샘플 수 분포, 응답 톤(긍정/부정 비율), 특정 엔티티(국가, 인물, 브랜드) 언급 빈도를 주기적으로 모니터링해 편향 여부를 확인해야 합니다.

데이터셋 균형을 맞출 때는 과소 표현된 카테고리를 집중적으로 추가 생성하거나, 특정 페르소나나 배경 조건을 프롬프트에 명시해 의도적으로 다양성을 확보합니다. 이 과정을 Targeted Augmentation이라고 하며, 전체 데이터를 균일하게 늘리는 것보다 훨씬 효율적으로 편향을 교정할 수 있습니다.


운영 환경 적용 시 고려사항

흔한 실수와 함정

합성 데이터 파이프라인을 처음 구축하는 팀이 자주 겪는 첫 번째 실수는 품질 검증 없이 대량 생성부터 시작하는 것입니다. 100만 건을 생성한 뒤 품질이 낮다는 사실을 발견하면 이미 상당한 API 비용이 발생한 뒤입니다. 작은 배치(1000~5000건)로 먼저 품질 지표를 확인하고, 만족스러운 수준이 확인된 뒤 스케일업하는 방식을 권장합니다.

두 번째 함정은 합성 데이터만으로 학습 데이터를 100% 채우는 것입니다. 합성 데이터는 실제 사용자 데이터를 완전히 대체하지 못합니다. 현실 세계의 오탈자, 비문법적 표현, 코드 스위칭(한영 혼용) 같은 패턴은 합성 데이터에서 충분히 재현되지 않아, 실제 배포 후 예상치 못한 입력에 취약해질 수 있습니다. 합성 데이터는 실제 데이터를 보완하는 역할로 활용하고, 최소 20~30%의 실제 데이터를 함께 혼합하는 것이 안전합니다.

세 번째 함정은 Teacher 모델의 지식 경계를 무시하는 것입니다. Teacher 모델의 학습 컷오프 이후의 최신 정보나 기업 내부 전용 지식은 합성 데이터에 반영되지 않습니다. 도메인 특화 지식이 필요한 경우에는 Teacher 모델에게 생성 시 참고할 컨텍스트 문서를 함께 제공하는 RAG 기반 합성 데이터 생성 방식을 고려해야 합니다.

합성 데이터 도입 전략 합성 데이터 파인튜닝 시 실제 데이터 혼합 비율과 규모 전략에 따라 균형 잡힌 학습 또는 비용·품질 리스크로 갈리는 의사결정 흐름. 0%만 20~30% 혼합 대량 먼저 소규모 검증 후 START 합성 데이터 도입 혼합 비율 실데이터 비중 규모 전략 생성 순서 RISK 배포 후 오입력 취약 GOOD 균형 잡힌 학습 데이터 COST API 비용 낭비 위험 GOOD 효율적 비용 관리 LEGEND 시작점 의사결정 권장 경로 주의 필요

합성 데이터 도입의 두 가지 핵심 결정 포인트는 실제 데이터 혼합 비율과 규모 확장 전략이며, 둘 다 보수적인 방향이 안전합니다.


모니터링과 비용 관리

합성 데이터 파이프라인의 운영 비용은 Teacher 모델 API 호출 횟수와 직결됩니다. 비용을 체계적으로 관리하기 위해 다음 지표를 트래킹해야 합니다. 토큰 사용량 per 샘플은 생성 프롬프트의 효율성을 나타내며, 불필요하게 긴 시스템 프롬프트나 과도한 예시 수를 줄이면 비용을 30~50% 절감할 수 있습니다. 생성 성공률은 LLM 호출당 품질 기준을 통과하는 비율로, 이 값이 50% 미만이면 프롬프트 엔지니어링이나 품질 기준 재검토가 필요합니다. 재생성 횟수는 실패한 샘플을 재생성하는 비용을 추적합니다.

비용 절감 전략으로는 **프롬프트 캐싱(Prompt Caching)**이 효과적입니다. Anthropic API의 경우 cache_control 헤더를 활용해 공통 시스템 프롬프트와 시드 예제를 캐시하면, 반복 호출 시 입력 토큰 비용을 최대 90%까지 절감할 수 있습니다. 대규모 생성에는 배치 API를 활용하면 기본 API 대비 50%의 비용 절감이 가능합니다.

확장과 마이그레이션

파이프라인이 안정화된 이후 데이터 규모를 10배 이상 확장할 때는 분산 생성(Distributed Generation) 아키텍처가 필요합니다. 단일 스크립트로 순차 생성하던 방식에서 벗어나, Apache Kafka나 Redis 큐를 활용한 작업 분배와 여러 워커의 병렬 처리로 전환해야 합니다. 이때 멱등성(Idempotency)을 보장하는 것이 중요합니다. 동일한 시드 + 랜덤 시드 조합으로 재실행해도 이미 생성된 샘플을 중복 생성하지 않도록 체크포인트 저장소를 운영해야 합니다.

Teacher 모델을 교체하는 경우(예: GPT-4o에서 Claude로 전환), 기존 데이터와 새로 생성된 데이터 간의 스타일 일관성 문제가 발생할 수 있습니다. 이런 경우에는 새로운 Teacher로 소규모 검증 셋을 생성해 기존 데이터와 품질 및 스타일 분포를 비교한 뒤, 전체 마이그레이션 여부를 결정하는 것이 안전합니다.

소규모 파이프라인 → 분산 아키텍처 전환 합성 데이터 파이프라인이 10배 이상의 처리량이 필요한 시점에 순차 처리 방식에서 큐 기반 병렬 분산 아키텍처로 전환되고, 여러 워커가 체크포인트를 거쳐 최종 데이터셋을 만드는 흐름을 보여줍니다. 10배 이상 BEFORE 소규모 파이프라인 순차 처리 AFTER 분산 아키텍처 큐 기반 병렬 WORKER 워커 1 WORKER 워커 2 WORKER 워커 N GATE 체크포인트 중복 방지 최종 데이터셋 LEGEND 전환 전 분산 처리 품질 게이트

규모 확장 시 체크포인트 저장소를 통한 중복 방지가 핵심이며, 이를 구현하지 않으면 비용 낭비와 데이터 중복이 동시에 발생합니다.


맺음말

핵심 요약

합성 데이터 생성은 LLM 파인튜닝의 데이터 병목을 해결하는 실용적인 접근법입니다. Teacher 모델이 생성하는 고품질 입출력 쌍을 학습 데이터로 활용하면, 전문가 수작업 대비 수십 배 빠른 속도로 대규모 파인튜닝 데이터셋을 구축할 수 있습니다. Self-Instruct, Evol-Instruct 같은 기법으로 다양성을 확보하고, LLM-as-Judge와 자동 필터링으로 품질을 보장하는 이중 검증 구조가 이 접근법의 핵심입니다.

합성 데이터는 만병통치약이 아닙니다. Teacher 모델의 편향이 전이되고, 최신 정보나 내부 도메인 지식이 반영되지 않을 수 있으며, 실제 사용자 데이터의 다양한 패턴을 완전히 재현하지 못합니다. 이런 한계를 인식하고 실제 데이터와 적절히 혼합하는 전략이 장기적으로 더 안정적인 모델을 만듭니다.

적용 판단 기준

합성 데이터 파이프라인을 도입할 만한 상황은 다음 조건 중 두 가지 이상에 해당할 때입니다. **레이블 데이터 확보 비용이 높은 전문 도메인(의료, 법률, 금융)**이거나, 다양한 입력 변형에 강건한 모델이 필요한 경우, 또는 소형 모델을 특정 태스크에 빠르게 특화시켜야 하는 경우입니다. 반면 이미 충분한 실제 데이터가 있거나, Teacher 모델의 품질이 목표 도메인을 커버하기 어려운 경우에는 합성 데이터 단독보다 실제 데이터 중심의 전략이 더 효과적입니다. 합성 데이터는 "없는 데이터를 만드는" 도구가 아니라, "있는 데이터를 전략적으로 증폭하는" 도구로 바라볼 때 가장 큰 효과를 발휘합니다.