開發與 AI · Clash 技術部落格

Hugging Face 模型下載慢或中斷?Clash、Git LFS 與快取設定指南

Hugging Face 網頁正常而模型下載失敗時,分別檢查 Hub 元資料、Xet 或 Git LFS 檔案請求與本機快取。根據實際超時、下載中斷或空間錯誤處理,保留可繼續使用的檔案副本。

  • Hugging Face
  • 模型下載
  • Git LFS
  • 快取
本文目錄

模型頁面能開啟,下載卻在大檔案開始後反覆重試,繼續增加逾時或清空快取不一定有幫助。小檔案和權重可能使用不同下載方式,帳號授權、代理出口與磁碟空間也要分別確認。保留已完成的檔案,再對照實際使用的工具排查,才能減少重新下載的次數。

Hub 小檔案、Xet 分塊與舊 Git LFS,下載方式有什麼區別?

用模型卡或 config.json 確認一般 Hub 請求;大權重通常由 Xet 分塊下載,分塊就是將大檔案拆成較小內容分別傳輸。依下表確認正在使用哪種工具,舊 Git LFS 有自己的相容方式;排查時保留已完成快取,再用小檔案核對帳號和網路。

目前下載方式

方式實際大檔案後端適合情境
huggingface_hub / hf CLIhuggingface_hub 0.32+ 自動安裝 hf_xet,使用 Xet 分塊下載模型與資料集下載首選
git clone + git-xetXet,仍保留 Git 工作流需要完整儲存庫與提交歷史
舊 Git LFS 用戶端透過相容橋繼續工作遺留流程;不是目前效能首選
瀏覽器單檔案Hub 產生的下載網址查看小檔案或臨時下載

Hugging Face 官方文件說明,Hub 已採用 Xet;Git LFS 仍相容,但 hf_transfer 已棄用,應改用 hf_xet。舊教學讓使用者只安裝 Git LFS、開啟 HF_HUB_ENABLE_HF_TRANSFER,已經不適合作為 2026 年預設方案。

config.json 能否下載,可以區分許可問題與基本網路故障

更新用戶端、登入並下載小檔案
python -m pip install -U huggingface_hub
hf auth login
hf download gpt2 config.json

# 查看版本
python -c "import huggingface_hub; print(huggingface_hub.__version__)"

公開模型的小檔案成功,說明 Hub 元資料、基本 HTTPS 和本機快取目錄可用。受限模型回傳 401/403 時,在瀏覽器用同一帳號接受許可並檢查 token 的 read 權限;換節點不會讓帳號自動獲批。

token 由 hf auth login 儲存,不寫進 Clash YAML、Notebook 單元格或公共指令碼。團隊伺服器使用自己的 secrets 管理,不複製個人 token。

環境變數必須在匯入 huggingface_hub 前設定

以下範例會改用 HF_HOME。完成前一節登入後,先確認仍使用同一個 token 來源:HF_TOKEN 的值優先用於身分驗證,HF_TOKEN_PATH 可指定其他檔案位置,預設 token 檔案則隨 HF_HOME 變更。

先確定代理和快取目錄,再下載受限模型;變更目錄後用 hf auth whoami 核對目前帳號,必要時在該環境重新登入。公開模型範例不要求登入,成功也不能證明受限模型的許可有效。

macOS / Linux 目前終端示例,CLASH_PORT 按實際 mixed-port 修改
CLASH_PORT=7890
export HTTPS_PROXY="http://127.0.0.1:$CLASH_PORT"
export HTTP_PROXY="http://127.0.0.1:$CLASH_PORT"
export HF_HOME="$HOME/hf-cache"
export HF_HUB_DOWNLOAD_TIMEOUT=30
mkdir -p "$HF_HOME"

hf download openai-community/gpt2 --include '*.json'
hf download openai-community/gpt2 --cache-dir "$HF_HOME/hub"

官方文件註明 huggingface_hub 在 import 時讀取環境變數。Notebook 已經匯入庫後再修改變數,目前核心可能繼續使用舊值;應重啟 kernel 或在啟動前設定。HF_HUB_DOWNLOAD_TIMEOUT 預設 10 秒,只有連線已經建立但讀取慢時才適合提高。

HF_HOME 同時影響 token 和快取根目錄;只想移動儲存庫快取可以使用 HF_HUB_CACHE 或命令的 --cache-dir。目錄必須由目前使用者可寫,並為臨時分塊、模型 revision 與解壓縮留出空間。

