1. Early Stopping 사용 배경
LLM 모델을 fine-tuning 하는 과정에서 loss가 줄어들다가 다시 증가해서 2 epoch가 모두 돌아갔을 때 오히려 성능이 떨어지고 있었다.
이럴 때, 기존 딥러닝 모델 학습 시 early stopping을 콜백 함수를 넣어 지정한 early_stopping_patience 가 지나면 학습을 멈추게 했었는데 사전학습된 모델을 불러와 fine-tuning할 때도 해당 기능을 쓸 수 있는지 궁금했다.
LLM 모델을 fine-tuning할 때 쉽게 사용하는 클래스가 허깅페이스의 SFTTrainer와 Trainer 클래스인데
Trainer 클래스에서는 EarlyStoppingCallback 함수를 지원하지만 SFTTrainer에서는 지원하지 않는다.
2. Trainer 클래스를 이용한 EarlyStopping 적용
해당 callback을 추가하기 위해 eval_dataset과 evaluation_strategy를 추가해줘야 한다.
3. Trainer vs. SFTTrainer 비교
Trainer 클래스 같은 경우 처음부터 LLM 모델을 학습할 때 일반적으로 쓰이고 다양한 configuration option이 있어 custom하기가 용이하다.
SFT를 한다고 하면 많이 보이는 SFTTrainer는 Fine-tuning에 맞춰진 클래스기 때문에 적은 시간과 적은 데이터셋으로 효과적으로 학습이 가능하지만 옵션이 Trainer에 비해서 적다.
처음부터 대량의 데이터로 LLM 모델을 학습하는 경우에는 여러 옵션을 설정하여 여러 실험으로 성능을 높일 수 있는 Trainer 클래스를 추천하며, 간단하게 미세조정학습만 하는 경우에는 SFTTrainer를 사용하는 것을 추천한다.
Trainer | SFTTrainer | |
목적 | 처음부터 학습 | 사전학습 모델의 미세조정학습 |
커스터마이징 | configuration 옵션이 다양하여 커스텀 용이 | 사용 용이하지만 옵션이 적음 |
학습 Workflow | gradient accumulation, early stopping, checkpointing, distrubuted training 지원 |
간소화된 workflow |
필요 데이터 | Larger datasets | Smaller datsets |
메모리 사용 | Higher | Lower with PEFT and packing optimization |
학습 속도 | Slower | Faster with smaller datasets and shorter times |
참고
'AI' 카테고리의 다른 글
[Causal Analysis] PC 알고리즘 (0) | 2025.03.30 |
---|---|
효과적인 프롬프트 엔지니어링 (기초) : 프롬프트 구성요소와 효과적인 프롬프트 구조 (0) | 2025.03.02 |
LLM 기법(Fine-tuning, RAG) 설명 및 적용 가이드 (0) | 2025.02.16 |
[최적화 알고리즘] 유전알고리즘 기본 개념 및 배낭문제 실습 (with python) (1) | 2024.12.22 |