spacy 2.0.12 / thinc 6.10.3 在 heroku 上崩溃 django
spacy 2.0.12 / thinc 6.10.3 crashing django on heroku
我遇到了 v2.0.12
的问题,我已追踪到 thinc
。 pip list
告诉我:
msgpack (0.5.6)
msgpack-numpy (0.4.3.1)
murmurhash (0.28.0)
regex (2017.4.5)
scikit-learn (0.19.2)
scipy (1.1.0)
spacy (2.0.12)
thinc (6.10.3)
我的代码在 Mac 上运行良好,但在生产中失败。堆栈跟踪进入 spacy
,然后进入 thinc
——然后 django 真的崩溃了。当我使用早期版本的 spacy 时,这一切都有效——这只是在我尝试升级到 v2.0.12
.
之后才出现的
我的 requirements.txt 文件有这些行:
regex==2017.4.5
spacy==2.0.12
scikit-learn==0.19.2
scipy==1.1.0
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz
最后一行在部署期间拉下 en_core_web_sm
。我这样做是为了在部署期间将这些模型加载到 Heroku 上。
然后我像这样加载解析器:
import en_core_web_sm
en_core_web_sm.load()
然后堆栈跟踪在 thinc:
中显示了这里的问题
File "spacy/language.py", line 352, in __call__
doc = proc(doc)
File "pipeline.pyx", line 426, in spacy.pipeline.Tagger.__call__
File "pipeline.pyx", line 438, in spacy.pipeline.Tagger.predict
File "thinc/neural/_classes/model.py", line 161, in __call__
return self.predict(x)
File "thinc/api.py", line 55, in predict
X = layer(X)
File "thinc/neural/_classes/model.py", line 161, in __call__
return self.predict(x)
File "thinc/api.py", line 293, in predict
X = layer(layer.ops.flatten(seqs_in, pad=pad))
File "thinc/neural/_classes/model.py", line 161, in __call__
eturn self.predict(x)
File "thinc/api.py", line 55, in predict
X = layer(X)
File "thinc/neural/_classes/model.py", line 161, in __call__
return self.predict(x)
File "thinc/neural/_classes/model.py", line 125, in predict
y, _ = self.begin_update(X)
File "thinc/api.py", line 374, in uniqued_fwd
Y_uniq, bp_Y_uniq = layer.begin_update(X_uniq, drop=drop)
File "thinc/api.py", line 61, in begin_update
X, inc_layer_grad = layer.begin_update(X, drop=drop)
File "thinc/neural/_classes/layernorm.py", line 51, in begin_update
X, backprop_child = self.child.begin_update(X, drop=0.)
File "thinc/neural/_classes/maxout.py", line 69, in begin_update
output__boc = self.ops.batch_dot(X__bi, W)
File "gunicorn/workers/base.py", line 192, in handle_abort
sys.exit(1)
同样 -- 这一切都适用于我的笔记本电脑。
我的加载方式有问题吗?还是我的 thinc
版本过时了?如果是这样,我的 requirements.txt
文件应该是什么样的?
我解决了这个问题,但我留下答案以防其他人需要它。
问题是由于我构建和训练 sklearn
模型的方式和时间,我的线程响应时间太长。结果,Heroku 中止了该线程——这就是堆栈跟踪显示 abort
.
的原因
解决方法是更改我加载 ML 模型的方式和时间,以便此特定操作不会超时。
我遇到了 v2.0.12
的问题,我已追踪到 thinc
。 pip list
告诉我:
msgpack (0.5.6)
msgpack-numpy (0.4.3.1)
murmurhash (0.28.0)
regex (2017.4.5)
scikit-learn (0.19.2)
scipy (1.1.0)
spacy (2.0.12)
thinc (6.10.3)
我的代码在 Mac 上运行良好,但在生产中失败。堆栈跟踪进入 spacy
,然后进入 thinc
——然后 django 真的崩溃了。当我使用早期版本的 spacy 时,这一切都有效——这只是在我尝试升级到 v2.0.12
.
我的 requirements.txt 文件有这些行:
regex==2017.4.5
spacy==2.0.12
scikit-learn==0.19.2
scipy==1.1.0
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz
最后一行在部署期间拉下 en_core_web_sm
。我这样做是为了在部署期间将这些模型加载到 Heroku 上。
然后我像这样加载解析器:
import en_core_web_sm
en_core_web_sm.load()
然后堆栈跟踪在 thinc:
File "spacy/language.py", line 352, in __call__
doc = proc(doc)
File "pipeline.pyx", line 426, in spacy.pipeline.Tagger.__call__
File "pipeline.pyx", line 438, in spacy.pipeline.Tagger.predict
File "thinc/neural/_classes/model.py", line 161, in __call__
return self.predict(x)
File "thinc/api.py", line 55, in predict
X = layer(X)
File "thinc/neural/_classes/model.py", line 161, in __call__
return self.predict(x)
File "thinc/api.py", line 293, in predict
X = layer(layer.ops.flatten(seqs_in, pad=pad))
File "thinc/neural/_classes/model.py", line 161, in __call__
eturn self.predict(x)
File "thinc/api.py", line 55, in predict
X = layer(X)
File "thinc/neural/_classes/model.py", line 161, in __call__
return self.predict(x)
File "thinc/neural/_classes/model.py", line 125, in predict
y, _ = self.begin_update(X)
File "thinc/api.py", line 374, in uniqued_fwd
Y_uniq, bp_Y_uniq = layer.begin_update(X_uniq, drop=drop)
File "thinc/api.py", line 61, in begin_update
X, inc_layer_grad = layer.begin_update(X, drop=drop)
File "thinc/neural/_classes/layernorm.py", line 51, in begin_update
X, backprop_child = self.child.begin_update(X, drop=0.)
File "thinc/neural/_classes/maxout.py", line 69, in begin_update
output__boc = self.ops.batch_dot(X__bi, W)
File "gunicorn/workers/base.py", line 192, in handle_abort
sys.exit(1)
同样 -- 这一切都适用于我的笔记本电脑。
我的加载方式有问题吗?还是我的 thinc
版本过时了?如果是这样,我的 requirements.txt
文件应该是什么样的?
我解决了这个问题,但我留下答案以防其他人需要它。
问题是由于我构建和训练 sklearn
模型的方式和时间,我的线程响应时间太长。结果,Heroku 中止了该线程——这就是堆栈跟踪显示 abort
.
解决方法是更改我加载 ML 模型的方式和时间,以便此特定操作不会超时。