Heroku:部署深度学习模型

时间:2018-02-17 09:52:38

标签: python heroku tensorflow keras

我使用Flask开发了一个rest API来公开Python Keras深度学习模型(用于文本分类的CNN)。我有一个非常简单的脚本,它将模型加载到内存中并输出给定​​文本输入的类概率。 API在本地完美运行。

然而,当我git push heroku master时,我得到Compiled slug size: 588.2M is too large (max is 500M)。该模型的大小为83MB,对于深度学习模型来说这是非常小的。值得注意的依赖包括Keras及其tensorflow后端。

我知道你可以在Heroku上使用GB的RAM和磁盘空间。但瓶颈似乎是段塞尺寸。有没有办法规避这个?或者Heroku不是用于部署深度学习模型的正确工具?

7 个答案:

答案 0 :(得分:2)

根据其他人的建议,我要检查的第一件事是找出为什么你的回购是如此之大,因为模型尺寸只有83MB。

鉴于你无法减小尺寸,可以选择卸载部分回购,但要做到这一点,你仍然需要知道哪些文件占用了空间。在heroku文档中建议卸载。 Slug大小限制为500MB,如下所述:https://devcenter.heroku.com/articles/slug-compiler#slug-size我认为这与在需要更改资源时启动新实例所需的时间有关。但是,如果您有特别大的文件,则可以使用卸载。有关卸载的更多信息:https://devcenter.heroku.com/articles/s3

答案 1 :(得分:2)

许多这样的答案对于减小子弹大小非常有用,但是如果仍然有人在将深度学习模型部署到heroku时遇到问题,请务必注意,无论出于何种原因,tensorflow 2.0的大小约为500MB,而早期版本的大小则小得多。使用早期版本的tensorflow可以大大减小子弹大小。

答案 2 :(得分:2)

您可以减小模型大小并使用更小的 tensorflow-cpu(Python 3.8 为 144MB)

pip install tensorflow-cpu

https://pypi.org/project/tensorflow-cpu/#files

答案 3 :(得分:1)

此答案假设您的模型仅为83MB,并且您的存储库目录的总大小(可能小得多)小于500MB。

可能存在一些问题,但您需要做的就是将git存储库减少到500MB以下。

首先,尝试使用以下命令减少回购的大小(请参阅this blog post以供参考):

heroku plugins:install heroku-repo
heroku repo:gc --app your-app-name
heroku repo:purge_cache --app your-app-name

这些可能会解决您的问题。

另一个潜在的问题是,您在某个时候提交了另一个(大型)模型,并在后续提交中将其从您的仓库中删除。 git repo现在在.git文件夹和git历史记录中包含该模型的一个版本。对此有一些修复,但如果您不需要提交历史记录,则可以将repo复制到另一个文件夹并使用git init创建一个新的git仓库。用“"初始提交"然后尝试只用一次提交到Heroku来推送这个repo。可能这将是一个小得多的回购规模。

答案 4 :(得分:0)

作为资源,您可以访问Heroku Slug Compiler帮助页面。

拥有83MB的型号并不意味着它一直是83MB。由于软件包在被推送到Heroku时正在编译,这显然会占用更多的slug空间,因此应用程序可以使用这些软件包。最好的解决方案可能是将大型资产放入像AWS S3这样的容器或其他任何好的容器中。或者最糟糕的是使用不同的云服务。

答案 5 :(得分:0)

我想说Heroku不是部署深度学习模型本身的正确工具。为此,您可以考虑使用专用于深度学习的平台即服务,例如Floydhub。 您也可以在Floydhub上部署Flask REST API。

答案 6 :(得分:0)

Heroku 是一个非常好的云平台来部署您的应用程序,但如果您有一个深度学习模型,即需要使用大型 CNN/深度学习模型进行预测的应用程序,那么该云平台不适合。您可以尝试其他云平台,例如 AWS、Amazon Sagemaker、MS Azure、IBM Watson。

我遇到了同样的问题,花了几天后我才知道是 tensorflow 库导致​​了这个 slug 开销。

我使用 requirements.txt 文件中的 1 行解决了这个问题:

tensorflow-cpu==2.5.0

代替

tensorflow==2.5.0

您可以使用任何更新的 tensorflow 库版本。详细了解 tensorflow-cpu here