🤗Hugging Face から巨大ファイルを安定的にダウンロードする方法
How to reliably download huge files from Hugging Face.
1. 概要
Hugging Face から巨大ファイルを安定的にダウンロードする方法についてです。
Web ブラウザ経由で 10 GB 以上の動画生成モデルなどの巨大ファイルをダウンロードする際、
途中で失敗して 1 からダウンロードし直しになったり、それを繰り返すような場合に有効な方法です。
Web ブラウザ以外にも curl や wget でも同様です。
2. 巨大ファイルを安定的にダウンロードする方法
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. 具体例
このリポジトリを例にします。
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. まとめ
Hugging Face から巨大ファイルを安定的にダウンロードする方法についてでした。
Web ブラウザ経由などでダウンロードが途中で失敗し、何度もダウンロードを繰り返すような場合は、
Git を使ったダウンロードは有効な方法となります。
Discussion