2024年5月28日 星期二

將 HuggingFace 模型轉換為 GGUF

 將 HuggingFace 模型轉換為 GGUF

1.安裝python 3.11.9,不要用python 3.12版

2.安裝git

3.重新開機

4.git clone https://github.com/ggerganov/llama.cpp.git

5.cd llama.cpp 

  pip install -r requirements.txt

6.測試llama.cpp

  python convert.py -h

出現:ImportError: DLL load failed while importing _sentencepiece: 找不到指定的模組。

安裝Microsoft visual c++ 2015 redistributable(x64)

https://www.microsoft.com/en-us/download/confirmation.aspx?id=48145

安裝後在執行一次python convert.py -h

7.將下載 HuggingFace 模型目錄複製到llama.cpp目錄下

python convert.py c:\llama.cpp\INX-TEXT_Bailong-instruct-7B --outfile bailong-instruct-7b-f16.gguf --outtype f16

轉出來大小約13.5G,還是太大

8.Windows使用llama.cpp量化(quantize)前準備

llama.cpp量化(quantize) 前要先做make。


9.下載w64devkit-1.xxx並執行w64devkit.exe。


  https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#build


  https://github.com/skeeto/w64devkit/releases/tag/v1.23.0

下載w64devkit-1.23.0.zip並解壓

10.進入w64devkit目錄並執行w64devkit.exe

11.然後進入llama.cpp目錄 cd /llama.cpp

12.執行make

   會跑一下下,完成後執行exit跳回windos的命令提示字元CMD下

   quantize.exe就會生成在llama.cpp的資料夾下

# 以q4_k_m 為例

# q4_k_m:提供了不同程度的準確性和推理速度,適合需要平衡資源使用的場景。


13.cd llama.cpp 

14.執行.\quantize.exe bailong-instruct-7b-f16.gguf bailong-instruct-7b-q4_k_m.gguf q4_k_m


當中數字是代表量化的 bits 設定;以下是參考他對於不同量化的推薦和說明:


q2_k:特定張量 (Tensor) 采用較高的精度設置,而其他的則保持基礎級別。

q3_k_l、q3_k_m、q3_k_s:這些變體在不同張量上使用不同級別的精度,從而達到性能和效率的平衡。

q4_0:這是最初的量化方案,使用 4 位精度。

q4_1和q4_k_m、q4_k_s:這些提供了不同程度的準確性和推理速度,適合需要平衡資源使用的場景。

q5_0、q5_1、q5_k_m、q5_k_s:這些版本在保證更高準確度的同時,會使用更多的資源並且推理速度較慢。

q6_k和q8_0:這些提供了最高的精度,但是因為高資源消耗和慢速度,可能不適合所有用戶。

如果追求較低成本和保持模型效能的情況推薦使用用 Q5_K_M,如果想更節省 RAM,則可以考慮 Q4_K_M。一般來說,帶有 K_M 的版本會比 K_S 的版本表現更佳。不過不建議使用 Q2_K 或 Q3_* 等版本,因為它們會顯著降低模型的整體性能。


----------------------------------------------------------------------------------------------

如何下載HuggingFace的模組

1.進入HuggingFace想要處理的模組例如INX-TEXT/Bailong-instruct-7B

那就去HuggingFace網頁搜尋INX-TEXT/Bailong-instruct-7B

2.進入後點選Files,在右邊有3個.,點選後出現clone repository,會出現如何下載

3.git lfs install

4.git clone https://huggingface.co/INX-TEXT/Bailong-instruct-7B

會出現要HuggingFace的帳號及密碼,輸入後才可下載--不能使用因為要你的token

4-1.使用download.py,或者一個個去下載


from huggingface_hub import snapshot_download


model_id = "INX-TEXT/Bailong-instruct-7B" # hugginFace's model name

snapshot_download(

    repo_id=model_id, 

    local_dir="INX-TEXT_Bailong-instruct-7B",

    local_dir_use_symlinks=False,

    revision="main",

    use_auth_token="<YOUR_HF_ACCESS_TOKEN>")


YOUR_HF_ACCESS_TOKEN--使用帳號進入後在settings--Access Tokens中去設定

執行 python download.py


5.上傳轉檔及量化後的 GGUF 模型到 Huggingface Repo

避免透過 git pull 來上傳大型的檔案下來寫一個 upload.py


from huggingface_hub import HfApi

import os


api = HfApi()

HF_ACCESS_TOKEN = "<YOUR_HF_WRITE_ACCESS_TOKEN>"

model_id = "NeroUCH/Bailong-instruct-7B-GGUF"


api.create_repo(

    model_id,

    exist_ok=True,

    repo_type="model", # 上傳格式為模型

    use_auth_token=HF_ACCESS_TOKEN,

)

# upload the model to the hub

# upload model name includes the Bailong-instruct-7B in same folder

for file in os.listdir():

    if file.endswith(".gguf"):

        model_name = file.lower()

        api.upload_file(

            repo_id=model_id,

            path_in_repo=model_name,

            path_or_fileobj=f"{os.getcwd()}/{file}",

            repo_type="model", # 上傳格式為模型

            use_auth_token=HF_ACCESS_TOKE)


參考:

https://medium.com/@NeroHin/%E5%B0%87-huggingface-%E6%A0%BC%E5%BC%8F%E6%A8%A1%E5%BC%8F%E8%BD%89%E6%8F%9B%E7%82%BA-gguf-%E4%BB%A5inx-text-bailong-instruct-7b-%E7%82%BA%E4%BE%8B-a2cfdd892cbc


https://medium.com/@zhanyanjiework/%E5%B0%87huggingface%E6%A8%A1%E5%9E%8B%E8%BD%89%E6%8F%9B%E7%82%BAgguf%E5%8F%8A%E4%BD%BF%E7%94%A8llama-cpp%E9%80%B2%E8%A1%8C%E9%87%8F%E5%8C%96-%E4%BB%A5taide-b-11-0-0%E6%A8%A1%E5%9E%8B%E7%82%BA%E4%BE%8B-%E9%83%A8%E7%BD%B2lm-studio-366bc4bcb690

沒有留言:

張貼留言