본문 바로가기
C.W.K.
Stream
Lesson 01 of 08 · published

Trainer 와 TrainingArguments

~30 min · training, trainer

Level 0스카우트
0 XP0/50 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Trainer는 반복되는 학습 골격을 맡아

transformers.Trainer에 모델, tokenizer, 변환된 Dataset, TrainingArguments, 선택적인 metric과 callback을 넣어. train()으로 학습하고 evaluate()로 평가한 뒤 save_model()로 저장하는 같은 흐름이 전체 미세조정과 LoRA에 모두 쓰여.

TrainingArguments로 예산과 관측을 명시해

  • output_dir와 epoch 또는 step 수로 산출물과 예산을 정해.
  • 장치별 batch와 gradient accumulation으로 유효 batch를 만들고 learning rate·weight decay·warmup·scheduler를 조정해.
  • bf16이나 fp16으로 혼합 정밀도를 켜.
  • 평가·저장·로그 간격과 TensorBoard 또는 W&B 보고 대상을 정해.

Trainer는 분산 실행, 누적, 정밀도, clipping, scheduler, checkpoint 재개를 감춰 줘. 대신 손실 함수나 optimizer가 매우 특수하면 PyTorch 루프나 TRL·PEFT의 전용 Trainer로 내려가야 해.

Code

최소 Trainer fine-tune·python
from transformers import (
    AutoTokenizer, AutoModelForSequenceClassification,
    Trainer, TrainingArguments, DataCollatorWithPadding,
)
from datasets import load_dataset
import numpy as np

repo = "distilbert-base-uncased"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForSequenceClassification.from_pretrained(repo, num_labels=2)

ds = load_dataset("stanfordnlp/imdb")
def tokenize(b): return tok(b["text"], truncation=True, max_length=256)
ds_tok = ds.map(tokenize, batched=True, remove_columns=["text"])

args = TrainingArguments(
    output_dir="./out",
    num_train_epochs=1,
    per_device_train_batch_size=16,
    learning_rate=2e-5,
    warmup_ratio=0.1,
    weight_decay=0.01,
    bf16=True,
    eval_strategy="steps",
    eval_steps=200,
    save_strategy="steps",
    save_steps=500,
    logging_steps=50,
    report_to=["tensorboard"],
)

def metrics(pred):
    preds = pred.predictions.argmax(-1)
    return {"accuracy": (preds == pred.label_ids).mean()}

trainer = Trainer(
    model=model, args=args,
    train_dataset=ds_tok["train"].select(range(2000)),
    eval_dataset=ds_tok["test"].select(range(500)),
    tokenizer=tok,
    data_collator=DataCollatorWithPadding(tok),
    compute_metrics=metrics,
)
trainer.train()
print(trainer.evaluate())

External links

Exercise

위의 최소 Trainer fine-tune 을 distilbert + imdb 에 돌려. TensorBoard 로그가 loss 감소 보이는지 검증. 저장 체크포인트 dir 에 weights, optimizer state, scheduler state, trainer_state.json 있는지 체크. 체크포인트에서 학습 resume, 끊긴 데서 이어가는지 검증.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.