无法在AWS Lambda上导入Keras"模块初始化错误:[Errno 38]功能未实现"

时间:2017-11-22 19:22:12

标签: python-3.x lambda multiprocessing keras

我正在使用Keras和Tensorflow将深度学习模型部署到AWS中 LAMBDA。为了解决Lambda的未压缩250MB的大小限制,我用它来将包大小减少到极限:

cd /home/ec2-user/build_dnn_nlp/env/lib64/python3.6/site-packages
find . -name "*.so" | xargs strip
find . -type f -name '*.pyc' -delete
find . -type d -name '__pycache__' -delete

现在,当我尝试导入keras时,我在Lambda控制台中看到了这个错误: module initialization error: [Errno 38] Function not implemented

我认为错误38与多处理有关,并且因为lambda实例没有共享内存(没有/ dev / shm /),所以多处理是不可能的。

为了解决keras中的任何多处理问题,我在导入Keras之前将tensorflow设置为单核模式,并使用print语句帮助调试Lambda。将CPU设置为1核心'打印,它总是停止导入keras。

def orchestrate(text):
    import tensorflow as tf
    print('imported tf')

    config = tf.ConfigProto(
        intra_op_parallelism_threads=1,
        inter_op_parallelism_threads=num_cores,
        allow_soft_placement=True,
        device_count={'CPU': 1})
    session = tf.Session(config=config)
    print('set cpu to 1 core')
    from keras import backend as K
    print('import keras backend')
    K.set_session(session)
    print('set session')
    from keras.layers import Activation, Dense, Dropout
    from keras.models import Sequential, load_model
    from keras.preprocessing.text import Tokenizer
    print('imported keras libs ')
    model = define_model()

导入keras需要多处理(如果这是问题)?如果其他人在AWS Lambda上部署了keras,我该怎么做才能打破它?

0 个答案:

没有答案