google-app-engine - GAE/standard/second/Python 上的 Spacy 超出了最大实例的内存

标签 google-app-engine spacy google-app-engine-python

我已经使用 GAE 一段时间了,没有任何问题。唯一的变化是我添加了 Spacy 以及我训练的模型。

当我使用 dev_appserver 在本地运行时,应用程序消耗了大约 153 MB。部署后,我收到内存超出错误。即使是 F4_1G例如,我超出了内存:

Exceeded hard memory limit of 1228 MB with 1280 MB after servicing 0 requests total. Consider setting a larger instance class in app.yaml.

如果我导入 Spacy 并且不加载我的模型(实例有大约 200MB),部署工作正常,所以 Spacy 本身不是问题,但是当我用 spacy.load() 加载我的模型时然后内存超过限制。请注意,这发生在我什至使用我的 Spacy 模型之前,因此仅加载模型就会导致问题。

我的 Spacy 模型是一个标记器和解析器,占用 27 MB 的磁盘空间。我不明白为什么 App Engine 上的内存要求比我的 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)

关于google-app-engine - GAE/standard/second/Python 上的 Spacy 超出了最大实例的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55228492/

相关文章:

nlp - 在 spaCy 中, 'en' 和 'en_core_web' 模型是否不同?

nlp - SpaCy OSError : Can't find model 'en'

google-app-engine - IAP 签名 header 和 AppEngine 标准 Python 3.7 运行时

google-app-engine - 后端 "Process moved to a different machine"并因错误 500 而失败

python - 如何混合使用 Appengine 的 OpenID 和 facebook OAuth 在 AppEngine 上进行身份验证?

java - Jackson 和 GSON 无法与 Google App Engine 一起使用

python - NLP - Python 中的信息提取 (spaCy)

python - 应用程序引擎 NeedIndexError : no matching index found

python - Google App Engine - 将 key 存储到ndb KeyProperty中

python - GAE Python 微服务不工作