使用Git LFS托管大体积ML模型后Heroku部署的模型调用问题
Heroku 部署Git LFS托管大体积ML模型解决方案
.gitattributes是Git层面的配置文件,不需要在业务代码中直接调用,它的作用仅为标记哪些文件走LFS规则托管,你可以直接在代码中按模型的实际存储路径加载文件即可,核心需要解决的是Heroku部署时能拉取到LFS存储的真实模型文件,而非LFS指针文件。
1. 确认本地Git LFS配置生效
- 本地执行
git lfs ls-files,确认目标模型文件出现在输出列表中,且标记为*(代表已被LFS追踪) - 检查项目根目录下的.gitattributes文件,是否存在匹配模型文件的规则,例如下方为追踪所有pth格式模型的规则:
*.pth filter=lfs diff=lfs merge=lfs -text - 本地直接按相对路径加载模型调试,确保代码运行正常,Python示例如下:
import torch # 直接填写模型的实际存储路径即可,无需操作.gitattributes文件 model = torch.load("./models/pretrained_model.pth")
2. 配置Heroku支持拉取LFS文件
Heroku默认构建流程不会拉取LFS托管的真实文件,需要额外配置构建规则:
- 给你的Heroku应用添加Git LFS构建包,执行命令:
heroku buildpacks:add https://github.com/raxod502/heroku-buildpack-git-lfs.git -a 你的Heroku应用名称 - 在Heroku应用的环境变量配置页添加两个变量:
HEROKU_GIT_LFS_REPO:填写你的代码仓库HTTPS地址HEROKU_GIT_LFS_TOKEN:生成代码托管平台的个人访问令牌,勾选仓库读取权限即可,用于授权拉取LFS文件
3. 规避Heroku slug大小限制
Heroku的应用编译产物(slug)最大限制为500MB,你的858MB模型已经超过该阈值,就算配置好LFS也会触发部署失败,可选择以下任意一种方案解决:
- 对模型做压缩处理:通过量化、剪枝、蒸馏等手段将模型体积压缩到500MB以内
- 改用外部存储托管模型:将模型上传到对象存储服务,应用启动时动态拉取到临时目录或者直接加载到内存使用,不占用slug存储空间
4. 部署后校验
可以在应用启动逻辑中加入模型文件校验逻辑,避免拉取到LFS指针文件导致报错:
import os model_path = "./models/pretrained_model.pth" # 按你实际模型大小调整阈值,这里为800MB的字节数 if os.path.getsize(model_path) < 800 * 1024 * 1024: raise RuntimeError("模型未正常拉取,当前仅获取到LFS指针文件")
校验通过后即可正常调用模型处理GET请求返回结果。
内容的提问来源于stack exchange,提问作者Somal Chakraborty
相关产品推荐
相关产品推荐

