딥러닝

[PyTorch] RuntimeError: CUDA error: device-side assert triggered 오류 해결

chanmuzi 2023. 6. 26. 20:52
⚠️ 클래스의 개수와 관련된 코드에서 주로 발생하는 오류! ⚠️
RuntimeError: CUDA error: device-side assert triggered

누가 봐도 GPU 관련 에러처럼 보이는 위 에러는 사실 차원(dimension) 에러입니다.

텐서의 shape(size)이 맞지 않는다는 뜻이지요.

 

다른 분들이 남긴 trouble shooting 기록을 보면 모델의 입출력 사이즈를 맞춰주지 못해서 발생한 에러였다,

class index를 잘못 설정해줬다, 등등 차원과 관련된 문제임을 알 수 있습니다.

 

상황이 다 다를 수 있기 때문에 확언할 수는 없지만, 종합적으로 내용을 합쳐보면 '클래스의 개수'에 따라 문제가 발생하는 경우가 많았습니다.

multi-class classification, 혹은 그와 유사한 상황에서 주로 발생하는 오류라는 것이죠.

 

 

저의 경우에는 cross entropy loss 함수에서 오류가 발생했습니다.

cross entropy loss는 (predictoin, target)을 입력으로 받는데, 모델이 기대하는 것과 다른 차원의 텐서가 입력으로 주어지면서 에러가 발생한 것이죠.

좀 더 자세히 설명하면 제가 정의한 모델의 forward 함수에 의해 반환되는 output의 차원이, target의 class 개수와 일치하지 않았던 것입니다.

예를 들어 10개의 클래스로 구분하는 태스크였다고 한다면, output도 이것과 동일한 10차원 텐서를 반환하여 CELoss를 계산해야 하는데, 제가 잘못 판단한 바람에 12차원 텐서가 반환되고 있었던 것이죠.

 

 

따라서 위 에러를 만나게 되시는 경우, 클래스의 개수와 관련해서 문제가 발생할 수 있는 코드상 위치가 어디인지 파악해보는 것을 권장드립니다.

일반적으로 발생하지 않는 오류이기 때문에, 임의로 차원이나 값을 조작한 부분에서 발생한 오류일 가능성이 굉장히 높고, 그중에서도 모델의 출력이나 loss function에 주어지는 입력 등을 중심적으로 살펴보면 도움이 될 것 같습니다.

 

 

 

 

참고 사이트 : https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html

 

CrossEntropyLoss — PyTorch 2.0 documentation

Shortcuts

pytorch.org

참고 블로그 1 : https://brstar96.github.io/devlog/shoveling/2020-01-03-device_error_summary/

 

이유를 알 수 없는 GPU 에러 정리(device-side assert, CUDA error, CUDNN_STATUS_NOT_INITIALIZED 등등…)

딥러닝 모델 학습에 있어서 빠지면 서러운 GPU는 간혹 알 수 없는 오류를 뿜으며 뻗을 때가 있죠. 이 포스팅에서는 깃허브 이슈 페이지와 스택 오버플로우에서 자주 만날 수 있는 GPU-side 에러들에

brstar96.github.io

참고 블로그 2 : https://mopipe.tistory.com/180

 

[pytorch] device-side assert triggered error 해결방법

1. 에러 발생 상황 torchvision.model 에서 resnet 50을 불러와서 fully connected 부분을 변경시킨 모델을 응용하여 새로운 모델을 작성중에 에러가 발생되었습니다. 에러 내용은 다음과 같습니다. RuntimeError

mopipe.tistory.com

참고 블로그 3 : https://ndb796.tistory.com/509

 

[PyTorch 오류 해결] RuntimeError: CUDA error: device-side assert triggered

오류 메시지는 다음과 같다. 이 오류는 복잡한 GPU 디바이스 환경 설정 관련 오류인 것처럼 보이지만, 실제로는 입출력 차원(dimension)을 제대로 맞추지 않아서 발생하는 경우가 많다. 필자의 경우

ndb796.tistory.com