[HF] Trainer 사용 중 만난 Error: "nll_loss_forward_reduce_cuda_kernel_2d_index" not implemented for 'Float'

황준하·2024년 4월 27일

처음에는 아래와 같은 에러로 시작하였음.

value error: target size (torch.size([8, 1])) must be the same as input size (torch.size([8, 2]))

데이터 셋을 내가 직접 만든 Dataset 클래스로 집어 넣는데 내가 구성한 Dataset과 HF에서 바라는 Dataset 구조가 달라서 발생한 문제이다. 여기서 Dataset 내부의 label의 type이 어떤 것이냐에 따라 classification loss가 자동으로 정해지도록 if문이 구성되어 있다. (single label, multi-label, regression)

나의 경우에는 DefaultDataCollator를 이용해 데이터들이 마지막에 torch로 변환이 되는데 정확히 torch.Long 인지 torch.Float으로 변환되는지는 알 수 없었다.

아무튼, problem_type이라는 변수로 loss를 수동으로 정해주었더니 "nll_loss_forward_reduce_cuda_kernel_2d_index" not implemented for 'Float' 이런 에러를 만나게 되었다.

이것도 label과 관련된 오류로 보여서 아예 내가 만든 Custom Dataset 안의 label을 Torch.LongTensor로 감싸서 만들어주니 잘 작동하였다.

결론: Custom Dataset 생성 시 Target(label)은 Torch.LongTensor 로 만들자.

0개의 댓글