簡體   English   中英

RuntimeError:CUDA 錯誤:觸發設備端斷言 - 第二次調用 model 時

[英]RuntimeError: CUDA error: device-side assert triggered - When calling a model for the second time

使用 PyTorch model 時出現以下錯誤:

/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)
   2197         # remove once script supports set_grad_enabled
   2198         _no_grad_embedding_renorm_(weight, input, max_norm, norm_type)
-> 2199     return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
   2200 
   2201 

RuntimeError: CUDA error: device-side assert triggered

該錯誤似乎僅在我第二次調用 model 我的代碼時發生:

epochs =  500
losses = []
model.to(device)

for e in range(epochs):
  running_loss = 0
  current_batch = 1

  for x1, x2, y in data_loader:    
    print("x1 to device")
    x3 = x1.to(device)
    print("--- Computing embedding1 ---")
    embedding1 = model(x3, pooling_method=pooling_method)
    print(embedding1.size())

    print("x2 to device")
    x4 = x2.to(device)
    print("--- Computing embedding2 ---")
    embedding2 = model(x4, pooling_method=pooling_method)
    print(embedding2.size())

output:

x1 to device
--- Computing embedding1 ---
torch.Size([64, 768])
x2 to device
--- Computing embedding2 ---
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-29-6b36cff704b2> in <module>
     21     x4 = x2.to(device)
     22     print("--- Computing embedding2 ---")
---> 23     embedding2 = model(x4, pooling_method=pooling_method)
     24     print(embedding2.size())
     25 

8 frames
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)
   2197         # remove once script supports set_grad_enabled
   2198         _no_grad_embedding_renorm_(weight, input, max_norm, norm_type)
-> 2199     return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
   2200 
   2201 

RuntimeError: CUDA error: device-side assert triggered

輸入具有相同的形狀,因此問題不在於形狀。 該錯誤似乎發生在 model 計算 output 時,但只是第二次。

該設備是:

device(type='cuda', index=0)

如有必要,model 為:

class BERT(nn.Module):
    """
    Torch model based on CamemBERT, in order to make sentence embeddings
    """
    def __init__(self, tokenizer, model_name=model_name, output_size=100):
        super().__init__()

        self.bert = CamembertModel.from_pretrained(model_name)
        self.bert.resize_token_embeddings(len(tokenizer))

        
    def forward(self, x, pooling_method='cls'):
        hidden_states = self.bert(x).last_hidden_state
        embedding = pooling(hidden_states, pooling_method=pooling_method)

        return embedding

有誰知道如何解決這個問題?

以下兩個原因導致發生 CUDA 錯誤:

  1. 標簽/類的數量與 output 單元的數量之間的不一致:在您的情況下,可能是嵌入大小的輸入/輸出。
  2. 損失 function 的輸入可能不正確:不確定您使用的是什么損失,或者您是否甚至更改了 BERT 中的默認值。

在此處查看解決方案-> https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM