我正在使用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,我该怎么做才能打破它?