Время загрузки AWS Lambda истекает при загрузке данных модели VGG16 imagenet - PullRequest
0 голосов
/ 24 октября 2018

У нас есть лямбда-функция, где мы будем использовать Keras для извлечения функций из изображений.Таким образом, когда лямбда-функция пытается загрузить модель imagenet VGG16, время ожидания истекает.

Код, по которому лямбда получает тайм-аут: -

from keras.applications.vgg16 import VGG16
model = VGG16(weights='imagenet', include_top=True)

Как решить эту проблему?Можем ли мы войти в бэкэнд-контейнер лямбда-функции и загрузить модель?

Лямбда-код: -

import os
import shutil
import stat
import zipfile
import boto3
from six.moves import urllib


s3 = boto3.client('s3')

def download(url, local_fpath):
    print('downloading other files........')
    s3.download_file('HARDCODED_BUCKET', url,local_fpath)

def make_gcc_executable():
    for fpath in os.listdir("/tmp/gcc/bin"):
        fpath = os.path.join("/tmp/gcc/bin", fpath)
        st = os.stat(fpath)
        os.chmod(fpath, st.st_mode | stat.S_IXOTH | stat.S_IXGRP | stat.S_IXUSR)

    for fpath in os.listdir("/tmp/gcc/libexec/gcc/x86_64-linux-gnu/4.6.4"):
        fpath = os.path.join("/tmp/gcc/libexec/gcc/x86_64-linux-gnu/4.6.4", fpath)
        st = os.stat(fpath)
        os.chmod(fpath, st.st_mode | stat.S_IXOTH | stat.S_IXGRP | stat.S_IXUSR)

# Download GCC and uncompress it.
download('test/imglib-new/gcc.zip', "/tmp/gcc.zip")
zipfile.ZipFile("/tmp/gcc.zip").extractall("/tmp/gcc")

make_gcc_executable()



from keras.preprocessing import image
from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
import numpy as np

def _get_model2():
    print('downloadin our model....')
    s3.download_file('BUCKET','test/model/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5','/tmp/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')

    #model = VGG16(weights='imagenet', include_top=False)
    print('model download is done')
    model = VGG16(weights='/tmp/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')
    return model

model = _get_model2()



def handler(event, context):
    print('entering the function..downloading the images')
    download_loc='/tmp/dog2.jpg'
    s3.download_file('BUCKET', 'test/images/dog2.jpg',download_loc)
    print('image is downloaded')



    print('running the model now..')

    img = image.load_img(download_loc, target_size=(224, 224))
    img_data = image.img_to_array(img)
    img_data = np.expand_dims(img_data, axis=0)
    img_data = preprocess_input(img_data)
    print('extracting the feature...')
    vgg16_feature = model.predict(img_data)
    print('over..')
    print(vgg16_feature.shape)

Сообщение об ошибке: -

START RequestId: 00827d13-d7a4-11e8-9ea2-c5365d4fbfcb Version: $LATEST
module initialization error: Compilation failed (return status=1): /tmp/.theano/compiledir_Linux-4.14-amzn1.x86_64-x86_64-with-glibc2.2.5-x86_64-3.6.1-64/lazylinker_ext/mod.cpp:1:20: fatal error: Python.h: No such file or directory. compilation terminated.. 

END RequestId: 00827d13-d7a4-11e8-9ea2-c5365d4fbfcb
REPORT RequestId: 00827d13-d7a4-11e8-9ea2-c5365d4fbfcb  Duration: 153.15 ms Billed Duration: 200 ms     Memory Size: 832 MB Max Memory Used: 225 MB 
module initialization error
Compilation failed (return status=1): /tmp/.theano/compiledir_Linux-4.14-amzn1.x86_64-x86_64-with-glibc2.2.5-x86_64-3.6.1-64/lazylinker_ext/mod.cpp:1:20: fatal error: Python.h: No such file or directory. compilation terminated.. 

1 Ответ

0 голосов
/ 24 октября 2018

Лямбда не дает вам доступа для входа в контейнер.Вы не упомянули размер модели, но у вас есть несколько вариантов:

  • Развертывание лямбды может быть до 50 МБ, поэтому вы вполне можете загрузить модель как часть своего кодаупакуйте и сохраните, загрузив его.
  • Если у вас есть для загрузки модели, увеличьте время ожидания до полных 15 минут.Маловероятно, что какой-либо файл, для загрузки которого требуется больше времени, в любом случае даже поместился бы в лямбда-памяти ОЗУ.
  • Рассмотрите источник вашей загрузки.Загрузка с S3 по Lambda со скоростью 50 Мбит / с, поэтому загрузка вашей модели на S3 обеспечит вам более высокую скорость при больших загрузках.
  • Убедитесь, что вы выполняете загрузку вне объема функции-обработчика - таким образом, вы будетеЗагружайте модель только тогда, когда ваш лямбда-контейнер загружается впервые.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...