web-dev-qa-db-ja.com

CUDNNエラー:cudnn_status_bad_param.can誰かが私がこのエラーを受けている理由を説明し、どうすればいいの?

Pytorch.butを使用して文字LSTMを実装しようとしています。

for Epoch in tqdm(range(epochs)):
  for i in range(len(seq)//batch_size):
   sidx = i*batch_size
   eidx = sidx + batch_size
   x = seq[sidx:eidx]
   x = torch.tensor(x).cuda()
   input_seq =torch.nn.utils.rnn.pack_padded_sequence(x,seq_lengths,batch_first = True)
   y = out_seq[sidx:eidx]
   output = model(input_seq)
   loss = criterion(output,y)
   loss.backward()
   optimizer.step()
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    487             result = self._slow_forward(*input, **kwargs)
    488         else:
--> 489             result = self.forward(*input, **kwargs)
    490         for hook in self._forward_hooks.values():
    491             hook_result = hook(self, input, result)   
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/rnn.py in forward(self, input, hx)
    180         else:
    181             result = _impl(input, batch_sizes, hx, self._flat_weights, self.bias,
--> 182                            self.num_layers, self.dropout, self.training, self.bidirectional)
    183         output = result[0]
    184         hidden = result[1:] if self.mode == 'LSTM' else result[1]

 RuntimeError: cuDNN error: CUDNN_STATUS_BAD_PARAM
 _
4
Sarthak Mittal

CPUに切り替えると、同じエラーが発生しましたが、エラーのはるかに良い説明が得られます。私の場合において、問題は私がネットワークに与えていた入力の種類にありました。モデルはlongを必要としている間、floatを推測していました。次の変更を加え、コードが機能しました。基本的にCPUに切り替えると、より良いエラーの説明があります。

input_seq = input_seq.float().cuda()
 _
1
Prateek Rawat

私は同じエラーに遭遇します。 これが解決策です

入力の種類をfloat64からfloat32に変更する必要があります。これは次のように入力する必要があります。

input_seq = input_seq.float()
0
BruceLi