想請問轉換成GGUF的方法
不好意思打擾了,我想請教一個關於 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 模型則可以順利推論,所以想請問在您轉換的過程中,是否有額外處理或修改什麼地方?
若你有任何建議或經驗可以分享,非常感謝!
Hi @ballballballball ,
猜想你轉換與推論用的 llamacpp 是不同的 binary,因為 GGUF 本身只有包含 tokenizer 的名稱資訊,所以會導致推論時找不到名叫 llama-taide
的 tokenizer。
我是直接將 convert_hf_to_gguf_update.py
中 models
裡的 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 相容性後決定使用這個方法。
感謝您的回覆!
我嘗試了你提到的方法,直接修改 convert_hf_to_gguf_update.py
,但當時一直沒能成功。不過後來我發現,只要在 get_vocab_base_pre()
中,把我原本加入的 "llama-taide"
改回 "llama-bpe"
:
if chkhsh == "95092e9dc64e2cd0fc7e0305c53a06daf9efd4045ba7413e04d7ca6916cd274b":
res = "llama-bpe"
這樣就能順利完成推論了!