fine-tuning 하는 대략적인 방법

쪙이·2026년 7월 6일

인공지능

목록 보기
51/54

📢 모델을 fine-tuning 하는 방법에 대해 정리한 페이지입니다.

  1. 파인튜닝 방식 선택

    방식설명장단점
    Full Fine-tuning80억 파라미터 전체를 재학습성능은 좋지만 GPU 메모리 많이 필요 (A100 80GB 여러 장), 시간·비용 큼
    LoRA (Low-Rank Adaptation)원본 가중치는 고정, 작은 "어댑터" 레이어만 학습훨씬 적은 자원(RTX 4090 한 장도 가능)으로 가능, 실무에서 압도적으로 많이 씀
    QLoRALoRA + 4bit 양자화 결합더 적은 메모리로 가능, 약간의 성능 손실 감수
  2. 데이터 포맷 구성

    • 고정된 QA 데이터를 Qwen3의 chat template 형식(HARI-Q3도 동일 구조)에 맞게 변환
      {
        "messages": [
          {"role": "system", "content": "당신은 임상 정보를 기반으로 답변하는 의료 AI입니다."},
          {"role": "user", "content": "당뇨병 환자의 목표 HbA1c 수치는 어떻게 되나요?"},
          {"role": "assistant", "content": "일반적으로 목표 HbA1c는 7% 미만이며..."}
        ]
      }
    • 질문의 다양한 표현(패러프레이징)을 늘려주면 일반화 성능이 좋아짐
    • 데이터 품질이 양보다 훨씬 중요
  3. 학습 프레임워크

    도구특징
    Hugging Face trl (SFTTrainer)가장 표준적, PyTorch 기반, 커스터마이징 쉬움
    Axolotl설정 파일(YAML)만으로 파인튜닝 파이프라인 자동화
    UnslothLoRA/QLoRA 속도 최적화 (2~5배 빠름, 메모리도 절약)
    • 간단한 흐름 예시 (trl 기준)
      from peft import LoraConfig
      from trl import SFTTrainer, SFTConfig
      
      lora_config = LoraConfig(
          r=16,              # 어댑터 랭크 (클수록 표현력↑, 메모리↑)
          lora_alpha=32,
          target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
          lora_dropout=0.05,
          task_type="CAUSAL_LM"
      )
      
      trainer = SFTTrainer(
          model="snuh/hari-q3-8b",
          train_dataset=your_qa_dataset,
          peft_config=lora_config,
          args=SFTConfig(
              output_dir="./hari-medical-lora",
              num_train_epochs=3,
              per_device_train_batch_size=4,
              learning_rate=2e-4,
          )
      )
      trainer.train()
  4. 학습된 어댑터 병합 & 배포

    • LoRA로 학습하면 원본 모델과 별도로 작은 어댑터 파일(수십~수백 MB) 생성
      model = model.merge_and_unload()  # LoRA 어댑터를 원본 가중치에 병합
      model.save_pretrained("./hari-q3-8b-medical-finetuned")
  • 실무에서 주의할 점
    • Catastrophic Forgetting: QA 데이터로만 계속 학습시키면, 원래 HARI-Q3가 갖고 있던 일반 의료 추론 능력(KMLE 벤치마크 성능 등)이 오히려 떨어질 수 있음 → 일반 데이터와 섞어서 학습(replay)하거나, 학습률을 낮게 잡아 완화
    • Overfitting: 데이터가 고정이고 양이 적으면, 모델이 QA를 "암기"만 하고 조금만 표현이 바뀐 질문엔 답을 못할 수 있음 → 데이터 증강(같은 답변에 다른 질문 표현 여러 개) 필요
    • 평가셋 분리: 학습에 쓰지 않은 QA 일부를 검증용으로 떼어놔야 실제 일반화 성능을 확인 가능

0개의 댓글