我们有一个生产场景,用户调用昂贵的 NLP 函数在短时间内运行(比如 30 秒)。由于高负载和间歇性使用,我们正在研究 Lambda 函数部署。但是 - 我们的包裹很大。
我正在尝试将 AllenNLP 放入 lambda 函数中,该函数又取决于 pytorch、scipy、spacy 和 numpy 以及其他一些库。
我试过的
按照此处提出的建议和此处的示例,删除了测试和附加文件。我还使用了 Pytorch 的非 cuda 版本,它减小了它的大小。我可以将 AllenNLP 部署打包到大约 512mb。目前,这对于 AWS Lambda 来说仍然太大。
可能的修复?
我想知道是否有人对以下潜在途径之一有经验:
从 AllenNLP 中删除 PyTorch。如果没有 Pytorch,我们可以达到 250mb。我们只需要在生产中加载存档模型,但这似乎确实使用了一些 PyTorch 基础设施。也许有替代品?
在 AllenNLP(的一个分支)中调用 PyTorch 作为第二个 lambda 函数。
使用 S3 提供一些依赖项:SIM 链接一些较大的
.so
文件并从 S3 存储桶提供它们可能会有所帮助。这确实产生了一个额外的问题:我们使用 AllenNLP 的语义角色标签还需要一些大约 500mb 的语言模型,可以使用临时存储 - 但也许这些可以直接从 S3 流式传输到 RAM 中?
也许我错过了一个简单的解决方案。任何方向或经验将不胜感激!