내가 직접 LLM을 훈련시키고 HuggingFace에 공개했습니다
Source: Dev.to
개요
이 글은 의료 데이터에 언어 모델을 파인튜닝하고 Hugging Face에 배포하는 과정을 문서화한 것입니다.
모델 선택
- 기본 모델:
facebook/opt-1.3b– 13억 파라미터, 오픈소스, 사용 제한 없음.
기술: LoRA (Low‑Rank Adaptation)
LoRA는 고정된 기본 모델 위에 작은 학습 가능한 어댑터 레이어를 추가하여 학습 가능한 파라미터 수를 13억에서 약 400만(≈100배 저렴)으로 줄입니다.
학습 환경
- 하드웨어: 무료 Google Colab Tesla T4 GPU (15 GB VRAM), 주당 30 시간.
- 제약: 로컬 GPU가 없으며, CPU 학습은 며칠이 걸릴 수 있습니다.
핵심 코드
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer, SFTConfig
# Load base model
model = AutoModelForCausalLM.from_pretrained("facebook/opt-1.3b")
# Add LoRA adapters
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
# Train
trainer = SFTTrainer(
model=model,
train_dataset=train_dataset,
args=SFTConfig(num_train_epochs=3, learning_rate=2e-4)
)
trainer.train()
학습 결과
무료 T4 GPU에서 1.5 시간 만에 학습이 완료되었습니다. 손실(Loss) 진행 상황:
- Step 100: 1.163
- Step 500: 0.994
- Step 1000: 0.967
- Step 1700: 0.944 ← 학습 완료
학습 손실과 검증 손실이 동시에 감소했으며, 이는 단순 암기가 아니라 실제 학습이 이루어졌음을 의미합니다.
Hugging Face에 배포
model.push_to_hub("Yakhilesh/medmind-opt-medical")
tokenizer.push_to_hub("Yakhilesh/medmind-opt-medical")
모델(어댑터 가중치만 ≈ 12.6 MB)은 이제 Yakhilesh/medmind-opt-medical 에서 공개적으로 이용할 수 있습니다. 누구나 다운로드하고 사용할 수 있습니다.
주요 시사점
- 파인튜닝은 모델 크기보다 데이터 품질에 더 크게 의존합니다.
- LoRA는 최소한의 컴퓨팅 비용으로 대형 모델을 효율적으로 적응시킬 수 있게 합니다.
- 짧은 1.5시간 파인튜닝만으로도 손실 곡선이 보여주듯 의미 있는 의료 패턴을 포착할 수 있습니다.