GAE/STANDARD/Second/Python上的空间超过最大实例的内存 [英] Spacy on GAE/standard/second/Python exceeds memory of largest instance

查看:15
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