错误: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
如何修复:
- 删除此文件中的
cpu()
(https://github.com/allenai/allennlp-models/blob/master/allennlp_models/structured_prediction/models/srl_bert.py#L200)
7条答案
按热度按时间ukxgm1gy1#
是的,这看起来像个bug(尽管我不确定
spacy.require_gpu()
在代码片段中做了什么)。你愿意提交一个PR来修复它吗?bjg7j2ky2#
我认为明确指定GPU ID也能解决这个问题:
spacy.util.use_gpu(id)
。2g32fytz3#
我认为明确指定GPU ID也能解决这个问题:
spacy.util.use_gpu(id)
。是的,对我来说它可以工作。这可能意味着
spacy.require_gpu()
可能有一些副作用,而allennlp无法处理(?)thtygnil4#
哦,哇,
spacy.require_gpu()
正在改变torch.ones()
的行为吗?这对我来说是唯一有意义的错误原因。这看起来真的很糟糕和危险,因为它影响到了非spacy代码。或者也许这是torch
支持的本地功能,我们没有意识到。无论如何,
viterbi_decode
中的那行代码不应该只是调用torch.ones()
,而应该更智能地确保在正确的设备上创建Tensor。这才是真正的问题所在。#4429 用相同的代码提出了一个不同的问题;@zhuango,如果你打算修复#4429,你能同时修复设备分配问题吗?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正常工作。6ojccjat6#
啊,很有趣。感谢你调查这个问题!
0lvr5msh7#
大家好,我遇到了与allennlp v2.1.0和spaCy v3.0.5相同的错误。有计划解决这个问题吗?对我来说,切换到CPU不是选项,而在本地更改代码似乎不利于在其他计算机上的可重复性。您的建议是什么?