tetf
/

GGUF
conversational

想請問轉換成GGUF的方法

#1
by ballballballball - opened

不好意思打擾了,我想請教一個關於 GGUF 轉換的問題。

我目前是自己使用 llama.cpp 中的 convert_hf_to_gguf.py 進行轉換,整個轉換流程看起來是成功的。但在使用轉換後的 GGUF 檔案進行推論時,會出現錯誤訊息:

llama_model_load: error loading model: error loading model vocabulary: unknown pre-tokenizer type: 'llama-taide'

我也有參考 https://hackmd.io/@San-Li/S1FEOWk9kg ,在 get_vocab_base_pre() 中加入以下邏輯來處理 tokenizer:

if chkhsh == "95092e9dc64e2cd0fc7e0305c53a06daf9efd4045ba7413e04d7ca6916cd274b":
    res = "llama-taide"

但目前仍無法正常在 llama-cli 中載入。

我發現使用您所提供、已經轉換好的 GGUF 模型則可以順利推論,所以想請問在您轉換的過程中,是否有額外處理或修改什麼地方?
若你有任何建議或經驗可以分享,非常感謝!

Taiwan Excellence Task Force org
edited 7 days ago

Hi @ballballballball ,

猜想你轉換與推論用的 llamacpp 是不同的 binary,因為 GGUF 本身只有包含 tokenizer 的名稱資訊,所以會導致推論時找不到名叫 llama-taide 的 tokenizer。

我是直接將 convert_hf_to_gguf_update.pymodels 裡的 llama-bpe 修改成 TAIDE 的 tokenizer repo ID,所以沒有修改到 tokenizer name。
不過,如同先前提到 GGUF 本身只有包含 tokenizer 的名稱資訊,所以推論時如果沒有特別重新編譯過 llamacpp,會使用 Meta-Llama-3-8B 的 tokenizer 而非 Llama-3.1-TAIDE-LX-8B-Chat 的 tokenizer,我們實驗發現兩者的 tokenizer 差異不大,所以考量 llamacpp 相容性後決定使用這個方法。
llama-bpe-tokenizer.png

感謝您的回覆!

我嘗試了你提到的方法,直接修改 convert_hf_to_gguf_update.py,但當時一直沒能成功。不過後來我發現,只要在 get_vocab_base_pre() 中,把我原本加入的 "llama-taide" 改回 "llama-bpe"

if chkhsh == "95092e9dc64e2cd0fc7e0305c53a06daf9efd4045ba7413e04d7ca6916cd274b":
    res = "llama-bpe"

這樣就能順利完成推論了!

ballballballball changed discussion status to closed

Sign up or log in to comment