我有一个相当复杂的AWS Lambda函数,该函数从S3存储桶中加载数据,从同一存储桶中加载经过训练的Keras模型,使用该模型执行预测并将该预测发送回另一个Lambda函数。计划每分钟运行一次。
我注意到,直到达到我的10秒超时阈值之前,该功能的持续时间一直在稳定增长。然后,这些功能将在第二分钟再次开始,并在大约2秒钟的时间内向下执行,并逐渐增加,直到再次达到超时为止。
我不知道是什么原因造成的(我的其他任何功能都没有发生过,包括那些也对S3进行读/写的功能),所以我很茫然-真的很想修复如果可能的话。我已经更新了问题,以包含代码的简化版本,如下所示:
import json
import os
import boto3
import numpy as np
import pandas as pd
import keras
from keras.models import Model, load_model
from keras.layers import Input, Dense, Flatten, Dropout
from keras.activations import sigmoid
from keras import initializers
from keras.optimizers import RMSprop
"""
.... functions for defining my ML model, loading & preparing data,
train/test split and prediction
"""
def handler(event, context):
"""
Returns a dict of expected returns per instrument
"""
## Initialise the connection to S3
s3 = boto3.resource('s3')
## Download the latest trained model from s3
s3.Object('data', 'Model.h5').download_file('/tmp/model.h5')
## Download latest data from s3
s3.Object('data', 'prices.csv').download_file('/tmp/prices.csv')
s3_data = pd.read_csv('/tmp/prices.csv',index_col='time')
## Load Data
X_train, Y_train, X_test, Y_test = load_data(filename='/tmp/prices.csv', Ys=instruments, test_size=1)
latest_data = X_test.tail(1) # Get most recent record
## Load model into Keras
model = load_model('/tmp/model.h5')
## Model Prediction
ys = predict_from_data(latest_data, model)
## Convert expected returns to dict
forecasts = pd.DataFrame( dict( {y:ys[:,i] for i,y in enumerate(instruments)}) )
return forecasts.to_dict(orient='records')[0]
可能是什么原因,以及防止这种行为的解决方案是什么?我可以防止容器重复使用,并且每次都强制冷启动(如果可能的话,那真的是优化性能的最佳方法吗?)