AWS Lambda函数持续时间不断增加

时间:2019-04-09 18:46:18

标签: python amazon-web-services aws-lambda

我有一个相当复杂的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]

可能是什么原因,以及防止这种行为的解决方案是什么?我可以防止容器重复使用,并且每次都强制冷启动(如果可能的话,那真的是优化性能的最佳方法吗?)

0 个答案:

没有答案