Git LFS(Large File Storage)ってなぁに
GitにLoRAをアップロードしようとしたら出てきたよぃ
Git LFSとは
普通のGitで扱えない「大きいファイル(モデル・画像・動画・LoRA重みなど)」を 別の場所に保存してリンクで管理する仕組み
仕組み
- ユーザーが
.gitattributes特定の拡張子のファイルをLFSの対象にする - その拡張子のファイルをGitにアップすると、ファイルの実態は別サーバーに送られる
- 元のGitにはそのファイルへのポインタだけが置かれる
GitHubでも使えるの?
使えまぁす
沼ったこと
Hugging FaceにもLFSの仕組みがあって、HGのGitにLoRAをアップロードしたら勝手にLFSに保存されたらしくて、そのあとLoRAファイルをローカルで削除してgit pushしようとしたら
remote: Your push was rejected because an LFS pointer pointed to a file that does not exist. remote: For instance, this can happen if you used git push --no-verify to push your changes. remote: Offending file: remote: - router_lora/adapter_model.safetensors remote: - router_lora/tokenizer.model
っていうエラーが出て沼った
GPTに言われた通りにgit lfs untrack [ファイル名]してLFSの追跡解除してもだめだし、
git rm --cached [ファイル名]でGitの追跡からはずしてもだめ
結局filter-repoっていうコマンドインストールして、全履歴から該当ファイル削除したらやっとエラー出なくなった
git filter-repo --path router_lora/adapter_model.safetensors --invert-paths git filter-repo --path router_lora/tokenizer.model --invert-paths
Gitの履歴にファイルがある = LFS管理対象 みたいなロジックがあるのか??
ちなみにこちらではLFSサーバーにはアクセスできなくて、管理対象外になった実体ファイルは そのうち勝手にガベージコレクションで消えるらしい