当前位置: 首页 > 知识库问答 >
问题:

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

林涵映
2023-03-14

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

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

在总共处理0个请求后,超过了1228 MB的硬内存限制,1280 MB。考虑在app.yaml.中设置一个更大的实例类

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

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

看起来其他人已经能够在应用程序引擎上运行Spacy。知道我可能做错了什么吗?

共有1个答案

孔冥夜
2023-03-14

我找到了解决办法。我将我的模型加载到模块级变量中,这样当模块被导入时,模型就会被加载。

部署第二代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中的内存限制。目前,我有这个应用程序,需要大量的CPU/内存。 我尝试在GAE上使用b8实例运行它(基本上是使用4.8GHz CPU的顶级实例) 我还尝试手动设置CPU的数量 但无论我做什么,我总是达到同样的记忆限制。。。(见下文) GET500 0 B 43 s Unknown/_ah/start在总共处理0个请求后,超过了2048 MB的软内存限制,达到3163 MB。考

  • 我正在获取一个GZip LXML文件,并试图将产品条目写入数据库模型。以前,我有本地内存问题,这是通过SO(问题)的帮助解决的。现在我得到了一切工作和部署它,然而在服务器上我得到以下错误: 现在我尝试了所有我知道的方法来减少内存使用,目前正在使用下面的代码。gzip文件约为7MB,而解压缩文件约为80MB。本地代码运行良好。我试着将其作为HTTP请求和Cron作业运行,但没有什么不同。现在我想知道

  • 我正在尝试获取XML文件并将其解析到数据库中。XML是用GZIP压缩的。GZIP文件是~8MB。当我在本地运行代码时,pythonw上的内存将被占用。exe的版本升级到整个系统(Windows 7)停止响应的级别,当我在线运行它时,它超过了Google App Engine上的内存限制。不确定文件是否太大或我是否做错了什么。任何帮助都将不胜感激! 使现代化 所以我试着按照BasicWolf的建议切

  • //{this.props.params.item}来自反应路由器(路径('/detail/item/id')) 为什么我的调度是无限循环,直到出错(超过最大调用堆栈大小)

  • PS:有时我会从java代码执行shell脚本。会不会导致这类问题?

  • 我试图用位于S3上的输入文件创建一个Amazon Transbe作业,该文件的大小是4.3GB,当我试图创建作业时,会显示这个错误。 我可以用我的视频做什么?我应该转换视频,提取音频,还是有什么方法可以用一些AWS服务来做