🤗

🤗 ダウンロードが失敗する! 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