keras - 尝试从容器中的 AWS lambda 中使用 keras 模型超时
问题描述
我正在尝试遵循这些说明: https://docs.aws.amazon.com/lambda/latest/dg/python-image.html https://docs.aws.amazon.com/lambda/latest/dg/图像-create.html
不同之处在于我的应用程序尝试导入一些库并加载 Keras 模型以进行预测。这是我的 dockerfile:FROM amazon/aws-lambda-python:3.8
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir tensorflow keras numpy pillow
COPY app.py ./
COPY cnn.h5 ./
CMD ["app.handler"]
这是 app.py 的代码:
import keras
import numpy as np
from keras.preprocessing import image
import json
my_dict = {"0": "123", "1": "456", "2": "789"}
cnn = keras.models.load_model('cnn.h5')
def downloadFromS3(strBucket, s3_path, local_path):
s3_client = boto3.client('s3')
s3_client.download_file(strBucket, s3_path, local_path)
def handler(event, context):
bucket_name = event['Records'][0]['s3']['bucket']['name']
file_path = event['Records'][0]['s3']['object']['key']
file_name = file_path.split('/')[-1]
downloadFromS3(bucket_name, file_path, '/tmp/' + file_name)
test_image = image.load_img('/tmp/' + file_name, target_size = (224,224))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = cnn.predict(test_image)
predicted_class = result[0].argmax()
return my_dict[str(predicted_class)]
不幸的是,我一直遇到超时。我已经高达 3072MB 和 20 秒的超时,当我在 AWS 管理控制台中运行测试调用调用时,它仍然会引发超时错误。我开始认为这是一个 S3 权限问题,所以我创建了一个更简单的应用程序来测试。dockerfile 看起来像这样:
FROM amazon/aws-lambda-python:3.8
COPY app.py ./
CMD ["app.handler"]
app.py 看起来像这样(是的,我意识到我正在下载一个文件并且什么都不做):
def downloadFromS3(strBucket, s3_path, local_path):
s3_client = boto3.client('s3')
s3_client.download_file(strBucket, s3_path, local_path)
def handler(event, context):
bucket_name = event['Records'][0]['s3']['bucket']['name']
file_path = event['Records'][0]['s3']['object']['key']
file_name = file_path.split('/')[-1]
downloadFromS3(bucket_name, file_path, '/tmp/' + file_name)
return file_name
这个更简单的示例返回正常,这让我相信它从 S3 下载就好了。当我从笔记本电脑在 docker 中运行时,此代码会在大约 5 秒内返回,其中大部分是执行导入和加载模型。我不知道在哪里寻找为什么会超时。
解决方案
推荐阅读
- javascript - 清除搜索输入后将响应重置为 null Vue.js
- java - 什么是在这里抛出 IOException?
- reactjs - gatsbyjs,reactjs - 为什么组件渲染两次而图像没有出现?
- ios - 快速重新加载单元格后如何在单元格中保持滚动视图内容偏移
- html - 在接触和不接触垫子输入后单元测试垫子错误的存在
- node.js - 节点 gyp 不工作(WindowsError:[错误 183] ═хтючьюцэю ёючфрЄ№Їрщы,)
- c++ - 将二进制文件添加到其他人的柯南食谱中
- jquery - 当通过 AJAX 重定向收到 401 时,有没有办法在 Chrome 中删除 WWW-Authenticate?
- java - 片段上的 onCreate 总是从错误的位置开始
- python - 在 Flask 中获取特定的帖子类别