인공지능 개발자 수다(유튜브 바로가기) 자세히보기

자연어처리/LLM을 위한 코딩

[LLM] 모델 학습 with Hugging Face (TrainingArguments, Trainer, trl) (5)

Suda_777 2025. 2. 13. 02:34
반응형

1. 개요

이번 포스팅에서는

HuggingFace에서 제공하는

프레임워크에 대해 소개하겠다.

라이브러리 역할 주요 기능
Transformers 모델, 토크나이저 AutoModel, AutoTokenizer 등
Trainer 지도학습 (SFT) Trainer, TrainingArguments
TRL 강화학습 (RLHF) PPOTrainer, SFTTrainer
DeepSpeed GPU 메모리 최적화 ZeRO Stage, Hugging Face Trainer와 연동
Accelerate 분산 학습 최적화 여러 GPU/TPU 환경에서 Trainer 가속화
PEFT (Parameter Efficient Fine-Tuning) 파라미터 효율적 파인튜닝 기법 지원 LoraConfig, get_peft_model
Evaluate 모델 평가 load_metric("bleu"), compute()

 

세가지 단계에 걸쳐 학습을 진행한다.

  1. 학습 설정 (TrainingArguments)
  2. Trainer 설정
  3. 학습 실행

2. TrainingArguments

2.1. 설명

TrainingArguments는 학습을 제어하는 핵심 설정을 담당하는 클래스 이다. (출처 : huggingface)

 

2.1.1. 기본 학습 설정

옵션 설명 기본값 설정추천
output_dir 모델 체크포인트 저장 디렉토리 필수 V
overwrite_output_dir 기존 체크포인트 엎어쓰기 여부 False  
num_train_epochs 학습 에포크 수 3  
max_steps 최대 학습 스탭(설정하면 num_train_epochs 무시) -1 (제한없음) V
per_device_train_batch_size GPU당 학습 배치 크기 8 V
per_device_eval_batch_size GPU당 평가 배치 크기 8 V
gradient_accumulation_steps Gradient Accumulation 스탭 수 1  
gradient_checkpointing Gradient Checkpointing 활성화 False  

 

2.1.2. 평가(Evalueation) 및 로깅 설정

옵션 설명 기본값 설정추천
evaluation_strategy 평가 실행 시점 ("no", "steps", "epoch") "no" V
eval_steps 평가를 수행할 스탭 간격 (사용시 evaluation_strategy="steps") 500  
logging_dir TensorBoard 로그 저장 디렉토리 "runs"  
logging_strategy 로깅 실행 시점 ("no", "steps", "epoch") "steps" V
logging_steps 로그 출력 간격 (stpep 단위) 500  
save_strategy 체크포인트 저장 주기 ("no", "steps", "epoch") "steps" V
save_steps 체크포인트 저장 주기 (step 단위, ) 500  
save_total_limit 저장할 체크포인트 개수 (최신 N개 유지) None  

 

2.1.3. 옵티마이저 및 학습 스케줄링

옵션 설명 기본값 설정추천
learning_rate 학습률 5e-5  
weight_decay L2 정규화 계수 0  
adam_beta1 Adam 옵티마이저의 beta1 값 0.9  
adam_beta2 Adam 옵티마이저의 beta2 값 0.99  
adam_epsilon Adam 옵티마이저의 epsilon 값 1e-8  
max_grad_norm Gradient Clipping 값 1.0  
lr_scheduler_type 학습 스케줄러 (linear, cosine, constant, polynomial) "linear"  
warmup_steps Warmup 스텝 수 0  
warmup_ratio 전체 스탭 대비 Warmup 비율 0.0  

 

2.1.4. Mixed Precision (FP16, BF16) 및 GPU 최적화

옵션 설명 기본값 설정추천
fp16 - True인 경우 가중치(weight), 활성화값(activation), 연산(operation)을 FP16 형식으로 변환
- False인 경우 fp32 를 사용함

- GPU가 FP16을 지원하는 경우 (NVIDIA Volta 이상) 사용
- 16이 32 보다 적은 양의 메모리를 사용한다.
False  
bf16 - True인 경우 bf16 사용
- False인 경우 fp32 를 사용함

- NVIDIA Ampere (A100, RTX 30XX) 이상에서 학습할 때 bf16이 FP16보다 더 안정적
- Gradient Scaling 없이도 사용 가능 → 모델 수렴이 더 쉬움
- Ampere 이전의 GPU (V100, RTX 20XX, GTX 시리즈)에서는 지원되지 않음
- FP16보다 메모리 절약 효과가 낮을 수도 있음
False  
fp16_opt_level - Apex AMP 최적화 레벨 ( "O0" , "O1", "O2", "O3")
- 일반적으로 "O1"로 하는게 좋음
"O1"  
fp16_full_eval - 평가 시에 FP16 사용
- 평가 속도를 높이고 싶은 경우
False  
half_precision_backend - "auto" : 별일 없으면 auto로 하자
- "apex" : NVIDIA의 apex 라이브러리 사용 (수동 설치 필요)
- "amp" : PyTorch의 기본 AMP (Automatic Mixed Precision) 사용
"auto"  

 

2.1.5. 분산 학습 & FSDP 설정

