要求是我必须在lambda上触发SageMaker端点以获取预测(这很容易),但必须使用XGBoost和SHAP等软件包对变量的重要性进行一些额外的处理。
我可以使用SageMaker Jupyter笔记本电脑达到终点并获得不同的重要性。现在,我想在AWS lambda上复制相同的内容。
1)如何在AWS Lambda上运行python代码,其中包依赖于Pandas,XGBoost和SHAP(总包大小大于500MB)。解压缩的部署程序包大小大于250 MB,因此lambda不允许部署。我什至尝试使用Cloud9中的lambda函数,由于大小限制,出现了相同的错误。我也尝试过lambda层,但是没有运气。
2)我有办法绕过250 MB的部署程序包大小限制在lambda上或通过lambda运行具有如此大程序包的代码
3)是否有一种方法可以通过lambda触发SageMaker笔记本执行,从而执行计算并将输出返回给lambda?
答案 0 :(得分:3)
尝试将依赖项上载到Lambda层。仅供参考:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
答案 1 :(得分:0)
您可以在进行实际预测之前尝试使用SageMaker推理管道进行预处理。基本上,您也可以使用用于训练推理的相同预处理脚本。部署管道模型后,带有预处理任务的全套容器将在端点或转换作业中的每个EC2实例上安装并运行。特征处理和推理以低延迟执行,因为部署在推理管道中的容器位于同一EC2实例(端点)上。您可以参考文档here。
以下博客文章/笔记本详细介绍了此功能
答案 2 :(得分:0)
我一直遵循的标准是,我从不随带lambda函数来运送库或外部软件包,而是始终创建图层。
层是一个ZIP归档文件,其中包含库,自定义运行时或其他依赖项。通过层,您可以在函数中使用库,而无需将它们包含在部署包中。
如果将每个依赖项(即Pandas,XGBoost和SHAP)打包到其各自的Lambda层中并将其附加到函数中,则可能会解决您的问题。
在docs
中了解有关Lambda图层的更多信息答案 3 :(得分:0)
我发现AWS lambda大小的250MB限制过于严格。 xgboost软件包中只有一个文件ibxgboost.so已经有140 MB左右的空间,剩下的只有110Mb的空间。这使得AWS lambda除了简单的“ hello world”之外,无用。 作为一个丑陋的解决方法,您可以将xgboost软件包存储在s3上的某个位置,然后将其从lambda调用例程复制到/ tmp文件夹,然后将python路径指向它。允许的tmp空间要高一些-500MB,所以它可以工作。 我不确定在运行lambda函数之间是否未清除/ tmp文件夹。