GAE / standard / second / Python上的空间超出了最大实例的存储空间

时间:2019-03-18 19:09:19

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

我使用GAE已有一段时间了,没有任何问题。只是最近的更改是我添加了Spacy以及我训练的模型。

当我使用dev_appserver在本地运行时,该应用程序消耗约153 MB。部署后,出现内存超出错误。即使使用F4_1G实例,我也超出了内存:

  

为总计0个请求提供服务后,超出了1228 MB的硬盘限制,而1280 MB。考虑在app.yaml中设置更大的实例类。

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

我的Spacy模型是一个标记器和解析器,占用磁盘27 MB。我不明白为什么应用程序引擎上的内存需求会比Mac上大得多。

看起来像其他人一样能够run Spacy on app engine。知道我做错了什么吗?

1 个答案:

答案 0 :(得分:4)

我能够找到解决方案。我将模型加载到模块级变量中,因此在导入模块时,将加载模型。

当您部署第二代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):
    if nlp is None:
        nlp = spacy.load('my_model')
    return nlp(text)