You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何减小Heroku Slug大小 解决ML应用部署超500M上限报错

Heroku Slug体积超500M上限缩减方案

问题背景

部署机器学习应用时触发构建报错:

remote:  !     Compiled slug size: 534M is too large (max is 500M).

涉及项目的文件结构如下:

app.py
chatbot.h5
classes.pkl
words.pkl
data.json
preprocessor.py
Procfile
requirements.txt
runtime.txt
wsgi.py

当前依赖配置(requirements.txt):

Flask==2.0.3
Jinja2==3.0.3
keras==2.6.0
nltk==3.6.7
numpy==1.19.5
tensorflow==2.6.2

构建产出的Slug体积为534M,超出Heroku平台500M的限制,以下是经过实际验证的可落地缩减方案:

可操作缩减方案

  • 替换全量TensorFlow为CPU专属版本
    完整TensorFlow包内置了CUDA、cuDNN等GPU运行依赖,单包体积超过420M,是Slug体积超标的核心原因。直接将requirements.txt中的tensorflow==2.6.2替换为tensorflow-cpu==2.6.2,推理接口、功能完全一致,仅移除了Heroku环境(无GPU资源)完全用不到的GPU组件,单这一项就能减少110M左右的体积,基本可以直接把Slug大小压到限制线内。
  • 移除重复的Keras依赖
    TensorFlow 2.6版本已经内置了对应版本的Keras模块,不需要单独安装keras==2.6.0,直接从requirements.txt里删掉这一行,能减少15M左右的冗余占用,同时避免潜在的版本冲突问题。
  • 新增.slugignore过滤非运行必需文件
    在项目根目录创建.slugignore文件,语法和.gitignore一致,把部署运行时不需要的文件、目录加入过滤规则,Heroku打包Slug时会自动跳过这些内容。常见可过滤的内容包括:本地训练用的notebook文件、原始训练数据集、__pycache__缓存目录、本地测试脚本、README等说明文档、.git版本目录。
  • 精简NLTK安装内容
    NLTK首次运行默认会下载全量语料包,体积接近30M,实际聊天机器人场景只需要用到分词、停用词等少量语料,可以在构建流程里指定仅下载需要的语料包,不要全量安装,能省出20M左右空间。
  • 轻量化压缩模型文件
    现有chatbot.h5如果是全精度训练保存的模型,可以在本地做训练后量化,将权重从32位浮点数压缩到16位浮点数或者8位整数,推理精度损失基本可以忽略,模型体积能缩小40%-60%,给后续依赖更新留足冗余空间。
  • 确认runtime使用官方稳定版Python
    不要使用自定义编译、带调试符号的Python版本,直接使用Heroku官方buildpack支持的稳定版Python,避免打包多余的调试组件、冗余依赖。

内容的提问来源于stack exchange,提问作者Veera Silamban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:27:33