본문 바로가기
studyLog. AI/오늘의 디버깅

[Pytorch Lightning] Inconsistent Batch Size in Training

by 브라이티_ 2024. 5. 29.
반응형

에러메세지 (경고메세지).

UserWarning: Trying to infer the `batch_size` from an ambiguous collection

 

 

현상.

학습을 시키려는 도중 굉장히 기이한 현상이 발견되었다. 매 Iteration 마다 라이브러리에 의해 자동적으로 포착되는 배치 사이즈가 (아래 이미지에서 The batch size we found is .... 에 해당한다.) 아래 터미널 이미지에서와 같이 매번 다르게 잡혔다. 나는 이때 배치사이즈를 고정 4로 설정해둔 상태였다. 난생 처음 보는 경우였기에 당황스러웠다.

 


원인.

원인을 분석해본 결과, 그 이유는 내가 매 배치마다의 sequence length 를 통일시켜주지 않았기 때문으로 추정되었다. (다시 말해, 패딩을 별도로 하지 않았다.) 그리고 이것은 Warning 일 뿐이지, 실제 학습에는 별 영향을 주지 않는다는 사실을 나중에서야 알았다.

 


해결.

training_step 함수 내에서 로깅할 때 명시적으로 배치 사이즈를 직접 입력해주었다.

(전)

        self.log_dict({"train/loss": loss.item(),
                       "train/lr": self.trainer.optimizers[0].param_groups[0]['lr'],
                       "train/global_step": self.global_step},
                      on_step=True, on_epoch=True, prog_bar=True, logger=True)

 

(후)

        self.log_dict({"train/loss": loss.item(),
                       "train/lr": self.trainer.optimizers[0].param_groups[0]['lr'],
                       "train/global_step": self.global_step},
                      on_step=True, on_epoch=True, prog_bar=True, logger=True, batch_size=self.config.experiment.train_bsz)

 

 

 

사실 나는, 학습 과정중에 GPU 메모리 사용량이 점차 증가하는 문제를 해결하기 위해, 이것이 원인인 줄 알고 해결법을 찾았었던 것이었다. 그런데 사실은 이것이 문제가 아니였다. 위 문제를 어떻게 해결하였는지는 다음 글에서 !

 

하 ... 에러가 끝이없다 ... 사실 MultiModal 은 엔지니어링이었을지도 ... 

반응형