參考資料
官方教學:https://github.com/ollama/ollama/blob/main/docs/import.md
網路教學:https://www.youtube.com/watch?v=fnvZJU5Fj3Q
基於已有的模型導入 Safetensors 權重
首先就是建立一個Modelfile.txt
例如假如我是用https://ollama.com/markliou/breeze-7b這個做為基礎模型,然後自己建立的LORA微調檔案在data資料夾底下,
則Modelfile.txt的內容如下:
FROM mistral:v0.1
ADAPTER ./data/
現在從創建 Modelfile
的目錄運行 ollama create
,可以使用-f來指定Modelfile路徑,如果不指定就會在你cmd當前資料夾尋找:
ollama create my-breeze -f ./Modelfile.txt
可以使用參數 --quantize
來運行不同的量化級別
$ ollama create --quantize q4_K_M my-breeze
transferring model data
quantizing F16 model to Q4_K_M
creating new layer sha256:735e246cc1abfd06e9cdcf95504d6789a6cd1ad7577108a70d9902fef503c1bd
creating new layer sha256:0853f0ad24e5865173bbf9ffcc7b0f5d56b66fd690ab1009867e45e7d2c4db0f
writing manifest
success
如果你是下載別人的LoRA,而別人的LoRA用的是.bin檔案,則可以使用transformers庫來做轉換,轉成.safetensors
from transformers import AutoModel, AutoTokenizer
# 載入模型和標記器
model = AutoModel.from_pretrained("./")
tokenizer = AutoTokenizer.from_pretrained("./")
# 儲存為 GGUF 格式
model.save_pretrained("./")
tokenizer.save_pretrained("./")
直接導入GGUF的模型
Ollama的From所導入的模型應為GGUF格式,可以透過像 llama.cpp 這樣的工具來將模型轉換為 ggml 或 gguf 格式。
安裝llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
接著將下載的 .safetensors 模型放置於適當位置,然後開始轉換
# 假設模型放置於 models/Breeze-7B-FC-v1_0 目錄下
./llama.cpp -m models/Breeze-7B-FC-v1_0/model.safetensors -t models/Breeze-7B-FC-v1_0/tokenizer.json -w models/Breeze-7B-FC-v1_0/ggml-model-f16.bin --quant 4
注意!不同模型的結構和參數可能有所差異,並非所有模型都能順利轉換為 GGUF。這邊有失敗經驗
https://github.com/ollama/ollama/issues/5195
要導入 GGUF 模型,創建一個Modelfile
,包含:
FROM /path/to/file.gguf
接著就可以創建了,CMD需指向你Modelfile.txt的位置
ollama create my-model -f ./Modelfile.txt