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 가 canonical 학습 루프. 조립: 모델, 토크나이저, 토크나이즈된 Dataset, optional metric, optional callback, TrainingArguments 객체. trainer.train() 실행; trainer.evaluate() 보고; trainer.save_model() 저장. 같은 루프가 fine-tuning, LoRA 학습, 풀 pre-training (적절한 args 와) 핸들.

TrainingArguments 노브 95% 셋

  • output_dir — 체크포인트 + tensorboard 로그.
  • num_train_epochs 또는 max_steps — budget.
  • per_device_train_batch_size + gradient_accumulation_steps — effective batch.
  • learning_rate, weight_decay, warmup_ratio, lr_scheduler_type — optimization.
  • bf16 / fp16 — mixed precision.
  • eval_strategy, eval_steps, save_strategy, save_steps — cadence.
  • logging_steps, report_to=['tensorboard', 'wandb'] — observability.

Trainer 가 숨기는 거

분산 셋업 (single-node multi-GPU 가 accelerate 통해 “just works”), gradient accumulation, mixed precision, gradient clipping, lr scheduling, 체크포인트 resumption. 비용: opinionated. 이질적 optimizer / non-standard loss 면 raw PyTorch 루프로 내려가 — 또는 trl / peft Trainer subclass 사용.

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

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

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