🤗 ダウンロードが失敗する! Hugging Face の巨大モデルを確実に落とす方法
No More Restarts! Stable Ways to Download Huge Hugging Face Models.
1. 概要 (Overview)
Hugging Face の巨大モデルのダウンロードが何度も失敗する!😥
・・・みたいなことは無いでしょうか?
Hugging Face から巨大ファイルを確実にダウンロードする方法について、
私が実践している方法を紹介します。
Web ブラウザ経由で 10 GB 以上の動画生成モデルなどの巨大ファイルをダウンロードする際、
途中で失敗して 1 からダウンロードし直しになったり、それを繰り返してしまうような場合に
有効な方法です。
Web ブラウザ以外にも curl や wget でも同様です。
2. 巨大ファイルを確実にダウンロードする方法 (Stable Ways to Download Huge Files)
Git を使います。
Git でも失敗はしますが、1 からダウンロードを何度も繰り返すことなく、
確実性が高く安定的にダウンロードできます。
内部処理的には、Git LFS で管理されているファイルは、ダウンロードが中断したところから
再開されます。
※以降は git version 2.43.0.windows.1 で確認した内容です
2.1. リポジトリ丸ごとダウンロードする場合
git clone <Hugging Face の Model card の URL>
リポジトリ丸ごとgit clone
します。
git reset
git restore --source=HEAD :/
もし途中で通信エラーになった場合、Staging されているものがあれば git reset
で戻し、
git restore
で HEAD コミットの状態にします。
ちなみに、リポジトリごと持って来ているので、もしリモートでファイルの追加や更新が
あった場合、git pull
で漏れなく差分を持って来れるメリットもあります。
2.2. ファイル単位でダウンロードする場合
git clone --filter=tree:0 --no-tags --no-checkout --depth=1 --single-branch \
--branch=<branch> <Model card の URL> [ローカルディレクトリ]
cd <ローカルディレクトリ>
git sparse-checkout init --no-cone
特定ファイルの最新バージョン以外のデータは極力取得しないように絞った設定です。
※git clone
で [ローカルディレクトリ] を指定しない場合は、リポジトリと同じ名前のディレクトリになる
git sparse-checkout set <ファイルパス>
git checkout
そして git sparse-checkout set
でダウンロードしたいファイルを指定します。
--no-checkout
の指定により git clone
時点ではファイルをダウンロードせず、
git checkout
の時点で実際にダウンロードされます。
git sparse-checkout add <ファイルやディレクトリのパス>
更に別のファイルも追加した場合は、git sparse-checkout add
で追加することもできます。
ファイルだけでなくディレクトリ単位でも指定できます。
ワイルドカードなど .gitignore
と同じ指定の仕方ができます。
既に git checkout
しているので、add
した時点でダウンロードが始まります。
set
ではなく add
なので気を付けてください。
set
をやった場合は他のファイルが消えますが、データ自体はローカルのリポジトリに
あるので、再度 add
すれば大丈夫です。
3. 具体例 (Concrete Example)
このリポジトリを例にします。
3.1. リポジトリ丸ごとダウンロードする例
git clone https://huggingface.co/Kijai/WanVideo_comfy
Hugging Face のページの "Files and versions" ではなく "Model card" の URL です。
3.2. ファイル単位でダウンロードする例
以下は先ず README.md
をダウンロードして、その後に追加でモデルファイルを
ダウンロードする例です。
$ git clone --filter=tree:0 --no-tags --no-checkout --depth=1 --single-branch \
--branch=main https://huggingface.co/Kijai/WanVideo_comfy tmp
$ cd tmp
$ git sparse-checkout init --no-cone
$ git sparse-checkout set README.md
$ git sparse-checkout list
README.md
$ git checkout
remote: Enumerating objects: 2, done.
remote: Counting objects: 100% (2/2), done.
~略~
$ git sparse-checkout add Skyreels/Wan2_1-SkyReels-V2-DF-1_3B-540P_fp32.safetensors
~略~
モデルファイルのパスは、以下のページのファイル名の横のコピーボタンから取れるものと
同じです。
なお、ある程度 Hugging Face を利用するのであれば、Python 環境は必要ですが、
専用のコマンドラインツール huggingface-cli
を使う方が良いかもしれません。
4. まとめ (Conclusion)
Hugging Face から巨大ファイルを確実にダウンロードする方法について、
私が実践している方法を紹介しました。
Git を使うことで、確実性が高く安定的にダウンロードできます。
特に Web ブラウザ経由でダウンロードが途中で失敗し、それを繰り返してしまうような場合に
それを解決する方法となります 🤗
関連・参考 (References)
※記事のリンクなど自由に OK です
Discussion