1

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

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

我试过的

按照此处提出的建议和此处的示例,删除了测试和附加文件。我还使用了 Pytorch 的非 cuda 版本,它减小了它的大小。我可以将 AllenNLP 部署打包到大约 512mb。目前,这对于 AWS Lambda 来说仍然太大。

可能的修复?

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

  1. 从 AllenNLP 中删除 PyTorch。如果没有 Pytorch,我们可以达到 250mb。我们只需要在生产中加载存档模型,但这似乎确实使用了一些 PyTorch 基础设施。也许有替代品?

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

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

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

4

1 回答 1

2

您可以将模型部署到 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/

于 2020-01-16T15:36:45.490 回答