首页 文章

Heroku:部署深度学习模型

提问于
浏览 797
3

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

4 回答

  • 2

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

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

  • 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仓库 . 使用"Initial commit"之类的东西提交所有内容,然后尝试仅使用一次提交到Heroku来推送此repo . 可能会是一个小得多的回购规模 .

  • 0

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

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

  • 0

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

相关问题