如何规避大型软件包+大型模型的AWS软件包和临时限制

时间:2020-01-16 14:23:46

标签: python aws-lambda pytorch allennlp

我们有一个生产场景,用户调用了昂贵的NLP功能,这些功能在短时间内(例如30秒)运行。由于高负载和间歇使用,我们正在研究Lambda函数部署。但是-我们的包裹很大。

我试图将AllenNLP装入lambda函数中,该函数又取决于pytorch,scipy,spacy和numpy以及其他一些库。

我尝试过的事情

按照here和示例here的建议,测试和其他文件被删除。我还使用了Pytorch的非cuda版本,可减小其尺寸。我可以将AllenNLP部署打包到大约512mb。目前,对于AWS Lambda而言,这仍然太大了。

可能的解决方法?

我想知道是否有人有以下潜在途径之一的经验:

  1. 从AllenNLP中切出PyTorch。没有Pytorch,我们可以将其扩展到250mb。我们只需要在生产中加载存档的模型,但这似乎确实使用了一些PyTorch基础架构。也许还有其他选择?

  2. 在AllenNLP的一个分支中调用PyTorch作为第二个lambda函数。

  3. 使用S3交付某些依赖项:SIMlink链接一些较大的.so文件并从S3存储桶提供服务可能会有所帮助。这确实带来了另一个问题:我们从AllenNLP使用的Semnatic角色标签还需要一些大约500mb的语言模型,可以使用这些语言模型的临时存储-但也许可以将这些模型直接从S3流式传输到RAM中?

也许我缺少一个简单的解决方案。任何方向或经验将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以将模型部署到AWS内的SageMaker,然后运行Lambda-> Sagemaker以避免必须在Lambda内加载非常大的功能。

此处说明的架构-https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/