본문 바로가기

카테고리 없음

RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling `cublasSgemm()` 오류 해결 방법

※ 이 글은 필자가 개인적으로 공부하면서 정리한 글이기 때문에, 잘못된 정보가 포함되어 있을 수 있습니다. ※

 

  최근에 PyTorch를 이용하여 특정한 모델을 학습한 뒤에 모델의 성능을 테스트하는 과정에서 오류가 발생했다. 슬프게도 학습할 때는 분명히 오류가 없었는데, 테스트 시기에 다음과 같은 오류가 출력되었다.

 

RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling `cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)`

 

  전체 오류 메시지가 출력된 형태는 아래 그림과 같은데, 아래 그림에서는 데이터를 모델에 넣은 결과 f(x)에 대해서 f(x).detach().cpu()를 실행하는 과정에서 오류가 발생한 것이라고 한다. 사실 이 오류가 발생하면, 오류 메시지가 적혀 있는 코드가 직접적인 원인이 아닐 가능성이 높다. 그래서 오류의 원인을 파악하기 위해서 많은 시간을 써야 할 수도 있다. 해당 오류가 발생하는 가장 큰 원인 중 하나는 모델 내에 존재하는 F.linear() 모듈의 차원이 올바르지 못하기 때문이다. 실제로 아래 오류 메시지를 사례를 보면, 직접적인 오류 메시지는 아니지만 해당 사항을 어느 정도 유추할 수 있다.

 

 

  아무튼 이처럼 PyTorch에서는 가끔 오류 메시지가 명시적이지 못하다. 필자는 이 오류를 처음 만났을 때, 다소 생소하여 구글링을 했더니 다음과 같은 자료를 찾을 수 있었다.

 

▶ 관련 PyTorch 포럼(forum) 링크https://discuss.pytorch.org/t/runtimeerror-cuda-error-cublas-status-invalid-value-when-calling-cublassgemm-handle-opa-opb-m-n-k-alpha-a-lda-b-ldb-beta-c-ldc/124544/5

 

RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling `cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, l

Thank for your help.

discuss.pytorch.org

 

  정리하자면, 다음과 같은 내용들을 우선적으로 확인해 보자.

 

  1. nn.Linear 모듈의 차원이 정확히 맞는지 확인할 필요가 있다. 이는 CNN에서 고질적으로 발생하는 문제다.

  2. 배치 사이즈(batch size)를 줄여본다.

  3. 데이터 로더 및 입력 전처리(input transformation) 부분이 정상적인지 확인한다.

 

  필자의 경우에는 학습할 때는 작은 배치 사이즈(batch size)를 사용했다가 테스트할 때는 큰 배치 사이즈를 사용했었다. 그래서 결과적으로 테스트 시기에 ① 작은 배치 사이즈를 설정했고, ② 데이터 로더 부분에서 잘못된 데이터 세트를 불러오고 있길래 해당 오류를 수정했고, ③ transform_test에서 입력 이미지의 크기가 올바르지 않게 설정되어 있길래 이를 수정했다. 결과적으로 코드가 정상 실행되었다. 아무튼 문제를 해결하기는 했는데, 시간이 없어서 자세한 분석을 더 하지는 못 했다.