如何使用AWS Lambda部署大型python包?

时间:2018-05-24 07:53:54

标签: python amazon-web-services tensorflow aws-lambda serverless-framework

我需要一些建议。

我使用Tensorflow训练了一个图像分类器,并希望使用serverless将其部署到AWS Lambda。该目录包括模型,一些python模块,包括tensorflow和numpy,以及python代码。解压缩前完整文件夹的大小为340 MB,AWS lambda会拒绝该文件,并显示错误消息"The unzipped state must be smaller than 262144000 bytes"

我该如何处理?我可以不在AWS Lambda上部署这样的软件包吗?

注意:在requirements.txt文件中,列出了2个模块,包括numpy和tensorflow。 (Tensorflow是一个很大的模块)

3 个答案:

答案 0 :(得分:0)

您可以使用限制为512Mb的临时磁盘容量(/ tmp),但在您的情况下,内存仍然是个问题。

最佳选择可以是使用AWS批次,如果无服务器无法管理,您甚至可以保留lambda来触发批次

答案 1 :(得分:0)

最好的方法是使用Serverless Framework中概述的this article。它有助于使用模仿亚马逊Linux环境的docker映像对它们进行压缩。此外,它会自动使用S3作为Lambda的代码存储库,这会增加大小限制。提供的文章是非常有用的指南,并且与开发人员在AWS上使用tensorflow和其他大型库的方式相同。

如果仍然遇到250MB的大小限制,则可以尝试遵循this article,它使用与上一篇文章相同的python-requirements-plugin,但带有选项-slim: true。这将帮助您通过从文件中删除不必要的文件来最佳地压缩文件包,从而使您可以在解压缩之前和之后减小文件包的大小。

答案 2 :(得分:0)

我知道我回答得很晚..只是把它放在这里供其他人参考。 我做了以下事情-

  1. 按照建议here删除/ external / * / tensorflow / contrib / * / tensorflow / include / unsupported / *文件。
  2. 将所有.so文件(尤其是两个文件)打包在site-packages / numpy / core中-_multiarray_umath.cpython-36m-x86_64-linux-gnu.so和_multiarray_tests.cpython-36m-x86_64-linux-gnu.so。条带大大减小了它们的尺寸。
  3. 您可以将模型放入S3存储桶中,然后在运行时下载。这将减小拉链的大小。 here对此进行了详细说明。

如果这不起作用,那么还有其他一些事情可以完成,例如删除here

中的pyc文件等。