【问题标题】:Deploy python app to Heroku "Slug Size too large"将 python 应用程序部署到 Heroku “Slug Size too large”
【发布时间】:2020-07-18 14:22:33
【问题描述】:

我正在尝试将用 python 编写的 Streamlit 应用程序部署到 Heroku。我的整个目录是 4.73 MB,其中 4.68 MB 是我的 ML 模型。我的requirements.txt 看起来像这样:

absl-py==0.9.0
altair==4.0.1
astor==0.8.1
attrs==19.3.0
backcall==0.1.0
base58==2.0.0
bleach==3.1.3
blinker==1.4
boto3==1.12.29
botocore==1.15.29
cachetools==4.0.0
certifi==2019.11.28
chardet==3.0.4
click==7.1.1
colorama==0.4.3
cycler==0.10.0
decorator==4.4.2
defusedxml==0.6.0
docutils==0.15.2
entrypoints==0.3
enum-compat==0.0.3
future==0.18.2
gast==0.2.2
google-auth==1.11.3
google-auth-oauthlib==0.4.1
google-pasta==0.2.0
grpcio==1.27.2
h5py==2.10.0
idna==2.9
importlib-metadata==1.5.2
ipykernel==5.2.0
ipython==7.13.0
ipython-genutils==0.2.0
ipywidgets==7.5.1
jedi==0.16.0
Jinja2==2.11.1
jmespath==0.9.5
joblib==0.14.1
jsonschema==3.2.0
jupyter-client==6.1.1
jupyter-core==4.6.3
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
kiwisolver==1.1.0
Markdown==3.2.1
MarkupSafe==1.1.1
matplotlib==3.2.1
mistune==0.8.4
nbconvert==5.6.1
nbformat==5.0.4
notebook==6.0.3
numpy==1.18.2
oauthlib==3.1.0
opencv-python==4.2.0.32
opt-einsum==3.2.0
pandas==1.0.3
pandocfilters==1.4.2
parso==0.6.2
pathtools==0.1.2
pickleshare==0.7.5
Pillow==7.0.0
prometheus-client==0.7.1
prompt-toolkit==3.0.4
protobuf==3.11.3
pyasn1==0.4.8
pyasn1-modules==0.2.8
pydeck==0.3.0b2
Pygments==2.6.1
pyparsing==2.4.6
pyrsistent==0.16.0
python-dateutil==2.8.0
pytz==2019.3
pywinpty==0.5.7
pyzmq==19.0.0
requests==2.23.0
requests-oauthlib==1.3.0
rsa==4.0
s3transfer==0.3.3
scikit-learn==0.22.2.post1
scipy==1.4.1
Send2Trash==1.5.0
six==1.14.0
sklearn==0.0
streamlit==0.56.0
tensorboard==2.1.1
tensorflow==2.1.0
tensorflow-estimator==2.1.0
termcolor==1.1.0
terminado==0.8.3
testpath==0.4.4
toml==0.10.0
toolz==0.10.0
tornado==5.1.1
traitlets==4.3.3
tzlocal==2.0.0
urllib3==1.25.8
validators==0.14.2
watchdog==0.10.2
wcwidth==0.1.9
webencodings==0.5.1
Werkzeug==1.0.0
widgetsnbextension==3.5.1
wincertstore==0.2
wrapt==1.12.1
zipp==3.1.0

当我将我的应用推送到 Heroku 时,消息是:

remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:  !     Compiled slug size: 623.5M is too large (max is 500M).
remote:  !     See: http://devcenter.heroku.com/articles/slug-size
remote:
remote:  !     Push failed

我的蛞蝓尺寸怎么会太大?是要求的大小吗?那么到底如何将使用 tensorflow 的 python 应用程序部署到 Heroku 呢? 感谢您的帮助!

【问题讨论】:

  • Tensorflow 可以在 Heroku 上运行。对于非常小的应用程序,它可以是好的,但在运行时你会遇到内存问题。您可以通过为 Heroku 服务付费来解决内存问题,从而获得更多 RAM。产生的蛞蝓大小是正常的。机器学习很复杂,需要大量代码。它在运行时变得更大。
  • 我建议检查您的构建脚本生成的 Heroku Slug。可能会意外遗留大文件/文件夹(例如大型项目的 .git 文件夹

标签: python tensorflow heroku tensorflow2.0


【解决方案1】:

我已经回答了这个here

Tensorflow 2.0 模块非常大(超过 500MB,Heroku 的限制),因为它支持 GPU。由于 Heroku 不支持 GPU,所以安装支持 GPU 的模块是没有意义的。

解决方案:

只需在您的要求中将 tensorflow 替换为 tensorflow-cpu

这对我有用,希望它也对你有用!

【讨论】:

  • 太好了。我正在按小时处理 slug 大小,但只是在要求中将“tensorflow”更改为“tensorflow-cpu”,md 减少了 200 md。谢谢你!
  • 工作就像一个魅力!非常感谢。
  • 这救了我的命。我之前使用的是 Tensorflow 2.4.x,它的大小接近 500 MB。转到tensorflow-cpu,只有 144 MB
  • 嗨,我只需要更新 requirements.txt 中的 tensorflow 吗?当我在本地安装 tensorflow 时,会自动安装一些其他的,例如 tensorboard、tensorboard-data-server、tensorboard-plugin-wit 等
  • 你的梦想应该成真。谢谢@SuryaChereddy
【解决方案2】:

只需执行以下操作将您的 TensorFlow 版本替换为 2.0.0:
tensorflow==2.0.0
它有一个更轻的 whl 文件,并且适合您的内存限制。 此外,您可以使用 1.7.0 或 1.5.0 版本。

【讨论】:

  • 我得到 No matching distribution found for tensorflow==2.0.0
【解决方案3】:

只需使用tensorflow 版本1.14,因为它的大小几乎是 tf2.0+ 的一半,并且用于大多数用途。
在我的情况下,slug 的大小几乎从tf1.14(580MB) 减少了一半,而不是tf.2.1(280MB)

【讨论】:

    【解决方案4】:

    requirements.txt 文件中,我将tensorflow==2.6.0 替换为tensorflow-cpu==2.6.0,它运行良好

    【讨论】:

      【解决方案5】:

      这意味着下载后您的所有需求总计高达 600mb,但您只有 500mb 的内存

      【讨论】:

      • 是的,我知道。但我问是否有任何其他可能性将 Tensorflow 应用程序部署到 Heroku,如果依赖项本身会杀死 Slug 大小,则无需付费,但显然不是
      猜你喜欢
      • 2021-07-01
      • 2012-07-16
      • 2020-07-09
      • 2018-09-16
      • 2012-11-22
      • 2015-12-25
      • 2015-02-27
      • 2018-04-06
      相关资源
      最近更新 更多