allennlp BERT SRL模型:运行时错误:期望的对象是CPU后端,但在位置#1的'tensors'序列参数中得到的是CUDA后端,

r6hnlfcb  于 4个月前  发布在  其他
关注(0)|答案(7)|浏览(75)

错误:RuntimeError: Expected object of backend CPU but got backend CUDA for sequence element 1 in sequence argument at position #1 'tensors'
如何重现:请按照AllenNLP演示用法(https://demo.allennlp.org/semantic-role-labeling)进行操作。
Spacy版本:2.2.4
如何修复:

  1. 删除此文件中的cpu()(https://github.com/allenai/allennlp-models/blob/master/allennlp_models/structured_prediction/models/srl_bert.py#L200)
ukxgm1gy

ukxgm1gy1#

是的,这看起来像个bug(尽管我不确定spacy.require_gpu()在代码片段中做了什么)。你愿意提交一个PR来修复它吗?

bjg7j2ky

bjg7j2ky2#

我认为明确指定GPU ID也能解决这个问题:spacy.util.use_gpu(id)

2g32fytz

2g32fytz3#

我认为明确指定GPU ID也能解决这个问题:spacy.util.use_gpu(id)
是的,对我来说它可以工作。这可能意味着spacy.require_gpu()可能有一些副作用,而allennlp无法处理(?)

thtygnil

thtygnil4#

哦,哇,spacy.require_gpu() 正在改变 torch.ones() 的行为吗?这对我来说是唯一有意义的错误原因。这看起来真的很糟糕和危险,因为它影响到了非spacy代码。或者也许这是torch 支持的本地功能,我们没有意识到。
无论如何,viterbi_decode 中的那行代码不应该只是调用torch.ones(),而应该更智能地确保在正确的设备上创建Tensor。这才是真正的问题所在。#4429 用相同的代码提出了一个不同的问题;@zhuango,如果你打算修复#4429,你能同时修复设备分配问题吗?

wmomyfyw

wmomyfyw5#

我认为明确指定GPU ID也能解决这个问题:spacy.util.use_gpu(id)
是的,对我来说可以。这可能意味着spacy.require_gpu()可能有一些副作用,而allennlp无法处理(?)
抱歉,事实证明,在spacy.util.use_gpu(id)之后,spacy在CPU上而不是GPU上处理句子。因此,我现在使用spacy.require_gpu()使spacy运行在GPU上,并修改了srl_bert.py以使AllenNlp正常工作。

6ojccjat

6ojccjat6#

啊,很有趣。感谢你调查这个问题!

0lvr5msh

0lvr5msh7#

大家好,我遇到了与allennlp v2.1.0和spaCy v3.0.5相同的错误。有计划解决这个问题吗?对我来说,切换到CPU不是选项,而在本地更改代码似乎不利于在其他计算机上的可重复性。您的建议是什么?

相关问题