如何解决AttributeError: 模块“cupy”没有属性“scatter_add”
当尝试运行一个模型进行 spacy NER 训练时
spacy.require_gpu()
我收到此错误:
AttributeError Traceback (most recent call last)
<ipython-input-6-a86608cac558> in <module>
3 }
4 start_time = time.time()
----> 5 train_model(data)
<ipython-input-2-10f04ac303a6> in train_model(train_data)
82 other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
83 with nlp.disable_pipes(*other_pipes):
---> 84 optimizer = nlp.begin_training()
85 for itn in range(1):
86 print("Starting iteration " + str(itn))
c:\users\aventus\envs\py38\lib\site-packages\spacy\language.py in begin_training(self,get_gold_tuples,sgd,component_cfg,**cfg)
623 kwargs = component_cfg.get(name,{})
624 kwargs.update(cfg)
--> 625 proc.begin_training(
626 get_gold_tuples,627 pipeline=self.pipeline,nn_parser.pyx in spacy.Syntax.nn_parser.Parser.begin_training()
_parser_model.pyx in spacy.Syntax._parser_model.ParserModel.begin_training()
c:\users\aventus\envs\py38\lib\site-packages\thinc\check.py in checked_function(wrapped,instance,args,kwargs)
154 raise ExpectedTypeError(check,["Callable"])
155 check(arg_id,fix_args,kwargs)
--> 156 return wrapped(*args,**kwargs)
157
158 def arg_check_adder(func):
c:\users\aventus\envs\py38\lib\site-packages\thinc\neural\_classes\model.py in begin_training(self,train_X,train_y,**trainer_cfg)
120 def begin_training(self,train_y=None,**trainer_cfg):
121 for hook in self.on_data_hooks:
--> 122 hook(self,train_y)
123 return self.Trainer(self,**trainer_cfg)
124
c:\users\aventus\envs\py38\lib\site-packages\spacy\_ml.py in <lambda>(model,X,y)
149
150 @describe.on_data(
--> 151 _set_dimensions_if_needed,lambda model,y: model.init_weights(model)
152 )
153 @describe.attributes(
c:\users\aventus\envs\py38\lib\site-packages\spacy\_ml.py in init_weights(model)
268 t_i = 0
269 for t_i in range(t_max):
--> 270 acts1 = predict(ids,tokvecs)
271 var = model.ops.xp.var(acts1)
272 mean = model.ops.xp.mean(acts1)
c:\users\aventus\envs\py38\lib\site-packages\spacy\_ml.py in predict(ids,tokvecs)
254 (hiddens.shape[0] * model.nF,model.nO * model.nP)
255 )
--> 256 model.ops.scatter_add(vectors,ids.flatten(),hiddens)
257 vectors = vectors.reshape((vectors.shape[0],model.nO,model.nP))
258 vectors += model.b
ops.pyx in thinc.neural.ops.CupyOps.scatter_add()
c:\users\aventus\envs\py38\lib\site-packages\cupy\__init__.py in __getattr__(name)
873 value = _deprecated_attrs.get(name)
874 if value is None:
--> 875 raise AttributeError(
876 f"module 'cupy' has no attribute {name!r}")
877 attr,eq_attr = value
AttributeError: module 'cupy' has no attribute 'scatter_add'
用于训练模型的数据是spacy NER的注释。
运行 spacy.require_gpu() 时得到这个:
Python 3.8.3 (tags/v3.8.3:6f8c832,May 13 2020,22:37:02) [MSC v.1924 64 bit (AMD64)] on win32
Type "help","copyright","credits" or "license" for more information.
>>>import spacy
>>>spacy.require_gpu()
True
- 操作系统 - Windows 10
- Python 3.8
- spacy 2.2.4
- 杯子 9.0.0
- Nvidia 驱动程序版本:466.11
- CUDA 版本:11.1
- NVIDIA GeForce GTX 1660Ti
如何摆脱这个错误?任何帮助将不胜感激。
解决方法
有几个选项可以避免这个错误:
- 将cupy 降级为
cupy<8.0.0
(pip install "cupy-cuda110<8.0.0"
) - 将 spacy 升级到 v2.3.5+
根据评论,我不知道您是如何从 pip install -U spacy
获得 spacy v2.2.4 的,但是如果您特别不需要该版本,则升级到没有此错误的版本是最简单的解决方案且更新版本与cupy v8兼容。
如果您确实需要 spacy v2.2.4(需要 thinc==7.4.0
)和更新版本的cupy,您可以将此补丁应用到thinc v7.4.0 并从源代码安装:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。