LightGMB predict_proba 导致 gunicorn 超时

LightGMB predict_proba causing gunicorn timeout

我训练了一个 LGBM 分类器,可以 运行 在本地笔记本中使用:

model = jlb.load('fnol-v13-pipeline-high-g-analysis-f1-focal-retrain-{}.pkl'.format(model_version))
probs = model.predict_proba(x_test)
probs = [x[0] for x in probs]

但是,在 Flask API 运行 中使用 gunicorn 的 Docker 容器中,行 probs = model.predict_proba(x_test) 导致 [CRITICAL] WORKER TIMEOUT,而不会引发错误.我已经尝试在这一行 运行 之前直接将 x_test 数据帧作为字典打印出来,当我将其作为数据帧重新加载到我的笔记本和 运行 预测函数时,分数是恢复正常。将同一个字典复制回容器中仍然会导致超时。该模型是从同一文件加载的。

知道是什么导致了这个问题,或者我该如何调试它?我已经设置 gunicorn log-level=debug 但这仍然只显示超时。我认为这是 LGBM 模型的问题,但它似乎只发生在容器内。

更新:我删除了 gunicorn 包装器,Flask 应用程序 运行 没有问题,所以我认为 gunicorn 和 LGBM 之间存在一些兼容性问题?

进一步更新:我切换到 uWSGI,它 运行 没问题,但我会保持打开状态,以防有人知道 gunicorn 出了什么问题。

我最终发现我需要做的就是将 --worker-class=gthread 添加到我的 gunicorn 入口点。