본문으로 건너뛰기

[GPT-SoVITS] batch_size 변수의 부동소수점 타입 오류 수정

PR 링크: RVC-Boss/GPT-SoVITS#2662 상태: Merged | 변경: +2 / -2

들어가며

GPT-SoVITS는 음성 합성 모델 학습 도구이다. 학습 시작 시 GPU 메모리 용량에 따라 배치 크기를 자동으로 계산하는데, Python의 // 연산자가 피연산자 타입에 따라 float를 반환할 수 있다는 함정이 있었다. PyTorch의 DataLoaderbatch_size 매개변수로 정수만 받기 때문에 batch_size=4.0 같은 값이 전달되면 학습이 시작도 못하고 실패했다.

핵심 코드 분석

Before: float 결과 그대로 사용

minmem = min(mem)
default_batch_size = minmem // 2 if version not in v3v4set else minmem // 8
default_batch_size_s1 = minmem // 2

After: int()로 명시적 변환

minmem = min(mem)
default_batch_size = int(minmem // 2 if version not in v3v4set else minmem // 8)
default_batch_size_s1 = int(minmem // 2)

왜 이게 좋은가

  1. Python의 // 연산자 함정 해결: min(mem)float 타입이면(GPU 메모리 정보가 float로 반환되는 경우) // 연산 결과도 float이다. 예를 들어 8.0 // 24가 아니라 4.0이다. int()로 감싸면 타입이 보장된다.
  2. 에러 메시지 명확화: 기존에는 "batch_size should be a positive integer value, but got batch_size=4.0" 같은 혼란스러운 에러가 발생했다. 값 자체는 올바른데 타입만 다른 상황이라 원인 파악이 어려웠다.
  3. 최소한의 변경: int()를 감싸는 것만으로 해결. 상류의 mem 리스트 타입을 추적하여 바꾸는 것보다 방어적이고 안전한 수정이다.

타입 관련 버그는 동적 타입 언어에서 흔하지만, 발견하기 어렵고 에러 메시지도 직관적이지 않아 디버깅에 시간을 많이 소모하게 한다. 이런 경계 지점에서의 명시적 타입 변환은 항상 좋은 습관이다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글