Huggingface 模型轉成 GGUF, 以讓 Ollama 使用

在定這個文章標題的時候,我也是很困惑。我另外也想定成 pytorch 模型轉成 gguf,總之就是要轉成可以量化的模型。gguf 檔應該是由 meta 所制定的,因為需要由 llama.cpp 這個專案來轉換。

轉成 gguf 的好處,就是其支援了量化的功能,可以大量的減少推論時佔用的記憶體。一般就是轉換成 8bit, 4bit, 2bit 甚至有 1bit 的,從通義千問的模型說明來看,轉換成4bit對跑分的影響,應該就在 1~2%之間,但可同比的降低記憶體的需求。

本文主要是參考這裡,其標題就是將 huggingface 模型轉成 gguf。

下載編譯 llama.cpp

下載與編譯指令如下

這樣可以下載基本的先在模型轉化成 fp16 和 int8 的工具,後續再轉化成其它更小的參數。

範例1: 轉換 llama3 8b instruct

假設目前的目錄就llama.cpp.git/build下面,用下面指令來下載 llama3 的模型。此處的下載源是中國 (Great China) 的 modelscope,這樣就不用進行註冊的動作,比較方便。

然後先將其轉換成 fp16 的格式,再轉成 4bit 格式。

範例2: 轉換 QWEN 1.8B

基本上是一樣的指令, 只是修改了下載的路徑和檔名。

導入 Ollama

取得所需要的 llm gguf 檔後,下一步就是要將其匯入 Ollama 中。匯入 Ollama 時,需要先編寫一個Modelfile 來讓 Ollama 知道怎麼使用這個模型。Llama3 的 modelfile 如下

QWen 的 modelfile 如下

將上面的當案依據自己模型的種類,存到一個 modelfile.txt,並將裡面的 FROM 後面的檔案改成你的 gguf,再用以下命令來創建一個新的 ollama 模型。這樣就可以創建出一個自己的模型了。

取得 modelfile 內容

modelfile 的內容,看的出來是該模型訓練時所使用的一些 keyword。為了取得方便,我都是先到 ollama library 拉下該類的模型,再將其 modelfile 印出,指令如下。

這似乎是有點蛋生雞,雞生蛋的感覺。modelfile 當然也可以由自己來撰寫,但是要瞭解該模型訓練時所用的參數,這顯然不是我在行的,所以現在我也只能拿 ollama 支援的模型來使用。

用途

由於本文介紹的內容,只能套用在 ollama library 已提供的模型上,這似忽沒什麼用。但主要可用的地方,還是在於從 huggingface 拉下未量化的模型,經微調後再放上自己的 ollama 做使用。

若有更進一步的需要,讀者可以學習一下怎麼撰寫 ollama 的 modelfile 來套用新的大模型語言上。

參考

本文參考這裡

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 93 − 92 =