Tensorflow 应用程序不再部署到 Heroku:Slug 尺寸太大

Posted

技术标签:

【中文标题】Tensorflow 应用程序不再部署到 Heroku:Slug 尺寸太大【英文标题】:Tensorflow Apps No Longer Deploying To Heroku: Slug Size Too Large 【发布时间】:2021-04-17 00:52:09 【问题描述】:

我有许多 Heroku 应用程序,直到最近我才能够无缝更新。它们使用 tensorflow 和 streamlit,并且在部署时都发出类似的消息:

-----> Compressing...
remote:  !     Compiled slug size: 560.2M is too large (max is 500M).
remote:  !     See: http://devcenter.heroku.com/articles/slug-size
remote:
remote:  !     Push failed
remote:  !
remote:  ! ## Warning - The same version of this code has already been built: 5c0f686a86459f6e81627ce14770f7494f4bd244
remote:  !
remote:  ! We have detected that you have triggered a build from source code with version 5c0f686a86459f6e81627ce14770f7494f4bd244
remote:  ! at least twice. One common cause of this behavior is attempting to deploy code from a different branch.
remote:  !
remote:  ! If you are developing on a branch and deploying via git you must run:
remote:  !
remote:  !     git push heroku <branchname>:main
remote:  !
remote:  ! This article goes into details on the behavior:
remote:  !   https://devcenter.heroku.com/articles/duplicate-build-version
remote:
remote: Verifying deploy...
remote:
remote: !       Push rejected to dry-caverns-08193.
remote:
To https://git.heroku.com/dry-caverns-08193.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/dry-caverns-08193.git'

我知道它说 slug 太大,但它们之前运行过相同的消息,所以我不确定这是什么问题。

这是我的文件设置:

app.py
Procfile
requirements.txt
setup.sh
my_model/
  -- assets/
  -- variables/
       -- variables.index
       -- variables.data-00000-of-000001
  saved_model.pb

requirements.txt 内容如下:

tensorflow==2.*
streamlit==0.67.0
requests==2.24.0
requests-oauthlib==1.3.0

setup.sh 内容如下:

mkdir -p ~/.streamlit/
echo "\
[general]\n\
email = \"myemail@gmail.com\"\n\
" > ~/.streamlit/credentials.toml
echo "\
[server]\n\
headless = true\n\
enableCORS=false\n\
port = $PORT\n\
" > ~/.streamlit/config.toml

我的直接怀疑是 tensorflow 导致 slug 大小过大 - 但之前它再次与 tensorflow 一起工作,所以我不确定为什么它现在不能工作。

还有什么可能吗?

编辑:

查看此问题后:Heroku: If you are developing on a branch and deploying via git you must run: 我尝试了git push heroku master:main,但在日志中显示以下内容时不起作用:

Push rejected to dry-caverns-08193.
remote:
To https://git.heroku.com/dry-caverns-08193.git
 ! [remote rejected] master -> main (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/dry-caverns-08193.git'

【问题讨论】:

【参考方案1】:

如果您使用的是免费测功机:

更改requirements.txt:

tensorflow-cpu

而不是

tensorflow

这将大大减少您的 slug 大小

此外,您的问题也可能取决于模型重量大小

另一个提示:

如果您直接从 GitHub 拉取代码,请使用 `.slugignore' 文件,这样您就可以忽略 README 到 GitHub Actions 到笔记本等任何内容,以免被添加到您的 Dyno 中

【讨论】:

在 tensorflow-cpu 中,缺少 tensorflow.keras 模块,使用时也会出现很多导入错误【参考方案2】:

我还没有彻底测试过这个,只是把它放在这里以防它对某人有帮助。

我有许多超过 500MB slug 大小限制的应用程序。它警告,但当我这样做时不会出错。这可能是因为我不是免费计划,而是付费计划。因此,如果有人急于让它工作,并且无法以任何其他方式将 slug 大小减小到 500MB 以下,那么为该应用程序采用最低付费计划可能是一个可行的解决方案。

【讨论】:

以上是关于Tensorflow 应用程序不再部署到 Heroku:Slug 尺寸太大的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TensorFlow 模型部署到云端?

使用 JAX 构建强化学习 agent,并借助 TensorFlow Lite 将其部署到 Android 应用中

使用 JAX 构建强化学习 agent,并借助 TensorFlow Lite 将其部署到 Android 应用中

升级到 .NET 4.5 和 EF5。不再能够部署 WCF 服务。

如何将 MEAN Stack 部署到网络主机

将在 tensorflow 中训练的神经网络部署到 Torch C++ 的最佳方法是啥?