[axolotl] SchedulerMixin.create_scheduler() optimizer 누락 버그 수정
PR 링크: axolotl-ai-cloud/axolotl#3435 상태: Merged | 변경: +8 / -1
들어가며
SchedulerMixin.create_scheduler()는 학습률 스케줄러를 생성하는 메서드입니다. transformers의 기본 구현은 optimizer 파라미터가 None일 때 self.optimizer를 사용하지만, axolotl의 오버라이드에서는 이 fallback 로직이 빠져있어, 특정 호출 패턴에서 None optimizer로 스케줄러를 생성하려는 에러가 발생했습니다.
핵심 코드 분석
Before:
def create_scheduler(
self, num_training_steps: int, optimizer: torch.optim.Optimizer = None
) -> LRScheduler:
# optimizer가 None이어도 그대로 사용
...
After:
def create_scheduler(
self, num_training_steps: int, optimizer: None | torch.optim.Optimizer = None
) -> LRScheduler:
if optimizer is None:
if self.optimizer is None:
raise ValueError(
"Optimizer must be set before calling create_scheduler "
"or passed as an argument."
)
optimizer = self.optimizer
...
변경점은 세 가지입니다:
optimizer가None이면self.optimizer로 fallbackself.optimizer도None이면 명확한 에러 메시지 출력- 타입 힌트를
torch.optim.Optimizer = None에서None | torch.optim.Optimizer = None으로 수정하여 Optional 의미를 명확히 표현
왜 이게 좋은가
이 버그는 axolotl의 커스텀 스케줄러(cosine with min LR 등)를 사용할 때만 발생하는 조건부 버그입니다. transformers 기본 스케줄러를 사용하면 super().create_scheduler()로 위임되어 자체 fallback이 동작하지만, 커스텀 경로에서는 fallback이 없었습니다. 8줄의 작은 수정이지만, 디버깅하기 어려운 NoneType has no attribute 유형의 런타임 에러를 방지하며, 명확한 에러 메시지가 문제 해결 시간을 크게 줄여줍니다.
정리
| 항목 | 내용 |
|---|---|
| 문제 | create_scheduler에 optimizer=None 전달 시 에러 |
| 해결 | self.optimizer fallback + 명시적 ValueError |
| 영향 | 커스텀 LR 스케줄러 사용 시 안정성 확보 |
참고 자료
알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
- [axolotl] Context Parallel 이중 시퀀스 분할 버그 수정: noop context manager로 중복 적용 방지
- [axolotl] Tensor Parallelism batch_size 계산 버그 수정: dp_world_size 기반으로 전환
- [axolotl] Context Parallelism batch_size 및 total_num_steps 계산 수정
- [axolotl] Flash Optimizer 지원 추가: FlashAdamW, FlashSGD, FlashLion 등 5종 커스텀 옵티마이저
- [GPT-SoVITS] batch_size 변수의 부동소수점 타입 오류 수정
PR Analysis 의 다른글
- 이전글 [feast] Feast Redis 온라인 스토어 Protobuf 파싱 최적화
- 현재글 : [axolotl] SchedulerMixin.create_scheduler() optimizer 누락 버그 수정
- 다음글 [axolotl] Context Parallelism batch_size 및 total_num_steps 계산 수정
댓글