GAE/STANDARD/Second/Python上的空间超过最大实例的内存 [英] Spacy on GAE/standard/second/Python exceeds memory of largest instance
本文介绍了GAE/STANDARD/Second/Python上的空间超过最大实例的内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经使用GAE一段时间了,没有任何问题。最近唯一的变化是,我增加了Spacy和我训练的一个模型。
当我在本地使用dev_appserver运行时,该应用程序大约消耗153MB。部署后,我收到内存超出的错误。即使使用F4_1G
实例,我也会超出内存:
在总共处理0个请求后,已超过1228 MB的硬盘内存限制,其中1280 MB。考虑在app.yaml中设置更大的实例类。
如果我导入Spacy而不加载我的模型(实例大约有200MB),那么部署就能正常工作,所以Spacy本身不是问题,但是当我用spacy.load()
加载我的模型时,内存就会超过限制。请注意,这甚至在我使用Spacy模型之前就发生了,所以只加载模型就会导致问题。
我的Spacy模型是一个标记器和解析器,占用了27MB的磁盘空间。我不明白为什么应用程序引擎上的内存需求会比我的Mac上的内存需求大得多。
看起来其他人已经能够run Spacy on app engine。你知道我可能做错了什么吗?
推荐答案
我找到了解决方案。我将模型加载到模块级别变量中,以便在导入模块时加载模型。
当您部署第二代GAE应用程序时,会部署一堆工作线程(在我的例子中是8个)。我不了解工作线程的详细信息,但我怀疑有几个工作线程导入了模块,并且所有工作线程都影响了内存使用量。
我更改了代码,以便模型在第一次使用时加载,而不是在模块导入时加载。进行此更改后,内存使用量为428MB。
以下是不应执行的操作示例:
import spacy
nlp = spacy.load('my_model')
def process_text(text):
return nlp(text)
改为:
import spacy
nlp = None
def process_text(text):
global nlp
if nlp is None:
nlp = spacy.load('my_model')
return nlp(text)
这篇关于GAE/STANDARD/Second/Python上的空间超过最大实例的内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文