티스토리 뷰

728x90

Error명:

Runtimeerror: cuda error: device-side assert triggered

cuda kernel errors might be asynchronously reported at some other api call,so the stacktrace below might be incorrect. for debugging consider passing cuda_launch_blocking=1.

 

이런 에러가 발생했습니다.

 

GPU 메모리가 부족한 것인가? 다시 런타임을 종료하고 시작해보면 다시 model이 device에 올라가긴 했는데, 결국 같은 오류가 반복적으로 발생합니다.

 

해당 오류명으로 구글에 검색해보면 핵심은 내 코드에 무슨 문제가 있는지 디버깅을 해야하는데, 이 오류가 떴을 때 어떻게 해결하냐? 에는 역시 다양한 접근법이 존재했습니다.

 

1. Add the following to lines at the top of the notebook

import os
os.environ['CUDA_LAUNCH_BLOCKING'] = "1"

 

 

하지만 전 이 방법으로 해결되지 않았습니다. 

 

2. Turn colab to CPU and Recreate the error

device = torch.device('cpu')

CUDA에서 발생하는 RuntimeError는 대부분 인덱스 불일치에 원인이 많다고 합니다. 실제로 입출력 차원에 오류가 있을 수 있단 겁니다. 저도 output dimension에서 오류가 발생했습니다.

따라서 제시한 해결 방법이 CPU로 전환해서 상세한 Error를 확인하는 것입니다. 

 

그랬더니 다시 전 해당 에러를 출력했습니다.

 

Runtimeerror: all elements of input should be between 0 and 1

 

해당 에러의 발생 원인은 loss function으로 BCEloss를 사용하는데, 0과 1 사이의 출력값이 아니라는 것입니다. 전 lstm 모델을 짰기 때문에, 마지막 fc layer의 output을 Sigmoid function에 넣어 출력을 [0, 1]로 맞춰줘야 했습니다.

 

아무튼 저는 CPU로 바꾸고 나서 다시 GPU로 안 바꾸고 그대로 학습하는데, 학습이 3분이 지나도 1 epoch도 돌지 않아서 오잉 뭐지 하다가 나중에 깨닫고 다시 device를 바꿔주었답니다. 다시 바꿔주는 것도 잊지마시길! 😥

 

이상입니다. 감사합니다!

728x90
댓글