AWS Lambda 中的 sklearn 和 pandas

数据挖掘 scikit-学习 熊猫 aws aws-lambda
2021-10-10 03:31:06

我做了一个前端,我想对与 AWS API Gateway 接口的 AWS Lambda 进行 REST 调用。

我将我的模型作为我最初在本地训练的 pickle 文件(以及我的编码器)转储。然后我将这些文件存储在 S3 存储桶中。

问题是我无法导入 pandas 和 sklearn 等库来进行模型预测,因为 lambda 控制台无法找到它们。

有没有人有任何建议来帮助解决这个问题?

2个回答

使用将使依赖项更加可重用,并且可能更容易维护和部署。

简短的版本是:

  1. 创建一个requirements.txtfrompip freeze或类似的,如下所示:
pandas==0.23.4
pytz==2018.7
  1. 创建由 docker 运行的get_layer_packages.shbash 脚本,如下所示:
#!/bin/bash

export PKG_DIR="python"

rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR}

docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \
    pip install -r requirements.txt --no-deps -t ${PKG_DIR}
  1. 在终端中像这样运行上面的东西:
chmod +x get_layer_packages.sh
./get_layer_packages.sh
zip -r my-Python36-Pandas23.zip .

我对 python 不是很有经验,花了很多时间在压缩 pandas 和虚拟环境,并且从未真正将 docker 用于任何 IRL,但这个过程实际上比venv > zip > 我之前使用的上传过程。

您需要创建一个部署包,其中包含您要在 Lambda 中使用的包(sklearn 和 pandas)。

然后,您可以将该部署包上传到 S3 并将其导入 Lambda 函数,或者将其上传到 Lambda 函数本身。

Lambda 函数代码必须在 AWS Lambda 之外编写并包含在部署包中。这是有关如何操作的指南