Итак, у меня есть простое демонстрационное приложение Flask, предназначенное для работы с моделью Keras, которую я обучал. Приложение работает нормально на моем компьютере, но часто на Heroku. В приложении модель загружается при запуске Flask. Это имеет смысл, так как тогда нам не нужно перезагружать модель при каждом запросе. Обычно это будет хорошо, так как Flask будет работать непрерывно. Однако, учитывая, что это бесплатное приложение Heroku, Heroku деактивирует мой экземпляр через 30 минут. Это означает, что каждый раз, когда приложению приходится перезагружать модель с нуля, что вызывает ошибку тайм-аута из-за создания экземпляра модели (что часто занимает более 20 секунд) (иногда оно также имеет ошибку нехватки памяти). Я хотел бы уменьшить время загрузки модели, если это возможно. Запрет на поиск другого способа избежать тайм-аута в Heroku без обновления (т. Е., Возможно, многопоточности). Я понимаю, что могу разместить свою модель на графическом процессоре в AWS или как-нибудь еще, а затем назвать ее, но я бы хотел сделать ее максимально простой и экономически эффективной. Он не предназначен для обслуживания тысяч запросов, а просто работает, когда 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: