我有一个烧瓶应用程序在当地环境中工作。但当我在生产模式下运行它时,它不工作
我正在使用pickle保存我的模型,我测试了joblib以保存模型
当我加载pickle文件时出现问题:我有一个504超时错误。
我加载的文件是这样的,一旦培训生成了该文件:
model = pickle.load(open(file))
我肯定是培训生成的pickle文件引发了这个错误(我使用其他pickle文件进行了测试)
经过进一步调查,我发现管道函数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 Development服务器没有任何问题,只是在生产环境(apache)中,当然我不想在我的生产环境中使用dev.server
知道生产环境中为什么会发生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)
pickle.dump在涉及由不同转换器组成的管道对象时存在问题
这里是关于这个问题的前一篇文章以及相关的解决方案:How to properly pickle sklearn pipeline when using custom transformer
我尝试了cloudpickle,它与Skleaner.Pipeline一起工作
相关问题 更多 >
编程相关推荐