我有一个 flask 应用程序有内存泄漏,我无法找出我哪里出错了。该应用程序用于通过应用程序实时演示Tensorflow模型。在调用模型加载并预测图像后,Heroku上的内存增加到108%,导致R14。此后,除非重新启动dynos,否则内存永远不会恢复到正常水平。
编辑:经过进一步的分析我发现“load_model(f)”行是导致泄漏的原因;虽然我不确定为什么从TF加载模型会导致这个问题。
下面是代码:
def read_image(filename):
t1 = sitk.ReadImage(filename)
t2 = sitk.GetArrayFromImage(t1)
X = np.array(t2[(int(len(t2)/2))])
X = scipy.ndimage.zoom(X, 224/288)
X = np.stack((X,)*3, axis=-1)
return X
@app.route("/predict", methods = ['GET','POST'])
def predict():
f = "models/model"
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = file.filename
file_path = os.path.join('static/images', filename)
file.save(file_path)
img = read_image(file_path)
model = load_model(f)
img = np.expand_dims(img, axis=0).astype(np.float32)
predictions = model.predict(img)
label_index = int(np.round(predictions[0][0]))
result = ""
if label_index == 0:
result = "case0"
elif label_index == 1:
result = "case1"
return render_template('test.html', result = result, filename = "test.png", css="show")
return render_template('test.html')
2条答案
按热度按时间anhgbhbe1#
我认为你的模型太大了,这是你的问题
20jt8wwn2#
当对象没有被正确释放或垃圾回收时,可能会发生内存泄漏。确保您正在正确地关闭文件、释放资源并在必要时使用上下文管理器。仔细检查您的代码,以确保您没有无意中保留对应该释放的对象的引用。