📢 모델을 fine-tuning 하는 방법에 대해 정리한 페이지입니다.
파인튜닝 방식 선택
| 방식 | 설명 | 장단점 |
|---|---|---|
| Full Fine-tuning | 80억 파라미터 전체를 재학습 | 성능은 좋지만 GPU 메모리 많이 필요 (A100 80GB 여러 장), 시간·비용 큼 |
| LoRA (Low-Rank Adaptation) | 원본 가중치는 고정, 작은 "어댑터" 레이어만 학습 | 훨씬 적은 자원(RTX 4090 한 장도 가능)으로 가능, 실무에서 압도적으로 많이 씀 |
| QLoRA | LoRA + 4bit 양자화 결합 | 더 적은 메모리로 가능, 약간의 성능 손실 감수 |
데이터 포맷 구성
{
"messages": [
{"role": "system", "content": "당신은 임상 정보를 기반으로 답변하는 의료 AI입니다."},
{"role": "user", "content": "당뇨병 환자의 목표 HbA1c 수치는 어떻게 되나요?"},
{"role": "assistant", "content": "일반적으로 목표 HbA1c는 7% 미만이며..."}
]
}학습 프레임워크
| 도구 | 특징 |
|---|---|
Hugging Face trl (SFTTrainer) | 가장 표준적, PyTorch 기반, 커스터마이징 쉬움 |
| Axolotl | 설정 파일(YAML)만으로 파인튜닝 파이프라인 자동화 |
| Unsloth | LoRA/QLoRA 속도 최적화 (2~5배 빠름, 메모리도 절약) |
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()학습된 어댑터 병합 & 배포
model = model.merge_and_unload() # LoRA 어댑터를 원본 가중치에 병합
model.save_pretrained("./hari-q3-8b-medical-finetuned")