【问题标题】:Best practice when loading and predicting keras model using flask使用烧瓶加载和预测 keras 模型时的最佳实践
【发布时间】:2019-07-04 21:23:43
【问题描述】:

我使用此配置在 Google AppEngine 上部署了一个小型 Web 服务(flask)app.yaml

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

我有一个端点来预测一个句子是否有毒,不幸的是调用端点有时真的很慢,有时很快。

当然,我只加载一次模型,而不是在每次请求时加载。启动烧瓶时,线程为 False。

    list_classes = ["toxic", "severe_toxic", "obscene", "threat", "insult", "identity_hate"]

    with open('tokenizer.pkl', 'rb') as handler:
        tokenizer = pickle.load(handler)

    model = load_model('m.hdf5')

    app = Flask(__name__)

    def prediction(sentence):
        list_tokenized_train = tokenizer.texts_to_sequences([sentence])
        maxlen = 200
        X_t = pad_sequences(list_tokenized_train, maxlen=maxlen)

        pred = model.predict(X_t)[0]

        dic = {}
        for idx, prob  in enumerate(pred):
            dic[list_classes[idx]] = float(prob) 
        return dict(sorted(dic.items(), reverse=True, key=lambda x: x[1]))


 @app.route('/api/v1/predict/<comment>', methods=['GET'])
 def predict(comment):
     result = prediction(comment)
     return make_response(jsonify({'Comment': comment, 'Result': result}), 200)

if __name__ == '__main__':
    app.run(threaded=False)

我可以增强某些部分以获得更好的性能吗?

【问题讨论】:

  • 你试过记录时间吗?你也能这么说吗?

标签: python google-app-engine machine-learning flask keras


【解决方案1】:

在我看来,您的 main.py 代码看起来不错,我只能在 app.yaml 文件中看到可能的改进。

选择 manual_scaling 并将实例数设置为 1 可能会限制您的请求的响应时间。根据发送到实例的请求数量,它可能无法足够快地处理它们。因此,为什么请求之间存在这种差异。

为了缩短响应时间,我建议您改用automatic scaling,并尝试通过为其提供更多资源来使您的实例更强大,以防自动扩展无法解决您的问题。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2020-06-05
    • 2011-09-21
    • 1970-01-01
    • 2015-01-20
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多