python - 烧瓶应用程序中的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 映像上重现了相同的结果。所以这绝对不是“刚刚重启”的问题。
解决方案
推荐阅读
- android - 在我的应用程序中使用指纹默认硬件 android 登录,与(paytm money 和 Gpay、imobile、axis bank)相同
- java - 在事务结束时执行复杂的逻辑
- python - 使用熊猫创建列后如何将“列”添加回txt文件?
- sapui5 - 在 sapui5 中显示来自服务器的 csv 文件
- google-cloud-datastore - 谷歌云数据存储模拟器导出/导入不起作用
- python - 从两个列表创建一个元组列表
- php - 在没有 JS 的 Laravel 中注销
- php - MariaDB SQL 语法错误 - “在‘order(”附近使用正确的语法
- javascript - 是否可以禁用 LightningChartJS 图表的放大功能?
- javascript - Array.splice() 产生值“未定义”