[GPT-SoVITS] batch_size 변수의 부동소수점 타입 오류 수정
PR 링크: RVC-Boss/GPT-SoVITS#2662 상태: Merged | 변경: +2 / -2
들어가며
GPT-SoVITS는 음성 합성 모델 학습 도구이다. 학습 시작 시 GPU 메모리 용량에 따라 배치 크기를 자동으로 계산하는데, Python의 // 연산자가 피연산자 타입에 따라 float를 반환할 수 있다는 함정이 있었다. PyTorch의 DataLoader는 batch_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)
왜 이게 좋은가
- Python의
//연산자 함정 해결:min(mem)이float타입이면(GPU 메모리 정보가 float로 반환되는 경우)//연산 결과도float이다. 예를 들어8.0 // 2는4가 아니라4.0이다.int()로 감싸면 타입이 보장된다. - 에러 메시지 명확화: 기존에는
"batch_size should be a positive integer value, but got batch_size=4.0"같은 혼란스러운 에러가 발생했다. 값 자체는 올바른데 타입만 다른 상황이라 원인 파악이 어려웠다. - 최소한의 변경:
int()를 감싸는 것만으로 해결. 상류의mem리스트 타입을 추적하여 바꾸는 것보다 방어적이고 안전한 수정이다.
타입 관련 버그는 동적 타입 언어에서 흔하지만, 발견하기 어렵고 에러 메시지도 직관적이지 않아 디버깅에 시간을 많이 소모하게 한다. 이런 경계 지점에서의 명시적 타입 변환은 항상 좋은 습관이다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [Feast] 시간 윈도우 집계를 위한 타일링(Tiling) 지원 구현
- 현재글 : [GPT-SoVITS] batch_size 변수의 부동소수점 타입 오류 수정
- 다음글 [vllm] W4A8 Marlin 커널 - 4비트 가중치 + 8비트 활성화 양자화
댓글