gae*_*fan 2 google-app-engine google-app-engine-python spacy
我一直在使用 GAE 一段时间没有任何问题。唯一的变化是我添加了 Spacy 以及我训练的模型。
当我使用 dev_appserver 在本地运行时,该应用程序消耗大约 153 MB。部署后,出现内存超出错误。即使有F4_1G实例,我也超出了内存:
超过 1228 MB 的硬内存限制,总共为 0 个请求提供服务后为 1280 MB。考虑在 app.yaml 中设置更大的实例类。
如果我导入 Spacy 并且不加载我的模型(实例有大约 200MB),那么部署就可以工作,所以 Spacy 本身不是问题,但是当我用spacy.load()内存加载我的模型时,然后超出了限制。请注意,这发生在我什至使用我的 Spacy 模型之前,因此仅加载模型就会导致问题。
我的 Spacy 模型是一个标记器和解析器,在磁盘上占用 27 MB。我不明白为什么应用引擎上的内存要求会比我的 Mac 大得多。
看起来其他人已经能够在应用引擎上运行 Spacy。知道我可能做错了什么吗?
我能够找到解决方案。我正在将模型加载到模块级变量中,以便在导入模块时加载模型。
当您部署第二代 GAE 应用程序时,会部署一堆工作线程(在我的情况下为 8 个)。我不了解工作线程的细节,但我怀疑有几个工作线程导入了模块,并且所有工作线程都对内存使用有贡献。
我更改了代码,以便模型在第一次使用时加载,而不是在模块导入时加载。进行此更改后,内存使用量为 428MB。
以下是不该做什么的示例:
import spacy
nlp = spacy.load('my_model')
def process_text(text):
return nlp(text)
Run Code Online (Sandbox Code Playgroud)
而是这样做:
import spacy
nlp = None
def process_text(text):
global nlp
if nlp is None:
nlp = spacy.load('my_model')
return nlp(text)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |