RuntimeError: CUDA error: device-side assert triggered

Traceback (most recent call last):
  File "main.py", line 70, in <module>
    trainer.train()
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\transformers\trainer.py", line 463, in train
    tr_loss += self._training_step(model, inputs, optimizer)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\transformers\trainer.py", line 580, in _training_step
    outputs = model(**inputs)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\torch\nn\modules\module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\transformers\modeling_bert.py", line 1284, in forward
    loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1))
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\torch\nn\modules\module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\torch\nn\modules\loss.py", line 1121, in forward
    ignore_index=self.ignore_index, reduction=self.reduction)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\torch\nn\functional.py", line 2824, in cross_entropy
    return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
RuntimeError: CUDA error: device-side assert triggered

 

에러를 해결하는 과정에서 pytorch 버전 변경, cuda 버전 변경, 환경변수 설정 등을 잘해주라는 답변으로 인해 시간을 다소 낭비했다. 나의 경우는 pre-trained 모델 로딩할 때 매개변수로 num_labels를 입력해주어야 한다는 것을 알지 못해 발생한 문제였다. 아래와 같이 데이터셋의 라벨 개수와 맞도록 입력해주면 된다.

 

model = BertForSequenceClassification.from_pretrained(MODEL_NAME, num_labels=4).to(device)

(만약 위와 같이 num_labels를 설정해주어도 에러가 발생한다면 라벨의 인덱스를 확인해 0부터 시작하는지 확인해야 한다. 1부터 시작하도록 설정했더니 위와 같은 에러가 또 발생했었음)

 

다음은 위 에러를 조우하기 전 발생했던 에러다. 

RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`

 

Traceback (most recent call last):
  File "main.py", line 65, in <module>
    trainer.train()
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\transformers\trainer.py", line 463, in train
    tr_loss += self._training_step(model, inputs, optimizer)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\transformers\trainer.py", line 592, in _training_step
    loss.backward()
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\torch\_tensor.py", line 255, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
  File "C:\Users\roytravel\anaconda3\envs\kochat\lib\site-packages\torch\autograd\__init__.py", line 149, in backward
    allow_unreachable=True, accumulate_grad=True)  # allow_unreachable flag
RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`

 

이는 아래 환경변수 설정으로 해결하였다.

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

+ Recent posts