【发布时间】:2021-01-22 12:59:50
【问题描述】:
我有一个在本地环境中工作的 Flask 应用程序。但是当我在生产模式下运行它时它不起作用。
我正在使用 pickle 来保存我的模型,并且我测试了 joblib。
当我加载 pickle 文件时出现问题:我遇到了 504 超时错误。
一旦文件由培训生成,我正在像这样加载文件:
model = pickle.load(open(file)),
我很确定是训练生成的泡菜文件引发了这个错误(我用其他泡菜文件测试过)
经过更多调查,我通过管道功能Pipeline缝合了注射女佣导致问题:
model = Pipeline(
[
('features', my_data),
('model', ensemble.RandomForestRegressor(min_samples_leaf=1, n_jobs=-1))
])
...
pickle.dump(model, file)
这项工作很好:
model = Pipeline(
[
('features', my_data),
('model', ensemble.RandomForestRegressor(min_samples_leaf=1, n_jobs=-1))
])
model = {}
model["foo"] = "bar"
pickle.dump(model, file)
我在 Flask 开发服务器上没有遇到任何问题,只是在生产环境(apache)中,当然我不想使用 dev。我的生产环境中的服务器。
知道为什么在生产环境中会出现 504 错误吗?
编辑: 这是我使用pickle.load(...)的方法
def recup_df():
df = pd.read_pickle("dataframe.pickle")
mod = pickle.load("model.pickle")
X = df.head(20).drop(['price'], axis=1)
y = df.head(20).price.values.copy()
predict_df = pd.DataFrame.from_dict({
'predicted':mod.predict(X),
'true':y,
'make':X.make,
'model':X.model
})
prediction = dict()
result = 1
for data in predict_df.itertuples():
str_result = "result n°{}".format(result)
car_name = "{} {}".format(data.make, data.model)
prediction[str_result] = {
car_name : [{
"true price":data.true,
"predict price":data.predicted
}]
}
result += 1
output = {
"prediction":prediction
}
return jsonify(output)
【问题讨论】:
标签: python flask scikit-learn pickle joblib