Heroku:部署深度学习模型

问题描述 投票:4回答:4

我使用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不是用于部署深度学习模型的正确工具?

python heroku tensorflow keras
4个回答
2
投票

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

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


1
投票

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

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

首先,尝试使用以下命令来减小repo的大小(请参阅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。可能会是一个小得多的回购规模。


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.