python - 使用 CFLAGS 和 PIP 缩小 AWS Lambda 部署包以适应 sklearn

标签 python amazon-web-services scikit-learn aws-lambda pip

我正在用我的 Lambda 处理程序加载一个腌制机器学习模型,所以我需要 sklearn(如果不包括,我会得到“ModuleNotFoundError:没有名为'sklearn'的模块”)

所以我用 sklearn 在 Docker 中创建了一个新的部署包。

但是当我尝试上传新的 lambda.zip 文件时,我无法保存 lambda 函数。我收到错误:解压缩后的大小必须小于 262144000 字节

我做了一些谷歌搜索,发现了两个建议:(1) using CLFAG with PIP (2) using Lambda Layers .

我认为图层不会起作用。将我的部署包的部分移动到层不会减少总大小(AWS documentation 声明“函数的总解压缩大小并且所有层不能超过解压缩的部署包大小限制 250 MB”。

CFLAGS 听起来很有希望,但我以前从未使用过 CFLAGS,而且我遇到了错误。

我正在尝试添加标志:-Os -g0 -Wl,--strip-all
在 CLFAGS 之前,我的 docker pip 命令是:pip3 install requests pandas s3fs datetime bs4 sklearn -t ./
首先我试过:pip3 install requests pandas s3fs datetime bs4 sklearn -t -Os -g0 -Wl,--strip-all ./
这产生了各种错误“没有这样的选项:-g”

然后我尝试了CFLAGS = -Os -g0 -Wl,--strip-all pip3 install requests pandas s3fs datetime bs4 sklearn -t ./CFLAGS = -Os -g0 -Wl,--strip-all
但是他们产生了错误“CFLAGS:找不到命令”

谁能帮我理解如何使用 CFLAGS?

另外,我很熟悉“乞丐不能选择”这句话,所以任何建议都将不胜感激。

也就是说,我有 pip 菜鸟,所以如果你能在我的 Docker 部署包工作流程的上下文中帮助我使用 CFLAGS,将不胜感激。

我的 docker 工作流程是:

  • docker run -it olivierhervieu/amazonlinux-python36-onbuild
  • mkdir 部署
  • cd部署
  • pip3 安装请求 pandas s3fs 日期时间 bs4 sklearn -t ./
  • zip -r lambda.zip *
  • 最佳答案

    这有 pip 像是一个答案(我能够缩小我的部署包并部署我的 Lambda)并且有 pip 不是一个答案(我仍然不知道如何使用 CFLAGS)。

    大量谷歌搜索最终导致我找到 this article其中包括指向 this list of modules 的链接预安装在 AWS Lambda Python 环境中。

    我的部署包包含几个已经存在于 AWS Lambda 环境中的模块,因此不需要包含在部署包中。

    为我节省最多空间的模块是 Boto3 和 Botocore。我没有在我的 Docker 环境中明确添加这些,但它们还是进入了我的部署包(我猜 S3FS 依赖于这些模块,并且在安装 S3FS 时它们也被添加)。

    我还能够删除许多较小的模块(datetime、dateutil、docutils、6 等)。
    删除这些模块后,我的包低于 250mb 限制,我能够部署。

    如果我仍然没有达到限制 - 我不确定这是否足够 - 我将尝试上面链接文章中的另一个建议:从部署包中删除 .py 文件(你不需要 .pyc 和.py 文件)。

    希望这对您的 Lambda 部署包大小有所帮助!

    关于python - 使用 CFLAGS 和 PIP 缩小 AWS Lambda 部署包以适应 sklearn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60570007/

    相关文章:

    python - 在 Python 数组的索引之间搜索值

    python - cmap 和颜色列表之间的区别

    mysql - 间歇性无法连接到 AWS RDS 上的 mysql(错误 2003)

    python - 这个命令 "preprocessing.scale"在数学方面如何做?

    python - 'spherical' sklearn的GaussianMixture模型与执行k-means相同吗?

    python - Django 查询 - 按共同标签排序

    python - 运行 setup.py 测试时子包出现 ImportError

    amazon-web-services - 是否可以选择要在 DynamoDB 中返回的字段?

    amazon-web-services - DynamoDB 吞吐量变化

    machine-learning - 如何使用 sklearn 中的 isomap 进行高维空间降维