我在为xgboost库创建lambda层时遇到问题。我正在运行:
我从这里(https://github.com/alexeybutyrev/aws_lambda_xgboost)抓取xgboost及其依赖项的压缩包,并将其加载到一个层中。当我尝试测试lambda时,出现以下错误:
Unable to import module 'lambda_function': No module named 'xgboost.core'
看起来__init__.py
正试图通过from .core import <stuff>
引用core.py
以前有人在AWS Lambda中遇到过此错误吗
编辑:正如@Marcin所说,第一个答案提供了适用于262MB以下大容量软件包的作品
A.Lambda层大小限制内的Python包
您还可以使用AWS sam cli和Docker(请参见此link安装sam cli)在容器中构建包。基本上,您使用
Python
作为运行时初始化默认模板,然后在requirements.txt
文件下指定包。我发现这比你提到的那篇文章容易。如果你想考虑它们以供将来使用,我会让你采取步骤。一,。初始化默认SAM模板
在要保留项目的任何文件夹下,可以键入
这将引发一系列问题,对于快速设置,我们将选择以下快速启动模板
通过选择
Hello World Example
,它会生成一个带有requirements.txt
文件的默认lambda function
。现在,我们将使用您想要的包的名称进行编辑,在本例中为xgboost
二,。指定要安装的软件包
由于我使用visualstudio代码作为编辑器,这将打开其中的文件。现在,我可以指定
xgboost
包下面是安装Docker的原因。一些包依赖于
C++
。因此,建议在容器内构建(Windows上的案例)。现在,移动到template.yaml
文件所在的文件夹。然后,输入三,。拉链包装
有些文件不希望包含在lambda层中,因为我们只希望保留python库。因此,您可以删除以下文件
然后压缩文件夹的剩余内容
我们根据docs将层放置在
python/
文件夹中 在Windows系统上zip
命令应替换为Compress-Archive my_layer/ my_layer.zip.
四,。将图层上载到AWS
在AWS上转到
Lambda
,然后选择Layers
和Create Layer
。现在,您可以上传.zip
文件,如下图所示注意,对于超过50MB的zip文件,您应该将
.zip
文件上载到s3存储桶,并提供路径,例如https://s3:amazonaws.com//mybucket/my_layer.zip
B.超过Lambda层限制的Python包
xgboost
包本身超过300MB,将抛出以下错误正如@Marcin善意地指出的,SAM cli的先前方法不会直接适用于超出限制的Python层。运行
sam build -u
时github上存在一个未解决的问题,即指定自定义docker映像,以及可能的解决方案重新标记默认lambda/lambci
映像那么,我们怎样才能度过这一关呢?。我只想指出一些有用的资源
编辑(2020年12月)
本月AWS发布了对AWS Lambda的container Image支持。遵循项目的下一个树结构
您可以使用以下Docker映像部署XGBoost模型。按照本repo说明进行详细说明
所以我一直无法弄清楚它为什么会以这种方式失败。我发现有效的解决方案是创建一个运行AmazonLinux的EC2实例,在那里安装并压缩库,然后保存到S3。有关详细说明,请参见此处:
https://medium.com/@lucashenriquessilva/how-to-create-a-aws-lambda-python-layer-db2830e08b12
相关问题 更多 >
编程相关推荐