Heroku部署因sentence-transformers致Slug超限,如何使用semantic_search?
解决Heroku部署sentence-transformers导致Slug超限的方案
1. 精简依赖包
- 移除requirements.txt中不必要的依赖:排查sentence-transformers间接引入但实际未用到的包,比如冗余的模型依赖、测试工具等,只保留核心功能所需项。
- 手动指定必要依赖:用
pip install --no-deps sentence-transformers跳过自动安装所有依赖,再手动添加semantic_search必需的包,如transformers、CPU版torch、numpy、scipy等,避免冗余依赖占用体积。
2. 使用轻量预训练模型
- 选择体积更小的模型:比如
all-MiniLM-L6-v2(约80MB),替换大体积模型,代码中指定加载该模型:from sentence_transformers import SentenceTransformer model = SentenceTransformer('all-MiniLM-L6-v2') - 本地加载模型:提前下载所需模型文件并压缩,放到项目的
models目录,代码中指定本地路径加载,减少构建时的下载量和slug体积。
3. 优化Heroku构建流程
- 禁用pip缓存:在
requirements.txt开头添加--no-cache-dir,避免缓存文件占用额外空间。 - 清理构建残留:在
heroku-postbuild脚本中添加清理命令,删除临时文件和冗余缓存:rm -rf ~/.cache/pip rm -rf /app/.heroku/python/lib/python3.x/site-packages/*.dist-info - 配置
.slugignore:将项目中无需打包的大文件(如日志、临时数据、未用到的模型文件)加入该文件,排除在slug之外。
4. 拆分语义搜索功能到外部服务
- 将semantic_search功能部署到专门的模型推理平台,Heroku应用通过API调用该服务完成语义搜索,无需在本地安装sentence-transformers依赖,彻底规避slug体积问题。
5. 申请Slug体积扩展
- 若以上方法均无法解决,可联系Heroku官方支持申请提升slug最大限制(默认500MB),此为付费选项。
内容的提问来源于stack exchange,提问作者user69
相关产品推荐
相关产品推荐

