搜尋結果

×

如何更改 Hugging Face 模型預設下載位置:一點都不難

輕鬆地更改 Hugging Face 模型的預設下載位置。無論是為了節省磁碟空間、方便管理還是版本控制。

在使用 Hugging Face 的 transformers 庫時,模型的下載和存儲位置通常默認在系統的緩存目錄中。然而,有時候你可能希望更改這個位置,以便於管理存儲或在特定環境(如 Docker)中使用。本文將介紹如何設定 Hugging Face 下載模型的位置。

為什麼需要更改下載位置?

在某些情況下,默認的下載位置可能不合適。

  • 空間不足:如果你的系統磁碟空間有限,需要將模型下載到其他位置。
  • 環境管理:在 Docker 容器中,希望將模型儲存在特定的掛載路徑。
  • 版本控制:為了更好地管理不同版本的模型,將其存儲在指定位置有助於組織。

如何設定模型下載位置?

  • 使用 cache_dir 參數
    在從 Hugging Face 下載模型時,你可以使用 cache_dir 參數指定模型的緩存目錄。以下是一個範例代碼:

      def main(prompt, output_filename):
          # 設定模型 ID
          model_id = "runwayml/stable-diffusion-v1-5"
    
          # 從預訓練模型載入 Stable Diffusion 管道
          pipe = StableDiffusionPipeline.from_pretrained(model_id, 
              torch_dtype=torch.float32, cache_dir="/cache_wei/")
    

    在這段代碼中,cache_dir參數將指定下載的模型存儲位置。

      root@08d912ebf816:/# ls
      app  bin  boot cache_wei  dev etc  home  lib lib64  media  mnt  opt proc  root  run  sbin  srv  sys  tmp  usr  var
    

    你可以看到在容器內的根目錄cache_wei出現了!

      root@08d912ebf816:/cache_wei# ls
      models--runwayml--stable-diffusion-v1-5  models--shenzhi-wang--Llama3-8B-Chinese-Chat
    

這些目錄的命名通常由以下幾部分組成:

  • models:這是根目錄,表示這裡存放的是模型相關的數據。
  • **–**:這是分隔符,用來分隔不同的部分。Hugging Face 使用雙破折號 -- 作為分隔符,以處理名稱中的特殊字符和空格。
  • 模型擁有者/組織:例如 runwaymlshenzhi-wang,這些是模型的擁有者或開發者的名稱,指示該模型的來源。
  • 模型名稱:如 stable-diffusion-v1-5Llama3-8B-Chinese-Chat,這是模型的具體名稱,通常會包含版本號或其他識別信息。

models–runwayml–stable-diffusion-v1-5:

  • runwayml 是模型的擁有者或組織名稱。
  • stable-diffusion-v1-5 是模型的名稱和版本號,表示這是 Stable Diffusion 模型的第 1.5 版本。

models–shenzhi-wang–Llama3-8B-Chinese-Chat:

  • shenzhi-wang 是這個模型的擁有者。
  • Llama3-8B-Chinese-Chat 是模型的名稱,表示這是一個 8 億參數的 Llama 3 模型,專門用於中文對話。

模型緩存目錄的結構

root@08d912ebf816:/cache_wei/models--runwayml--stable-diffusion-v1-5# ls
blobs  refs  snapshots

在 Hugging Face 的模型緩存目錄中,你會看到以下子目錄:

  • blobs:這個目錄包含實際的模型權重檔案和其他大型文件的數據。這些檔案的格式通常是 Hugging Face 特定的,以支持模型的快速加載和使用。這些權重檔案對於模型的正確運行至關重要。

      root@08d912ebf816:/cache_wei/models--runwayml--stable-diffusion-v1-5# cd blobs/
      root@08d912ebf816:/cache_wei/models--runwayml--stable-diffusion-v1-5/blobs# ls
      19da7aaa4b880e59d56843f1fcb4dd9b599c28a1d9d9af7c1143057c8ffae9f1  5dbd88952e7e521aa665e5052e6db7def3641d03
      1a02ee8abc93e840ffbcb2d68b66ccbcb74b3ab3     76e821f1b6f0a9709293c3b6b51ed90980b3166b
      2c2130b544c0c5a72d5d00da071ba130a9800fb2     82d05b0e688d7ea94675678646c427907419346e
      469be27c5c010538f845f518c4f5e8574c78f7c8     9d6a233ff6fd5ccb9f76fd99618d73369c52dd3d8222376384d0e601911089e8
      4d3e873ab5086ad989f407abd50fdce66db8d657     a2b5134f4dbc140d9c11f11cba3233099e00af40f262f136c691fb7d38d2194c
      5294955ff7801083f720b34b55d0f1f51313c5c5     d008943c017f0092921106440254dbbe00b6a285f7883ec8ba160c3faad88334
      55d78924fee13e4220f24320127c5f16284e13b9     daf7e2e2dfc64fb437a2b44525667111b00cb9fc
    
  • refs:這個目錄包含對應的模型引用,如不同版本的標籤或指向特定提交的引用。這有助於在需要時追蹤或切換到特定的模型版本,從而方便管理和使用不同版本的模型。

      root@08d912ebf816:/cache_wei/models--runwayml--stable-diffusion-v1-5/refs# ls
      main
    
  • snapshots:這個目錄包含模型的快照,通常是在特定時間點上保存的模型版本。這對於版本控制和恢復特定狀態的模型非常有用,特別是在進行實驗或調整模型參數時。

      root@08d912ebf816:/cache_wei/models--runwayml--stable-diffusion-v1-5/snapshots# ls
      f03de327dd89b501a01da37fc5240cf4fdba85a1
    

