【问题标题】:Google App Engine gunicorn worker timeout in Flask app when loading a large pickle?加载大泡菜时,Flask应用程序中的Google App Engine gunicorn worker超时?
【发布时间】:2019-10-20 20:28:15
【问题描述】:

我有一个 350 MB 的 Sklearn pickle 文件,我想在 Flask 应用启动时加载它。

我使用_pickle,因为它在文档中提到它具有更快的加载时间:

import _pickle as pickle

start = timeit.default_timer()
with open("pickle/pipeline.pkl", 'rb') as f: 
        # ~350MB file
        pipeline = pickle.load(f)
        stop = timeit.default_timer()
        print('Time: ', stop - start)

pickle 在本地加载需要 5-12 秒,但在 Google App Engine F4 (1GB RAM) 实例上,gunicorn worker 超时。

Google App Engine 日志:

A 2019-10-20T20:07:55Z [2019-10-20 20:07:55 +0000] [14] [INFO] Booting worker with pid: 14

A 2019-10-20T20:11:02Z [2019-10-20 20:04:14 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:14)

我尝试通过在app.yaml 文件中添加 -t 标志来增加工作器超时,如下所示,但仍然不起作用:

runtime: python
instance_class: F4
env: flex
entrypoint: gunicorn -t 120 -b :$PORT app:app

liveness_check:
  initial_delay_sec: 500

readiness_check:
  app_start_timeout_sec: 500

我什至尝试过使用 eventlet,但它不起作用:

gunicorn -t 120 -b :$PORT app:app --worker-class eventlet --workers 3 

【问题讨论】:

    标签: python flask google-cloud-platform pickle gunicorn


    【解决方案1】:

    试试entrypoint: gunicorn -t 0 -b :$PORT app:app 它对我有用。

    【讨论】:

    • 谢谢,这也解决了长时间运行的任务的问题,但是,Gunicorn 文档对此设置有一个有点神秘的警告:“如果你设置这个(即超时值)明显更高'确定对同步工作人员的影响。”
    【解决方案2】:

    加载 350 MB 的 pickle 数据文件的过程耗时过长,App Engine 认为您的实例已失败。您的容器启动时间超过了三分钟。

    你有一个不容易解决的问题。最大文件大小为 32 MB(Go 应用程序为 64 MB)。您正在将文件下载到内存中,但您的实例下载时间过长。

    解决方案:我会使用其他服务,例如 Cloud Run,您可以在其中将 pickle 数据文件嵌入到容器映像中,这样就不需要下载。

    【讨论】:

    • 您建议如何将文件嵌入到图像中?
    • @dendog 在您的 Dockerfile 中,将文件复制到文件系统中。然后该文件将成为 Docker 映像的一部分。
    • 谢谢@John Hanley 我正在这样做,但joblib.load 调用仍然需要 3 分钟才能加载文件 - 还有其他方法吗?
    • @dendog 您的问题未显示joblib.load 的代码。性能与实例大小有关。尝试更大的实例大小。请注意,容器及其文件系统被加载到内存中。如果您有一个 1G 实例,其中包含 350 MB 的 pickle 文件,则可能是您处理 pickle 文件的内存不足。我不知道,因为您没有提供有关正在加载的内容或所需的处理/内存的详细信息。
    • 这不是我的问题,抱歉只是劫持了线程!我的实例是 4Gi 和 2 cpu,这是最大值。我认为没有其他方法可以提高加载文件的速度:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2020-10-05
    • 2016-07-20
    • 2020-08-29
    • 2019-04-22
    • 2020-06-09
    • 2012-06-06
    相关资源
    最近更新 更多