개발 창고/AI

Transformers로 모델 파인튜닝하기: 개발자 실전 가이드

Royzero 2025. 6. 19. 22:00
반응형

1. 파인튜닝이란?

파인튜닝(fine-tuning)은 사전학습(pretrained)된 Transformer 모델을 내 데이터에 맞게 미세 조정하는 과정입니다.
처음부터 학습하는 것보다 적은 데이터와 자원으로 원하는 작업 성능을 얻을 수 있습니다


2. 전체 워크플로우 요약

  1. 데이터셋 로드 및 전처리
  2. 모델 로드 및 분류 헤드 구성
  3. TrainingArguments 설정
  4. Trainer 인스턴스 생성
  5. trainer.train() 실행
  6. (선택) Hub에 모델 업로드

3. 실습: IMDB 영화 리뷰 감정 분석

3‑1) 라이브러리 설치

pip install transformers datasets evaluate

3‑2) 데이터 로드 및 토크나이징

from datasets import load_dataset
from transformers import AutoTokenizer

raw = load_dataset("imdb")  # train/test
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")

def tokenize_fn(ex):
    return tokenizer(ex["text"], padding="max_length", truncation=True)

ds = raw.map(tokenize_fn, batched=True)
small_train = ds["train"].shuffle(seed=42).select(range(1000))
small_eval = ds["test"].shuffle(seed=42).select(range(1000))
  • 데이터를 최대 길이로 패딩/토큰화해 Dataset.map으로 처리했습니다.

3‑3) 모델 로드

from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(
    "bert-base-cased", num_labels=2
)
  • 사전학습된 BERT 모델에 임의로 초기화된 분류 헤드를 붙입니다.

3‑4) 평가 함수 정의

import numpy as np
import evaluate
metric = evaluate.load("accuracy")

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    preds = np.argmax(logits, axis=-1)
    return metric.compute(predictions=preds, references=labels)
  • evaluate 라이브러리를 사용한 간단한 정확도 계산 함수입니다.

3‑5) Trainer 설정 및 실행

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="hf-finetuned-imdb",
    evaluation_strategy="epoch",
    push_to_hub=True
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=small_train,
    eval_dataset=small_eval,
    compute_metrics=compute_metrics
)
trainer.train()
trainer.push_to_hub()
  • TrainingArguments로 체크포인트, 평가 단위(epoch), Hub 업로드 포함 설정을 지정합니다.

4. 커스터마이징 팁

  • 일부 레이어만 학습시키기

    for param in model.bert.encoder.parameters():
        param.requires_grad = False
    • 특정 계층만 업데이트할 때 활용 .
  • 파라미터 효율적 튜닝(LoRA, PEFT)

    • LoRA는 적은 수의 변수만 학습해 리소스를 줄입니다.
    • Hugging Face peft 패키지 참고.

5. 결과 활용 및 재사용

from transformers import pipeline

clf = pipeline("text-classification", model="내허브/모델명")
print(clf("This movie was fantastic!"))
  • trainer.push_to_hub() 후, 허브 모델명으로 pipeline에서 불러 사용 가능합니다.

요약

  • 파인튜닝은 적은 리소스로 빠르게 성능 좋은 모델을 얻는 방법입니다.
  • Trainer/API 사용으로 몇 줄 코드로 학습·평가·배포가 가능합니다.
  • 레이어 고정, LoRA/PEFT 통해 비용을 줄이는 방법도 활용할 수 있습니다.
반응형