如何在AWS lambda上使用包依赖项运行python代码>;500MB?
要求是我必须在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运行具有如此大包的代码如何在AWS lambda上使用包依赖项运行python代码>;500MB?,python,amazon-web-services,aws-lambda,xgboost,amazon-sagemaker,Python,Amazon Web Services,Aws Lambda,Xgboost,Amazon Sagemaker,要求是我必须在lambda上触发SageMaker端点以获得预测(这很容易),但必须使用XGBoost和SHAP等包对可变重要性进行额外处理 使用SageMaker Jupyter笔记本,我能够到达终点并获得可变的重要性。现在,我想在AWS lambda上复制同样的东西 1) 如何在AWS lambda上运行python代码,其中包含Pandas、XGBoost和SHAP的包依赖项(总包大小大于500MB)。解压缩的部署包大小大于250 MB,因此lambda不允许部署。我甚至尝试使用Cloud
3) 是否有办法通过lambda触发SageMaker笔记本执行,从而执行计算并将输出返回lambda?尝试将依赖项上载到lambda层。仅供参考:在进行实际预测之前,您可以尝试使用SageMaker推理管道进行预处理。基本上,您也可以使用用于推理训练的相同预处理脚本。部署管道模型时,在端点或转换作业中的每个EC2实例上安装并运行带有预处理任务的完整容器集。由于推理管道中部署的容器位于同一EC2实例(端点)上,因此功能处理和推理的执行延迟较低。您可以参考文档 以下博客文章/笔记本详细介绍了此功能
在中了解有关Lambda层的更多信息我发现AWS Lambda大小的250MB限制非常严格。xgboost包中只有一个文件ibxgboost.so的大小已经在140 MB左右,剩下的所有文件都只有110 MB。这使得AWS lambdas除了用于简单的“hello world”之外没有任何用处。 作为一种难看的解决方法,您可以将xgboost包存储在s3上的某个位置,然后从lambda调用例程将其复制到/tmp文件夹,并将python路径指向它。允许的tmp空间稍高一点-500MB,因此它可能会工作。
但是我不确定在lambda函数运行期间/tmp文件夹是否未被清理 考虑使用AWS ElasticBeanstalk。谢谢回复。从建筑的角度来看,这似乎是可行的。但是,我不知道如何实际实施它。在示例中,它主要是预处理,其中数据被处理并存储在管道中下一个模型可以访问的位置。在我的场景中,我希望在XGBoost端点做出预测之后运行python脚本(具有较大的依赖项)。脚本将计算变量重要性,然后最终结果(模型预测+变量重要性)将发送回API或lambda函数。如果有500MB的包,它将不适合当前aws限制下的层。即使使用层,所有层的总大小仍受当前250MB大小限制的约束。如其他地方的评论所述,此解决方案仍受250MB大小限制的约束(所有解压缩层的大小加上lambda函数)。