Model Repository

模型仓库功能的核心定义是提供一个基于 Git 的版本控制存储系统,用于机器学习模型,支持团队管理模型文件、跟踪版本,并实现跨租户协作。它利用 Git LFS 进行大文件存储,并集成 MLOps 工作流,连接模型开发与部署。

目录

优势

Git 原生版本控制

  • 通过提交/分支/标签跟踪模型变更,确保可复现性。

高速传输

  • CLI/Notebook 上传利用内网带宽。

跨租户共享

  • 共享模型可跨命名空间访问(例如 public 作为模型 Marketplace)。

无缝集成

  • 可直接从仓库部署模型到推理服务。

核心功能

模型仓库创建与删除

  • 创建带有元数据(名称/描述/可见性)的空 Git 支持仓库。
  • 删除模型前进行依赖检查(如确保无活跃推理服务)。

文件管理

  1. CLI/Git LFS
    • 使用 git lfs track 管理大文件(如 *.bin*.h5)。
    • 示例:
      git clone <model_repo_url>
      git lfs install
      cp ~/local_model/* . && git add . && git commit -m "v1.0" && git push

版本控制

  1. 分支管理
    • 维护并行版本(如 experimentalmain 分支)。
  2. 标签管理
    • 通过 UI/CLI 标记发布版本(如 git tag -a v2.0 -m "Stable release")。
  3. 元数据同步
    • 自动读取默认分支的 README.md 作为模型描述。

跨租户共享

  1. 共享模型
    • 创建时设置可见性为“Shared”以支持跨租户访问。
  2. 公共 Marketplace
    • 使用 public 命名空间发布开源模型(如 HuggingFace 转换模型)。

与 MLOps 集成

  1. 部署准备
    • 一键从标签模型版本启动推理服务。
  2. Notebook 集成
    • 直接拉取模型到 AML Notebooks 进行测试:
      !git clone https://aml-public/resnet50.git

技术说明

  1. Git LFS 要求
    • 必须包含 .gitattributes 指定 LFS 跟踪文件(如 *.zip filter=lfs diff=lfs merge=lfs)。
  2. 默认分支规则
    • README.md 元数据配置错误可能阻止推理部署。

创建模型仓库

WARNING

开始之前,请确保系统已安装 Git 和 Git LFS。

$ git lfs version

第 1 步:克隆或初始化仓库

如果已有远程仓库,执行克隆。否则可在本地初始化新的 Git 仓库。

# 方法一:克隆已有仓库
git clone <repository-url>
cd <repo-name>

# 方法二:初始化新仓库
mkdir <your-repo-name>
cd <your-repo-name>
git init
git checkout -b main # 创建并切换到 main 分支

第 2 步:初始化 Git LFS

git lfs install

第 3 步:将模型文件复制到仓库目录(可选)

# 如果有本地模型文件需要添加到仓库,复制到当前目录。

cp -r /path/to/your/model/files/* .

第 4 步:配置 Git LFS 跟踪模式(两种方式任选其一)

  1. 可主动创建 .gitattributes 文件,指定需要跟踪的文件类型。

  2. 或使用 git lfs migrate 命令自动检查并迁移大文件。

  • 选项一:通过 .gitattributes 主动跟踪(推荐新项目)

    # 该方法通过明确指定文件类型,告诉 Git LFS 需要跟踪哪些文件。
    # 适用于新项目或已明确需跟踪文件类型的场景。
    
    cat >.gitattributes <<EOL
    *.7z filter=lfs diff=lfs merge=lfs -text
    *.arrow filter=lfs diff=lfs merge=lfs -text
    *.bin filter=lfs diff=lfs merge=lfs -text
    *.bz2 filter=lfs diff=lfs merge=lfs -text
    *.ckpt filter=lfs diff=lfs merge=lfs -text
    *.ftz filter=lfs diff=lfs merge=lfs -text
    *.gz filter=lfs diff=lfs merge=lfs -text
    *.h5 filter=lfs diff=lfs merge=lfs -text
    *.joblib filter=lfs diff=lfs merge=lfs -text
    *.lfs.* filter=lfs diff=lfs merge=lfs -text
    *.mlmodel filter=lfs diff=lfs merge=lfs -text
    *.model filter=lfs diff=lfs merge=lfs -text
    *.msgpack filter=lfs diff=lfs merge=lfs -text
    *.npy filter=lfs diff=lfs merge=lfs -text
    *.npz filter=lfs diff=lfs merge=lfs -text
    *.onnx filter=lfs diff=lfs merge=lfs -text
    *.ot filter=lfs diff=lfs merge=lfs -text
    *.parquet filter=lfs diff=lfs merge=lfs -text
    *.pb filter=lfs diff=lfs merge=lfs -text
    *.pickle filter=lfs diff=lfs merge=lfs -text
    *.pkl filter=lfs diff=lfs merge=lfs -text
    *.pt filter=lfs diff=lfs merge=lfs -text
    *.pth filter=lfs diff=lfs merge=lfs -text
    *.rar filter=lfs diff=lfs merge=lfs -text
    *.safetensors filter=lfs diff=lfs merge=lfs -text
    saved_model/**/* filter=lfs diff=lfs merge=lfs -text
    *.tar.* filter=lfs diff=lfs merge=lfs -text
    *.tar filter=lfs diff=lfs merge=lfs -text
    *.tflite filter=lfs diff=lfs merge=lfs -text
    *.tgz filter=lfs diff=lfs merge=lfs -text
    *.wasm filter=lfs diff=lfs merge=lfs -text
    *.xz filter=lfs diff=lfs merge=lfs -text
    *.zip filter=lfs diff=lfs merge=lfs -text
    *.zst filter=lfs diff=lfs merge=lfs -text
    *tfevents* filter=lfs diff=lfs merge=lfs -text
    EOL
    
    # 你也可以手动添加或修改 `.gitattributes` 文件,例如:
    git lfs track "*.h5" "*.bin" "*.pt" # 跟踪指定后缀的文件
    TIP

    如果仓库中已有文件需要被 Git LFS 跟踪,建议在提交 .gitattributes 变更后执行以下命令,确保 Git 重新处理这些文件并转换为 LFS 指针:

    git add --renormalize .

  • 选项二:使用 git lfs migrate 检查并迁移(推荐已有仓库或历史文件)

    git lfs migrate 命令可查找并迁移 Git 历史中已存在但未被 LFS 跟踪的大文件。此操作会重写历史,需与协作者协调。推送重写历史时建议使用 --force-with-lease

    # 检查需要迁移的文件
    ```bash
    # 确保工作区干净
    git status
    git lfs migrate info
    
    # 迁移现有大文件到 LFS
    # 以下命令会将所有大于 100MB 的文件迁移到 Git LFS。100MB 限制基于 GitHub 推荐的文件大小限制以优化性能。
    
    git lfs migrate import --above 100MB
    TIP

    对于共享仓库:迁移前通知协作者,推送重写历史时使用: git push --force-with-lease

第 5 步:添加、提交并推送

配置好 LFS 后,将文件添加到暂存区,提交并推送到远程仓库。

# 添加所有变更,包括 `.gitattributes` 文件(如果创建)和模型文件。
git add .
git add --renormalize . # 确保所有符合 LFS 规则的文件正确标记。

# 查看当前被 LFS 跟踪的文件列表(可选)
git lfs ls-files -n

# 提交变更
# 建议配置用户名和邮箱,或确保全局已配置。
# git config --global user.name "Your Name"
# git config --global user.email "your.email@example.com"
git commit -am "Add LLM model files with Git LFS"
git push -u origin main