加载中...

如何免费扩容 Github 的 LFS 到 100G


0x00 前言

早在《Git-LFS 的使用和迁移笔记》中我们已经说过,Github 的 LFS 每月只有少量免费额度供用户使用,一旦超额,仓库就会被限制检出。

在 21 年的时候,Github LFS 的免费额度有 1G,现在免费额度下降到了 500M,而且还是和 Packages 存储空间共用的:

要想扩容,只能购买资源包,一个资源包提供 50G ,每个月需要支付 $5 。

很多时候我们的工程只有少量的几个大文件, 500M 不够、50G 又太多,最重要的是不想浪费每个月 $5 去供养这几个文件,该怎么办呢?

0x10 妥协的方案

Github 规定,单个文件 > 100M 则定义为大文件,需要使用 LFS 管理,但是 LFS 免费空间只有 500M (单个账号、不是单个仓库)。

因此很多时候为了妥协这个限制,我们尽量不让文件超过 100M:

  • 可以解压的: 解压成一堆小文件
  • 不能解压的: 分卷压缩成不大于 100M 的卷

往往程序还要写一些额外的逻辑去兼容这些小文件的处理。

有没有不妥协的方法呢?

0x20 免费扩容 LFS

其实是有的。

随着近年 AI 的爆火,作为模型训练、托管平台的 Hugging Face 开始被熟知。

Hugging Face 基于 Git 来管理 模型、数据集和应用,有点类似于 GitHub:

对比项 Hugging Face GitHub
用途 存储 AI 资源(模型、数据集、应用) 存储 代码项目
版本控制 基于 Git 基于 Git
支持 Git LFS ✅(适合大文件) ✅(有限制)
存储对象 .ckpt.safetensors.bin.json .py.cpp.java.md
主要用户 AI 开发者、研究人员 代码开发者

因为 Hugging Face 主要托管的是 AI 模型、而不是代码,每个 AI 模型动辄都有几 G,因此它给到的 LFS 免费额度比 Github 大方得多,每个账号有 100G 上限,而且还能用于私有仓库:

又由于 Hugging Face 也是基于 Git 做版本管理的,因此我们只需:

  1. 新建一个 Hugging Face 的 Model 或 Dataset 仓库
  2. 然后以 Git 子模块方式嵌入到 Github 仓库中
  3. Github 主工程管理代码、Hugging Face 子工程管理 LFS

这样就可以实现 Github 仓库 LFS 的免费扩容。

Hugging Face 的 LFS 没有限制大文件的类型,不是模型文件也是可以的

0x30 实例

0x31 创建仓库

这里我创建了两个示例仓库:

0x32 配置 ssh 连接

因为涉及大文件传输,建议本地都通过 ssh 访问两个仓库,详细可参考《Github 一机多号配置》。

最终 ~/.ssh/config 的配置中应该有以下配置以指定 ssh 私钥:

Host github.com
    User ${Github.Account.email}
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    Port 443

Host huggingface.co
    User ${Huggingface.Account.email}
    Hostname hf.co
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    Port 443

所有账号都配置好后,在本地终端执行命令:

ssh -T git@github.com
ssh -T git@hf.co

0x33 配置 ssh 代理

这两个平台在国内除了 Github 的 ssh,其实都被墙了:

平台 HTTP 访问 SSH 访问
GitHub ❌(被墙) ✅(可用)
Hugging Face ❌(被墙) ❌(被墙)

因此我们还需要在 ~/.gitconfig 至少配置 git 的 ssh 代理:

# [http]
#     proxy = socks5://127.0.0.1:10089
# [https]
#     proxy = socks5://127.0.0.1:10089
[git]
    proxy = socks5://127.0.0.1:10089

详细可参考《Github Desktop 代理设置》和《trojan 睁眼看世界教程》。

0x34 初始化仓库

网络环境配置好之后,先拉取 Github 仓库到本地:

git clone git@github.com:EXP/Demo-Code.git

然后以子工程的形式、拉取 Hugging Face 仓库:

cd Demo-Code
git submodule add git@hf.co:datasets/EXP/Demo-LFS.git

0x35 安装 Git LFS

在 Hugging Face 子工程中安装 LFS:

cd Demo-LFS
git lfs install

0x36 跟踪大文件

最后在 Hugging Face 仓库中,指定需要 LFS 跟踪的文件格式,譬如我指定的大文件格式为 *.grf

git lfs track "*.grf"
echo "*.grf" >> .gitattributes

此后 .gitattributes 就会把每一个 *.grf 文件都作为大文件进行跟踪:

随后就可以用 git commitgit push 命令和正常代码一样去上传大文件了。

在 Hugging Face 的 Demo-LFS 仓库中,还可以通过 Settings -> Storage Usage -> List LFS files 管理已托管到 LFS 中的大文件:

0xF0 参考文档


文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
 上一篇
如何使用 iPad 进行开发 如何使用 iPad 进行开发
本文探讨了如何在 iPad 上进行移动开发,分析了云开发、本地开发和远程开发等多种方案的优缺点,旨在为移动开发者提供高效、灵活的代码编辑、文件管理和服务器操作解决方案。
2025-03-05
下一篇 
「流行声乐学习笔记 26」每日自主练习与 K 歌技巧 「流行声乐学习笔记 26」每日自主练习与 K 歌技巧
价值 6K 的流行声乐课程笔记!本节课是声乐课程理论上的最后一课,内容涵盖了嗓音保护、K歌技巧、麦克风使用和舞台表现等,同时提供了毕业后每日自主练习的方向建议。
2025-02-26
  目录