網頁能開、模型分塊超時,要在連線頁找 Xet 請求

模型卡和 README 是短請求,Xet 大檔下載還會存取依檔案內容定位資料的位址,以及附有臨時存取授權的儲存位址。網頁正常只代表 huggingface.co 可以連線;開始分塊下載後反覆重試,應固定一個節點,查看失敗網域、狀態碼與快取寫入錯誤。

先讓相關 Hub/Xet 請求使用同一個固定節點比較,排除不同出口的連線差異;下載結束後再恢復自動選擇。切換出口本身不能證明預簽名 URL 已失效,仍須查看狀態碼與授權資訊。不要將臨時儲存網域永久寫成過寬的 DOMAIN-KEYWORD 規則。

401 / 403

檢查儲存庫許可與 token,不增加超時。

httpx.TimeoutException / Read timed out

固定節點並確認失敗請求命中;Hub 檔案讀取慢時可調整 HF_HUB_DOWNLOAD_TIMEOUT,Xet 分塊錯誤則依 hf_xet 日誌另查,不能假定同一變數控制全部下載。

No space left on device

移動 HF_HOME/HF_HUB_CACHE,保留已完成快取,不換節點。

Permission denied 寫快取

修正目錄所有者與掛載權限,不以 root 重下整份模型。

只得到幾 KB 的指針檔案

Git 流程缺少 git-xet/git-lfs 或大檔案檢出未完成。

重用已完成的 Hub 檔案,分塊快取變數已失效

預設 Hub 快取在 ~/.cache/huggingface/hub,Xet 相關目錄為 ~/.cache/huggingface/xet。修改 HF_HOME 會改變後續使用的路徑,不會自動搬移已有檔案;先保留原目錄中的已完成檔案,再決定遷移或繼續使用哪個快取。

Hub 的 refs、blobs 與 snapshots 會重用已經完成的檔案。下載中斷後應使用相同的 repo_id、revision、使用者和快取目錄重跑。

目前官方說明已將 HF_XET_CHUNK_CACHE_SIZE_BYTES 標為無效:hf_xet 不再使用本機下載分塊快取,設定此變數也不會啟用。應重用已完成的 Hub 檔案,檢查實際請求與磁碟空間,不要為了「開啟分塊快取」刪除 blobs 或重新下載整份模型。

Python 下載範例;固定版本時將 main 換成實際提交 ID
from pathlib import Path
from huggingface_hub import snapshot_download

cache_dir = Path.home() / "hf-cache" / "hub"
path = snapshot_download(
    repo_id="openai-community/gpt2",
    revision="main",
    cache_dir=cache_dir,
)
print(path)

必須使用 Git 時,安裝 git-xet 並保留 LFS 相容

只有專案確實依賴 Git 歷史或分支操作時,才需要走這條路徑。普通模型下載優先使用 hf download,斷點續傳和快取更容易觀察。

沒有 git xet 命令時,先按官方平台說明安裝 git-xet;macOS 可使用 Homebrew,Windows 官方文件提供 winget 安裝方式。舊用戶端仍可透過 LFS bridge 下載,但遇到速度與大檔問題時,應優先升級 Hugging Face 的相關下載工具。

按 Hugging Face 官方 Git 工作流,先替換 HF_REPO
HF_REPO='OWNER/MODEL'
# 例如 HF_REPO='openai-community/gpt2'

git lfs install
git xet install
git clone "https://huggingface.co/$HF_REPO"

cd "${HF_REPO##*/}"
git xet --version
git lfs version
git status

Git 自己使用 git config 與環境變數,和 Python SDK 不是同一設定。hf CLI 正常、git clone 卡住時,只檢查 Git/Xet/LFS 與 Git 代理,不再改 HF_HOME。

啟用離線模式,確認模型權重和 tokenizer 能從本機載入

檢查下載結果與離線使用

  1. 再次執行同一下載命令

    應快速命中相同 snapshot,而不是重新傳輸全部分塊。

  2. 載入一次模型

    使用實際 transformers 或專案程式碼讀取權重與 tokenizer。

  3. 啟用離線模式測試

    已快取內容可用時,設定 HF_HUB_OFFLINE=1 或使用 local_files_only,不應再存取 Hub。

  4. 檢查認證資訊與空間

    Notebook、日誌和 Git 歷史沒有 token,快取盤仍有升級餘量。

  5. 記錄 revision 與 snapshot 路徑

    下次更新模型時能區分新版本下載與舊快取損壞。

參考資料