Zappa Update 可以与 Zappa Package 的输出包一起使用吗?

Can Zappa Update be used with the output package from Zappa Package?

我正在尝试使用 Zappa 在 AWS lambda 上加载模型。问题是 Zappa 创建并上传到 S3 的包的总解压缩文件大小约为 550mb,超出了限制。我使用的包之一是 Spacy(一个非常大的 NLP 依赖项),我可以通过手动删除 lang 文件夹中未使用的语言来减小这个包的大小。这样做我可以获得小于 500mb 的解压缩文件大小。问题是 Zappa 在部署和更新时自动下载完整的 Spacy 版本(spacy==2.1.4:使用本地缓存的 manylinux wheel)。

我知道我可以调用 Zappa Package,它会生成一个包,然后我可以自己上传。我所做的是解压缩生成的包并删除不必要的 lang 文件,然后我将其压缩回来。我可以调用 Zappa Deploy/Update 并使用由 Zappa Package 创建的修改后的包和处理程序吗?这样 Zappa 仍然可以处理部署。

对我来说,以下两件事解决了这个问题:

  1. AWS Lambda 要求您的环境的最大大小为 50mb,但我们打包的环境将在 100mb 左右。对我们来说幸运的是,Lambda 可以从 Amazon S3 加载代码而不会造成太大的性能损失(仅几毫秒)。

要激活此功能,您必须在 zappa_settings.json

中添加一个新行
"slim_handler": true
  1. 只安装 spacy 和 语言包 (python3 -m spacy download en)。之后,我手动将语言包上传到 S3,然后加载 spacy 语言 "model" 类似于此处所述:

这是我解决问题的方法,有两种方法:

  1. 首先是简单地将依赖文件夹从 site-packages 目录到根文件夹,然后制作任何 那里的修改。这将强制 zappa 在上传
  2. 依赖项的 linux 版本上不下载轮子
  3. 更简单的解决方案是删除 *dist 文件夹 您修改的特定模块。删除它会迫使 zappa 绕过 linux 上的 wheels 重新下载模块;这意味着您修改的模块将在部署期间打包。