기본적으로 GPU가 2개 이상일 때 사용한다.

  • GPU가 2개 이상 : FSDP / DDP
  • GPU가 8개 이상 : FSDP + ZeRO (DeepSpeed) 
옵션 설명 기본값 설정추천
ddp_backend - 멀티 GPU 분산 학습용
- "nccl", "gloo", "mpi"
"nccl"  
fsdp - Fully Sharded Data Parallel 활성화
- "full_shard", "auto_wrap", "offload"
"None"  
fsdp_offload_params CPU로 일부 파라미터 오프로딩 False  
fsdp_transformer_layer_cls_to_wrap FSDP를 적용할 Transformer 레이어 클래스 이름 None  

 

2.1.6. Checkpoint & Resume 설정

옵션 설명 기본값 설정추천
resume_from_checkpoint 체크포인트에서 학습 재개 None  
save_on_each_node 노드마다 개별적으로 체크포인트 저장 False  

 

2.1.7. TPU & Multi-GPU 관련 설정

옵션 설명 기본값 설정추천
tpu_num_cores TPU 코어 개수 None  
dataloader_num_workers DataLoader의 병렬 처리 워커 수 0  
dataloader_pin_memory DataLoader에서 GPU에 데이터를 핀(Pin)할지 여부 True  

 

2.1.8. WandB, TensorBoard, Comet 로깅 설정

옵션 설명 기본값 설정추천
report_to 로깅할 서비스 ("wandb", "tensorboard", "comet_ml", "none") "none"  
run_name 실험 이름 (WandB, TensorBoard 용) None  
disable_tqdm True로 설정하면 tqdm 로그 출력 비활성화 False  

 


2.2. 기본 사용법

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",          # 모델 저장 경로
    evaluation_strategy="epoch",     # 평가 주기 (매 epoch마다 평가)
    save_strategy="epoch",           # 체크포인트 저장 주기
    per_device_train_batch_size=8,   # 학습 배치 크기
    per_device_eval_batch_size=8,    # 평가 배치 크기
    num_train_epochs=3,              # 학습 epoch 수
    weight_decay=0.01,               # L2 정규화 (Weight Decay)
    logging_dir="./logs",            # 로그 저장 경로
    logging_strategy="epoch",        # 로그 저장 주기
    save_total_limit=2,              # 저장할 체크포인트 개수 제한
    push_to_hub=False,               # 모델을 Hugging Face Hub에 업로드할지 여부
)

 


3. Trainer

3.1. Trainer 설명

transformers.Trainer는 Hugging Face의 transformers 라이브러리에서 제공하는 학습 도구로, 모델 학습을 편리하게 관리할 수 있다.

Trainer 설정 (Trainer 설명 출처 링크)

from transformers import Trainer

trainer = Trainer(
    model=model,                    # 학습할 모델
    args=training_args,              # 학습 설정 (TrainingArguments)
    train_dataset=train_dataset,      # 학습 데이터셋 (Dataset 객체)
    eval_dataset=eval_dataset,        # 평가 데이터셋 (Dataset 객체)
    tokenizer=tokenizer,              # 토크나이저 (필요할 경우)
    data_collator=data_collator,      # 배치 데이터 처리 (옵션)
    compute_metrics=compute_metrics,  # 평가 지표 계산 (옵션)
)

 

학습 실행

trainer.train()

 


3.2. train() 추가 옵션

체크포인트에서 다시 학습하기

trainer.train(resume_from_checkpoint=True)

 

모델 저장 및 로드

trainer.save_model("./my_model")  # 모델 저장
model = AutoModelForSequenceClassification.from_pretrained("./my_model")  # 저장된 모델 로드

 


4. 커스텀 metric 추가

  • datasets.load_metric 에서 기본 metric 제공
  • compute_metrics 에 평가 함수 추가
import numpy as np
import evaluate  # 🤗 evaluate 라이브러리 사용

accuracy = evaluate.load("accuracy")

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    predictions = np.argmax(logits, axis=-1)
    return accuracy.compute(predictions=predictions, references=labels)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"],
    compute_metrics=compute_metrics,  # 평가 함수 추가
)

 

datasets.load_metric()에서 지원되는 metric 종류

  • accuracy (정확도)
  • f1 (F1-score)
  • precision (정밀도)
  • recall (재현율)
  • roc_auc (ROC AUC)
  • bleu (BLEU - 번역 성능 평가)
  • wer (Word Error Rate - 음성 인식 평가)
  • mse (Mean Squared Error - 회귀 문제)

 


5. TRL

TRL (Transformer Reinforcement Learning)은

Hugging Face가 제공하는 강화학습(Reinforcement Learning) 기반 언어모델 트레이닝 라이브러리이다.

 

다양한 trainer를 제공하고 있으며, 사용방법은 간단하기 때문에

불러와서 사용하면 되겠다.

아래 경로로 가서 확인해 보자

  • 왼쪽 목차 > API > Trainers > 원하는 trainer 클릭

TRL 링크

 

TRL - Transformer Reinforcement Learning

 

huggingface.co

 

trainer를 선택해 들어가면 아래와 같이

실행할 수 있는 코드와

파라미터를 정리해둔 문서가 있다.

 

deepSpeed 부터는 다음 포스팅에서 설명하겠다.

 

 

반응형