Docker掛載本地目錄進入cache_dir之中

docker run -v D:/local/:/cache_wei <image_name>

你在下docker run指令的時候,就要掛載cache_wei到本地目錄D:/local中

這樣你在容器內的 Hugging Face 模型緩存目錄才會一起出現在本地端唷!

不用Docker直接在本地跑模型會存在哪?

def main(prompt, output_filename):
    # 設定模型 ID
    model_id = "runwayml/stable-diffusion-v1-5"

    # 從預訓練模型載入 Stable Diffusion 管道
    pipe = StableDiffusionPipeline.from_pretrained(model_id, 
        torch_dtype=torch.float32)

直接在本地跑,並且不設定 cache_dir 的話,模型會存放在 ~/.cache/huggingface/hub 裡面!

ubuntu@ubuntu:~/.cache/huggingface/hub$ ls
models--stabilityai--stable-diffusion-2-inpainting  version_diffusers_cache.txt
models--THUDM--chatglm2-6b                          version.txt
models--THUDM--chatglm-6b

ubuntu@ubuntu:~/.cache/huggingface/hub$ cd models--stabilityai--stable-diffusion-2-inpainting/
ubuntu@ubuntu:~/.cache/huggingface/hub/models--stabilityai--stable-diffusion-2-inpainting$ ls
blobs  refs  snapshots

ubuntu@ubuntu:~/.cache/huggingface/hub/models--stabilityai--stable-diffusion-2-inpainting$ cd blobs/
ubuntu@ubuntu:~/.cache/huggingface/hub/models--stabilityai--stable-diffusion-2-inpainting/blobs$ ls
1d7b0e6916576464d3bbb0a6ab3792e4cf8c3cbf
297118f6c192917e8712ae6f76054e2090b03a12
4260d8ba1dc67225503a3a6a6a582c9e6dff8595
469be27c5c010538f845f518c4f5e8574c78f7c8
5294955ff7801083f720b34b55d0f1f51313c5c5
74a85ab991aa7f0aa14a95799b475e70f6640da9
76e821f1b6f0a9709293c3b6b51ed90980b3166b
9bcbb17f54b039f58bf78677fab8cd8a35dd686f6c9dd553e3646a8b0aaff41a
a1d993488569e928462932c8c38a0760b874d166399b14414135bd9c42df5815
ae0c5be6f35217e51c4c000fd325d8de0294e99c
cce6febb0b6d876ee5eb24af35e27e764eb4f9b1d0b7c026c8c3333d4cfc916c
d30e3eb38cf0609c58ad5b0c0da476d1463d9f8b
d56b14868b81a50d952b0ebf1455568a5f0fa717

結論

在使用 Hugging Face 的 transformers 庫時,自定義模型下載位置就像為你的模型選擇一個舒適的家🏡。透過 cache_dir 參數,你能靈活管理你的模型儲存位置,讓每個模型都有自己獨特的空間✨。這樣不僅能讓你的磁碟空間保持井然有序,還能確保下次使用時不會重複下載,節省時間和流量⏳。

希望這篇文章能幫助你在 Hugging Face 的旅程中輕鬆駕馭,讓探索模型的過程充滿樂趣!如果還有其他問題,隨時來找我,讓我們一起把 AI 玩得更精彩!🚀

    喜歡 好崴寶 Weibert Weiberson 的文章嗎?在這裡留下你的評論!本留言區支援 Markdown 語法