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

除Git LFS外,如何上传超100MB的Pickle模型至GitHub?Streamlit修复求助

解决GitHub大Pickle模型文件上传及Git LFS额度耗尽后的Streamlit部署问题

一、替代Git LFS的大Pickle模型上传方法

  • 模型压缩
    用Python的gzip或zlib模块压缩Pickle文件,大幅减小体积,若压缩后小于100MB可直接提交到仓库。示例代码:

    import pickle
    import gzip
    
    # 压缩保存模型
    with gzip.open('model.pkl.gz', 'wb') as f:
        pickle.dump(trained_model, f)
    
    # 加载压缩后的模型
    with gzip.open('model.pkl.gz', 'rb') as f:
        model = pickle.load(f)
    
  • 模型拆分存储
    将大模型拆分为多个小文件(每个小于100MB),加载时合并。示例代码:

    import pickle
    import os
    
    # 拆分保存模型
    def split_save_model(model, chunk_size=90*1024*1024):  # 按90MB每块拆分
        data = pickle.dumps(model)
        chunks = [data[i:i+chunk_size] for i in range(0, len(data), chunk_size)]
        for idx, chunk in enumerate(chunks):
            with open(f'model_chunk_{idx}.pkl', 'wb') as f:
                f.write(chunk)
    
    # 合并加载模型
    def load_split_model():
        chunks = []
        idx = 0
        while os.path.exists(f'model_chunk_{idx}.pkl'):
            with open(f'model_chunk_{idx}.pkl', 'rb') as f:
                chunks.append(f.read())
            idx += 1
        data = b''.join(chunks)
        return pickle.loads(data)
    
  • 外部存储+仓库存下载脚本
    将模型上传至公开的云存储服务,仓库中仅保留自动下载模型的脚本,应用启动时自动拉取模型。示例脚本:

    import requests
    import os
    
    MODEL_URL = "你的模型公开下载链接"
    MODEL_PATH = "model.pkl"
    
    if not os.path.exists(MODEL_PATH):
        response = requests.get(MODEL_URL)
        with open(MODEL_PATH, 'wb') as f:
            f.write(response.content)
    

二、Git LFS额度耗尽后的Streamlit Cloud修复方案

  • 替换LFS模型文件为本地可提交版本

    1. 移除LFS对模型文件的跟踪:
      git lfs untrack "model.pkl"
      
    2. 用压缩或拆分方法处理模型文件,将处理后的文件添加到仓库:
      git add model.pkl.gz  # 或拆分后的chunk文件
      git commit -m "Replace LFS model with compressed version"
      git push
      
    3. 修改Streamlit项目代码,改为加载压缩/拆分后的模型文件,重新部署。
  • 修改Streamlit应用的模型加载逻辑
    更新应用代码,改为从外部公开存储下载模型(参考上述外部存储脚本示例),确保模型链接可公开访问。推送更新后的代码到GitHub,Streamlit Cloud会自动重新部署。

  • 清理仓库的LFS历史
    若仓库历史中大量LFS文件占用额度,用git filter-repo彻底移除相关文件历史:

    git filter-repo --path model.pkl --invert-paths
    

    执行后强制推送更新仓库:

    git push --force
    

    之后改用压缩、拆分或外部存储的方式管理模型文件。

内容的提问来源于stack exchange,提问作者Aditya Kelkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:48:25