首页 > 解决方案 > 烧瓶应用程序中的Tensorflow saved_model导致gunicorn WORKER TIMEOUT

问题描述

我知道这是一个非常常见的问题,但我没有看到任何人与我指出的错误来源相同。

所以我有一个烧瓶应用程序,它使用 Tensorflow 进行预测。我使用加载模型my_model = tf.saved_model.load(path_to_model),使用 实例化服务类my_service=Service(my_model),使用测试运行它my_service.predict(sample_user_input)注意这有效)。然后启动烧瓶,所以基本上:

#API.py
my_model = tf.saved_model.load(path_to_model)
my_service=Service(my_model)
assert my_service.predict(sample_user_input, "neuralNets").is_ok  #this passes
@app.route('/')
def foo(user_input):
    results = my_service.predict(user_input, "neuralNets")        #this does not
    return results.toJson()

我可以tf_model.signatures['predict'].predict方法中查明错误的来源。因为当.predict接收“线性”而不是“神经网络”作为参数时,一切正常。而这两者之间的唯一区别是tf_model.signatures

我也可以确认这是一个 gunicorn 问题,因为如果我只是运行python3 API.py使用 Flask 的内置服务器,这很垃圾,它工作正常。

所以我关注了这个线程,并使用了 gunicorn 配置,我尝试了:

--timeout=120
--worker-class=gthread/gevent
--threads 2/3/4...
--workers=1 + multiprocessing.cpu_count() * 2
--preload

没有任何效果。所以我在这里,任何帮助表示赞赏。此外,我在两台不同的 ubuntu 机器和在 k8s 上运行的 docker 映像上重现了相同的结果。所以这绝对不是“刚刚重启”的问题。

标签: pythontensorflowflaskgunicorn

解决方案


推荐阅读