简约应用在部署时出现“ OSError:[Errno 12]无法分配内存”的信息-为什么?

时间:2019-04-02 12:10:46

标签: python-3.x google-app-engine pytorch

我正在使用Python 3.7运行时设置一个新的Google App Engine。但是,即使设置非常少,它也会失败。

app.yaml很简单:

runtime: python37

main.py很简单:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

最后,requirements.txt就像这样简单:

Flask>=1.0.2
torch==1.0.1
Flask-Compress>=1.4.0
numpy>=1.16.2

我希望此设置在发布gcloud app deploy时会起作用,但我收到一个错误-这是Google Cloud Build上错误日志的最后几行:

(log lines before this omitted as they're on INFO level)
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/local/bin/ftl.par/__main__.py", line 65, in <module>
File "/usr/local/bin/ftl.par/__main__.py", line 54, in main
File "/usr/local/bin/ftl.par/__main__/ftl/python/builder.py", line 114, in Build
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 153, in BuildLayer
File "/usr/local/bin/ftl.par/__main__/ftl/common/single_layer_image.py", line 60, in GetCacheKey
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 109, in GetCacheKeyRaw
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 332, in GetCacheKeyRaw
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 346, in _python_version
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 938, in _execute_child
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

为什么会失败?在开始使用python 3.7时,在这里使用python 2.7是否正常?似乎找不到有关此特定错误的任何文档-我试图在app.yaml文件中增加内存,但是没有任何运气。

1 个答案:

答案 0 :(得分:-1)

您在main.py文件中缺少一小部分。在main.py文件的末尾添加以下行:

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

更多信息可以在GoogleCloudPlatform > python-docs-samples GitHub hello_world示例中找到。

但是,问题是由requirements.txt文件中的库引起的。如果您注释掉# torch==1.0.1并重新部署,您将看到部署将成功。

Torch是一个庞大的库,其重量约为 582.5MB ,正在尝试在部署期间安装到App Engine应用上。因此,您可能会遇到“无法分配内存”错误。

尽管我有一个具有足够内存和非常强大规格的VM实例,但我尝试自行在该库中安装该库。它停留在99%,并始终抛出“ MemoryError”。这意味着您尝试使用的该库存在一些问题。

因此,删除炬管库,添加main.py中缺少的行,然后重新部署。您必须看到成功的部署。我已经对其进行了测试,现在该应用已成功部署。