Programming Error/PyTorch

[PyTorch Cuda 오류] cuda error: device-side assert triggered

Barca 2021. 6. 6. 19:34

cuda error: device-side assert triggered

 

PyTorch 뿐만 아니라 Tensorflow를 사용하다보면 위와 같은 에러를 자주 마주했을거라 생각합니다.

 

위 오류는 GPU를 사용하다보면 나올 수 있는 가장 추상적인(원인이 매우 많음) 에러입니다.

따라서, 위 에러만 보고서는 어떤 것에 문제가 생기는지 알기가 힘듭니다.

 

이를 해결하기 위해 우선, 해당 .py 파일 또는 Notebook 가장 위에 아래의 코드를 삽입합니다.

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

 

그리고, 코드를 실행하면 조금 더 구체화된 에러 메시지가 나오게 됩니다.

제가 겪었던 경우 중 하나는 아래와 같은 에러입니다.

RuntimeError: cuda runtime error (710) : device-side assert triggered at /pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:115

 

마지막에 보면, ClassNLLCriterion라는 에러인데요. 이를 통해 Loss 계산을 하는 부분에서 에러가 발생했음을 알 수 있었습니다. Segmentation Task를 수행하고 있었는데, 그래서 Loss의 계산으로 들어가는 입력을 살펴보니 Ground Truth가 0~255의 범위로 되어있어서 에러가 나는 경우였습니다. 따라서, 0~1로 정규화해주니 잘 돌아갔습니다.

같은 ClassNLLCriterion 에러라도 0~255의 범위가 아닌 입출력의 차원(Dim) 문제로 인해 발생하는 경우도 있을 수 있습니다.

 

그리고 ClassNLLCriterion 외에도 다양한 device-side assert 에러가 발생한다면, 입출력의 차원을 하나씩 디버깅하면서 살펴보면 해결되는 경우가 많을 것입니다.

 

* Jupyter Notebook이나 VS Code의 Interactive mode로 코드 실행시에, os.environ을 넣고 조금 더 자세한 에러가 나오게 되는데, 이 때 Session을 초기화하지 않고 다시 실행하면 여전히 device-side assert triggered라는 추상적인 에러가 나오는 현상이 있습니다. 따라서 코드 수정했을 때, Session을 초기화하고 실행하시길 바랍니다.

 

 

오류 관련해서 궁금하신점이 있다면 언제든 댓글주세요