RuntimeError: cuda runtime error (59) : device-side assert triggered

2494 단어 Pytorch
Environment: Ubuntu,Pytorch1.0.1
프로그램을 실행할 때 이 문제를 발견했습니다
Traceback (most recent call last):   File "train_pytorch1.py", line 217, in     loss = F.cross_entropy(output, target)   File "/usr/local/python3/lib/python3.5/site-packages/torch/nn/functional.py", line 1970, in cross_entropy     return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)   File "/usr/local/python3/lib/python3.5/site-packages/torch/nn/functional.py", line 1790, in nll_loss     ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) RuntimeError: cuda runtime error (59) : device-side assert triggered at/pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:111
이 이상은 아마 계산 손실치와 관련이 있을 것이다
자료를 조회할 때 많은 친구들이 이런 cudaruntime error(59)를 만났는데 대부분이 색인 이상이다
이 게시물의 한 Pytorch Dev에 따르면 cuda의 비동기성 때문에 단언은 단언이 어디서 촉발되는지 가리키는 완전한 정확한 창고 추적을 가리키지 않을 수 있습니다.
프로그램이 모듈을 가져오기 전에 다음 문장을 추가하면 더 많은 세부 사항을 출력할 수 있습니다
import os
os.environ['CUDA_LAUNCH_BLOCKING'] = "1"

예외 출력은 다음과 같습니다.
/pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:105: void cunn_ClassNLLCriterion_updateOutput_kernel(Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [with Dtype = float, Acctype = float]: block: [0,0,0], thread: [6,0,0] Assertion `t >= 0 && t < n_classes` failed. THCudaCheck FAIL file=/pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu line=111 error=59 : device-side assert triggered Traceback (most recent call last):   File "train_pytorch1.py", line 217, in     loss = F.cross_entropy(output, target)   File "/usr/local/python3/lib/python3.5/site-packages/torch/nn/functional.py", line 1970, in cross_entropy     return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)   File "/usr/local/python3/lib/python3.5/site-packages/torch/nn/functional.py", line 1790, in nll_loss     ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) RuntimeError: cuda runtime error (59) : device-side assert triggered at/pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:111
인쇄된 정보에 의하면 label의 인덱스에 문제가 있는 것으로 추정된다.
그래서 데이터를 읽는 label을 출력했는데 과연 문제가 생겼어요.
정확한 인덱스는 0~44이고 프로그램에서 읽는 것은 1~45이다.label을 수정하면 프로그램이 정상적으로 실행됩니다.
CUDA 단언 디버깅에 관해서는 블로그를 추천합니다. 개인적으로 설명이 비교적 명확하다고 생각합니다.Debugging CUDA device-side assert in PyTorch

좋은 웹페이지 즐겨찾기