我正在从事一个ML项目,该项目利用AWS Lambda构建模型并生成预测。lambda是用python编写的,使用了几个ML库,如pandas、sklearn、numpy和sciketlearn。 这些Lambda使用由Lambda层打包的共享代码。 我使用AWSCDK进行项目部署。CDK代码是用TypeScript编写的,不要问我为什么混合使用Python和TypeScript,它在这种情况下不相关
由于存在ML库,包(lambda代码+层)的大小超过了允许的最大大小250MB
在AWS宣布支持集装箱化lambdas之后,我决定尝试一下,以克服250MB的限制。然而,我没有找到任何适合我的情况的好例子,所以我正在尝试自己构建它
CDK代码如下所示:
...
// Create a lambda layer from code
// Code is located in lambda-code/ml directory and it looks
// like any Python package with main ML and DB connection functions
const mlLayer = new PythonLayerVersion(this, 'mlLayer', {
entry: './lambda-code/ml/',
})
...
// Lambda function is specified like
const classifyTransactionLambda = new DockerImageFunction(this, 'classifyTransactionLambda', {
code: DockerImageCode.fromImageAsset('./lambda-code/classify'),
memorySize: 512,
layers: [mlLayer],
tracing: Tracing.ACTIVE,
environment: {
BUCKET_NAME: mlModelsBucket.bucketName,
ENV: env
}
});
...
代码的结构如下所示:
分类lambda中的Dockerfile:
# Use the python lambda image from AWS ECR
FROM public.ecr.aws/lambda/python:3.7
COPY requirements.txt ./
RUN pip3 install -r requirements.txt
COPY index.py ./
CMD ["index.classify_transaction_handler"]
运行cdk deploy时,出现以下错误:
This lambda function uses a runtime that is incompatible with this layer (FROM_IMAGE is not in [python3.7])
有人遇到过这样的问题吗?此错误是否意味着mlLayer版本与lambdaclassifyTransactionLambda不兼容
任何帮助都将不胜感激
此时
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
因此,我修改了构建,在构建图像之前将所有层/库代码复制到每个lambda函数
相关问题 更多 >
编程相关推荐