【发布时间】:2018-06-25 05:58:08
【问题描述】:
所以我有一个简单的 Flask 演示应用程序,旨在为我训练的 Keras 模型提供服务。该应用程序在我的计算机上本地运行良好,但在 Heroku 上经常超时。在应用程序中,模型在 Flask 启动时被加载。这是最有意义的,因为我们不必在每个请求上重新加载模型。通常这会很好,因为 Flask 会连续运行。但是,鉴于这是一个免费的 Heroku 应用程序,Heroku 会在 30 分钟后停用我的实例。这意味着每次应用程序必须从头开始重新加载模型时,由于模型被实例化(通常需要 20 多秒)而导致超时错误(有时它也会出现内存不足错误)。如果可能的话,我想减少模型加载时间。除非找到另一种方法来避免 Heroku 超时而不升级(即多线程)。我意识到我可以将我的模型托管在 AWS 上的 GPU 或其他东西上,然后调用它,但我想让它尽可能简单和具有成本效益。它并不是为了满足 1000 个请求,而只是在 1 或 2 个人点击我论文中的链接时起作用。
代码如下。
import os
from flask import Flask, redirect, url_for, request, render_template, send_from_directory
from werkzeug import secure_filename
from examples2.example_keras import SimpleResNet50, ResNet2
# folder to upload pictures
UPLOAD_FOLDER = 'uploads/'
# what files can upload
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg'])
# start + config
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['ALLOWED_EXTENSIONS']=ALLOWED_EXTENSIONS
model = ResNet2("long_path/model_weights.h5")
# main route
@app.route('/')
def index():
return render_template('upload.html')
示例错误代码
at=error code=H12 desc="Request timeout" method=GET path="/" host=lung-r.herokuapp.com request_id=79bfba10-810e-444d-a73a-d32bcd68d603 fwd="24.198.104.217" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
2018-06-25T05:22:18.893433+00:00 app[web.1]: load model weights_path:
【问题讨论】:
-
这对我来说也是个大问题