このエラーが発生しました
RuntimeError: Expected object of type torch.LongTensor but found type torch.cuda.LongTensor for argument #3 'index'
しかし、それはargument #3 "index"
とはどういう意味ですか? torch.embedding
に "index
"引数が見つかりません(ここでソース: https://pytorch.org/docs/stable/_modules/torch/nn/modules/sparse。 html#Embedding )埋め込みに間違ったパラメーターを渡しているようです。
以下のように入力のデータ型を変更しましたが、エラーが解決しません。
batch['doc_tok'] = batch['doc_tok'].long()
batch['query_tok'] = batch['query_tok'].long()
コメント(短いですが!)または見たいキーワードをリストするだけで大歓迎です!
これが完全なトレースバックです。
Traceback (most recent call last):
File "train_v2.py", line 110, in <module>
main()
File "train_v2.py", line 81, in main
model.update(batch)
File "/home/aerin/Desktop/squad_vteam/src/model.py", line 129, in update
loss_adv = self.adversarial_loss(batch, loss, self.network.Lexicon_encoder.embedding.weight, y)
File "/home/aerin/Desktop/squad_vteam/src/model.py", line 104, in adversarial_loss
start, end, _ = self.network(batch)
File "/home/aerin/anaconda3/envs/san/lib/python3.6/site-packages/torch/nn/modules/module.py", line 491, in __call__
result = self.forward(*input, **kwargs)
File "/home/aerin/Desktop/squad_vteam/src/dreader.py", line 78, in forward
doc_mask, query_mask = self.Lexicon_encoder(batch)
File "/home/aerin/anaconda3/envs/san/lib/python3.6/site-packages/torch/nn/modules/module.py", line 491, in __call__
result = self.forward(*input, **kwargs)
File "/home/aerin/Desktop/squad_vteam/src/encoder.py", line 116, in forward
doc_emb, query_emb = emb(doc_tok), emb(query_tok)
File "/home/aerin/anaconda3/envs/san/lib/python3.6/site-packages/torch/nn/modules/module.py", line 491, in __call__
result = self.forward(*input, **kwargs)
File "/home/aerin/anaconda3/envs/san/lib/python3.6/site-packages/torch/nn/modules/sparse.py", line 108, in forward
self.norm_type, self.scale_grad_by_freq, self.sparse)
File "/home/aerin/anaconda3/envs/san/lib/python3.6/site-packages/torch/nn/functional.py", line 1076, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: Expected object of type torch.LongTensor but found type torch.cuda.LongTensor for argument #3 'index'
更新:model.network全体をCPUに送信しましたが、それでも同じエラーが発生します。
batch['doc_tok']=batch['doc_tok'].long().cpu()
batch['query_tok']=batch['query_tok'].long().cpu()
self.network.cpu()
print(batch['doc_tok'].dtype, batch['query_tok'].dtype) # They are both torch.int64 torch.int64
start, end, _ = self.network(batch)
この時点で、これはバグの可能性があると思われます...
model.pyコード: https://github.com/byorxyz/san_mrc/blob/master/src/model.py
定義されたネットワーク: https://github.com/byorxyz/san_mrc/blob/master/src/dreader.py
入力/ターゲットテンソル(_batch['doc_tok']
_など)とネットワークとその変数(index
はEmbedding
レイヤーの内部テンソルだと思います)がオンになっているように見えますさまざまなデバイス(データ用のCPU、モデル用のGPU?)。
すべてをGPUで実行する場合は、次の両方が必要です。
batch['doc_tok'].cuda()
model.network.cuda()
CPUで実行する場合も同様で、.cpu()
に置き換えます。
これを試して:
batch['doc_tok']=batch['doc_tok'].long().cpu()
batch['query_tok']=batch['query_tok'].long().cpu()