본문 바로가기
HRDI_AI/머신러닝_딥러닝 핵심 기술과 실무 중심 생성형 AI 프로젝트

1. Trainer 하이퍼파라미터 정리

by Toddler_AD 2025. 11. 27.

예를 들어, HuggingFace Seq2SeqTrainer를 쓸 때 아래와 같이 설정했다고 하면:

training_args = Seq2SeqTrainingArguments(
    output_dir="outputs",
    
    eval_strategy="steps",
    eval_steps=5000,

    save_strategy="steps",
    save_steps=5000,
    save_total_limit=3,

    load_best_model_at_end=True,
    metric_for_best_model="eval_loss",
    greater_is_better=False,

    logging_steps=200,
    predict_with_generate=True,

    gradient_accumulation_steps=1,
    report_to=[],  # wandb, tensorboard 같은 외부 로그 끔
)

각 옵션이 의미하는 바를 훈련 흐름 관점에서 풀어보면:

1-1. 평가 관련 설정: eval_strategy, eval_steps

  • eval_strategy="steps"
    → “훈련 step 기준으로 정기적으로 평가(eval) 를 돌리겠다”는 뜻입니다.
  • eval_steps=5000
    5,000 step마다 validation 데이터셋으로 평가를 실행합니다.
  • 평가 시에는:
    • 현재 모델 파라미터를 freeze(학습 X)한 상태로
    • validation 셋을 한 바퀴 돌며 eval_loss, BLEU 등 메트릭을 계산합니다.

포인트
→ gradient 자체는 모든 train step마다 계산되지만,
→ “그중 일부 step(5000, 10000, …)”에서만 평가를 추가로 수행하는 구조입니다.


1-2. 체크포인트 저장: save_strategy, save_steps, save_total_limit

  • save_strategy="steps"
    → “step 기준으로 정기적으로 체크포인트를 저장하겠다”
  • save_steps=5000
    5,000 step마다 모델 가중치 + 옵티마이저 상태 등을 저장
  • save_total_limit=3
    → 최근 체크포인트를 최대 3개까지만 유지, 나머지는 자동 삭제
    (디스크가 꽉 차는 것 방지)

보통은 eval_steps와 save_steps를 맞춰 두고,

평가를 했는데 성능이 좋으면 그 시점의 모델을 저장한다”

라는 패턴으로 씁니다.


1-3. 베스트 모델 자동 로드: load_best_model_at_end, metric_for_best_model, greater_is_better

  • load_best_model_at_end=True
    → 훈련이 끝난 뒤, 지금까지 저장된 체크포인트 중에서 가장 성능이 좋았던 모델을 다시 불러옵니다.
  • metric_for_best_model="eval_loss"
    → “무엇을 기준으로 ‘베스트’를 정할 것인가?”
    → 여기서는 eval_loss가 가장 낮은 시점을 베스트로 선택.
  • greater_is_better=False
    → loss는 작을수록 좋으니,
    → “값이 작을수록 더 좋은 모델”이라고 명시.

결과적으로
학습 마지막 스텝의 모델이 아니라,
validation loss가 가장 낮았던 시점의 모델이 최종 모델로 남습니다.
(과적합이 많이 된 뒤의 상태를 자동으로 피하는 효과)


1-4. 로깅: logging_steps

  • logging_steps=200
    200 step마다 로그를 한 번씩 기록합니다.
  • 이때 보통 함께 찍히는 값들:
    • loss (train loss, moving average 등)
    • grad_norm
    • 학습 속도, 사용 시간 등

즉, 모든 step에서 gradient는 계산되지만,
우리가 콘솔/로그에서 확인하는 grad_norm, loss는
logging_steps 간격으로만 찍히는 스냅샷이라고 보면 됩니다.


1-5. 생성 모델 전용 옵션: predict_with_generate

  • predict_with_generate=True
    → 평가할 때 단순히 로짓만 보는 것이 아니라,
    model.generate()를 실제로 호출해서 번역/요약 같은 “문장 단위 출력”을 생성합니다.
  • 그래서:
    • eval_loss 외에 BLEU, ROUGE 같은 시퀀스 레벨 메트릭도 함께 계산할 수 있게 됩니다.

번역 모델, 요약 모델 같은 seq2seq 작업에서는 거의 필수로 켜는 옵션입니다.


1-6. 배치/업데이트 관련: gradient_accumulation_steps

  • gradient_accumulation_steps=1
    → “배치 1개마다 즉시 backward + optimizer.step을 수행한다”는 뜻입니다.

만약 4로 설정하면:

  • 4개 미니배치에 대한 gradient를 쌓아두었다가
  • 4번째 배치에서 한 번만 optimizer.step()을 실행
    실질적인 배치 크기를 4배로 키운 효과

하지만 지금 설정은 1이므로,

모든 train step마다 바로 gradient 계산 & 파라미터 업데이트가 이루어집니다.


1-7. 로그 전송 끄기: report_to

  • report_to=[]
    → wandb, tensorboard, MLflow 같은 외부 로깅 툴로는 아무 것도 보내지 않겠다는 의미.
  • 콘솔 로그나 trainer.log_history 정도만 사용하고 싶을 때 유용합니다.