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

如何在Heroku免费500MiB slug限制内部署TensorFlow模型?

可行方案说明

完全可以在Heroku免费计划的500MiB slug限制内部署该应用,核心思路是缩小依赖体积、优化模型大小,以下是可落地的操作步骤:

1. 替换大体积的TensorFlow依赖

  • 不要直接依赖全量tensorflow==2.6.0,该包解压后体积超过300MiB,优先替换为仅支持CPU推理的tensorflow-cpu==2.6.0,体积可缩小60%以上,Heroku免费dyno本身无GPU资源,CPU版完全不影响推理使用。
  • 如果需要进一步压缩体积,可使用tflite-runtime替代完整TensorFlow:先把你的SavedModel格式模型转换为TFLite格式,转换参考代码如下:
import tensorflow as tf
# 替换为你本地SavedModel的存储路径
saved_model_dir = "./saved_model"
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
# 开启量化优化进一步缩小模型体积
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
    f.write(tflite_model)

tflite-runtime包体积仅几十MiB,加上转换后的TFLite模型通常仅几到几十MiB,仅这一步就能把整体占用压缩到200MiB以内。

2. 清理冗余内容压缩slug体积

  • 你的requirements.txt仅保留必须依赖:比如做API用的FastAPI/Flask、处理图片用的pillow、tflite-runtime或tensorflow-cpu、处理请求用的python-multipart即可,删除所有开发类依赖比如jupyter、matplotlib、未用到的科学计算库等。
  • 新增.slugignore文件排除不需要打包进slug的内容,语法和.gitignore一致,可排除的内容包括训练数据集、日志文件、.git目录、本地测试图片、冗余文档等。

3. API实现逻辑优化

处理base64图片输入的流程无需额外依赖:

  1. 接收POST请求中的base64字符串,先去掉标识前缀(比如data:image/jpeg;base64,部分)
  2. 用Python内置base64库解码为字节流,再用Pillow转换为模型要求的输入张量尺寸
  3. 调用加载好的TFLite解释器/TensorFlow模型完成推理,返回分类结果即可
  • 推荐用FastAPI搭配Uvicorn实现接口,比Flask更轻量,启动速度更快,更适配Heroku免费dyno的冷启动场景。

实测参考

采用TFLite + FastAPI的组合,包含模型在内的整个应用slug大小通常在150~300MiB区间,完全符合500MiB的免费计划限制。

内容的提问来源于stack exchange,提问作者Hari Krishnan U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:00:02