Продолжительность лямбда-функции AWS постоянно увеличивается - PullRequest
0 голосов
/ 09 апреля 2019

У меня довольно сложная лямбда-функция AWS, которая загружает данные из сегмента S3, загружает обученную модель Keras из того же сегмента, использует модель для выполнения прогноза и отправляет этот прогноз обратно в другую лямбда-функцию. Это планируется запускать каждую минуту.

Я заметил, что заметил постоянное увеличение продолжительности функции, пока мой порог тайм-аута 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]

В чем может быть причина, и какое может быть решение, чтобы предотвратить такое поведение? Могу ли я предотвратить повторное использование контейнера и каждый раз принудительно запускать холодный запуск (и, если возможно, действительно ли это будет наилучшим способом оптимизации производительности?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...