透過 Ollama 的 Modelfile 檔案配置模型的基本參數

Ollama

使用 Modelfile 來客製化模型的基本參數,讓模型更適合我們需要的使用情境。

1. Modelfile 配置

1.1 檔案格式

Modelfile 檔案的格式如下:

# comment
INSTRUCTION arguments

-- 對照的中文說明 --
# 註解
指示 參數名稱

1.2 Modelfile 使用範例

我們可以使用 Modelfile 來客製化模型的基本配置,例如要求它扮演一個角色或是指定回答時的精準度等等。在 Linux 中,先建立一個檔案名為 Modelfile ,然後輸入以下內容:

FROM llama3.1

# 設定溫度(temperature)參數為 1,越高越有創造力(creative),越低越有條理(coherent)
PARAMETER temperature 1

# 設定系統指示詞
SYSTEM """
You are Mario from Super Mario Bros. Answer as Mario, the assistant, only.
"""
  • FROM :指定模型名稱,也就是要以哪個模型為基礎
  • PARAMETER:指定要設定的參數
  • temperature :參數的名稱,溫度用來表示條理或創意,數字越小表示和內容越相關,數字越大表示越有創意。1 為基礎值,小於 1 越準確,大於 1 越發散,上限沒有明確值,實務上設定範圍:0.2 ~ 1.5
  • SYSTEM:給模型的系統指示詞。會在模型執行時依要求做出回應。
  • #:此符號為註解,在此符號之後的內容不會被執行。

接著就是建立模型並執行:

# 使用 Modelfile 建立一個名為 mario 的模型
ollama create mario -f ./Modelfile

# 執行這個模型
ollama run mario
>>> hi
Hello! It's your friend Mario.

如果有需要,可以反查 Modelfile 的配置內容:

ollama show --modelfile mario

注意事項:

  • Modelfile 不區分大小寫。在範例中,使用大寫指令是為了更容易將其與參數做區分。
  • 指令可以按任意順序排列。在範例中,FROM 指令在最前面是為了使其易於閱讀。

1.3 Instructions (指示) 說明

可使用的指示有:

指示 描述
FROM (必要) 定義要使用的基本模型。
PARAMETER 設定參數告訴 Ollama 如何運行模型。
TEMPLATE 要傳送給模型的完整提示範本。
SYSTEM 指定將在範本中設定的系統訊息。
ADAPTER 定義應用於模型的 (Q)LoRA 連接器。
LICENSE 指定合法許可。
MESSAGE 指定訊息的歷史記錄。

FROM (必要)

FROM 指示定義了建立模型時要使用的基礎模型。

FROM <model name>:<tag>

從現有模型構建

FROM llama3.1

從 GGUF 檔案構建

FROM ./ollama-model.gguf

GGUF 檔案位置應指定為絕對路徑或相對於 Modelfile 位置的路徑。

PARAMETER

PARAMETER 指示定義了模型運行時可以設定的參數。

PARAMETER <parameter> <parametervalue>

有效參數和值:

參數名稱 描述 資料類型 使用範例
mirostat 啟用 Mirostat 採樣以控制困惑度。
(Default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0)
int mirostat 0
mirostat_eta 影響演算法對產生文字回饋的反應速度。較低的學習率將導致調整速度較慢,而較高的學習率將使演算法更具反應性。
(Default: 0.1)
float mirostat_eta 0.1
mirostat_tau 控制輸出的一致性和多樣性之間的平衡。較低的值將導致文字更加集中和連貫。
(Default: 5.0)
float mirostat_tau 5.0
num_ctx 設定用於產生下一個標記的上下文視窗的大小。
(Default: 2048)
int num_ctx 4096
repeat_last_n 設定模型回溯多遠以防止重複。
(Default: 64, 0 = disabled, -1 = num_ctx)
int repeat_last_n 64
repeat_penalty 設定懲罰重複的強度。較高的值(例如 1.5)將對重複進行更嚴厲的懲罰,而較低的值(例如 0.9)將更寬鬆。
(Default: 1.1)
float repeat_penalty 1.1
temperature 模型的溫度。提高溫度將使模型的答案更有創意。
(Default: 0.8)
float temperature 0.7
seed 設定用於產生的亂數種子,將其設為特定數字將使模型為相同的提示產生相同的文字。
(Default: 0)
int seed 42
stop 設定要使用的停止序列。當遇到這種模式時,LLM 將停止產生文字並返回。可以透過在模型檔案中指定多個單獨的 stop 參數來設定多個停止模式。 string stop "AI assistant:"
tfs_z 無尾採樣用於減少輸出中不太可能的標記的影響。較高的值(例如 2.0)將更加地減少影響,而值 1.0 將停用此設定。
(default: 1)
float tfs_z 1
num_predict 產生文字時要預測的最大標記數。
(Default: 128, -1 = 無限世代, -2 = 填充上下文)
int num_predict 42
top_k 減少產生廢話的可能性。較高的值(例如 100)將給出更多樣化的答案,而較低的值(例如 10)將更加保守。
(Default: 40)
int top_k 40
top_p top-k 一起工作。較高的值(例如 0.95)將產生更多樣化的文字,而較低的值(例如 0.5)將產生更集中和保守的文字。
(Default: 0.9)
float top_p 0.9
min_p 替代 top_p,旨在確保品質和品種的平衡。參數 p 表示要考慮的令牌 (token) 的最小機率,相對於最可能的令牌的機率。例如,當 p=0.05 且最有可能的 token 的機率為 0.9 時,值小於 0.045 的 logits 將被過濾掉。
(Default: 0.0)
float min_p 0.05

參數大多使用預設值即可,其中幾個可能比較常視情況調整:

  • num_ctx:此值可以讓模型在產生結果時,往前參考多長的前文長度,簡單的說,就是記得多少前面說過的話。假設你的任務是不斷和模型對話以產生一個完整的解決方案,那模型就必須記得前面說過什麼,否則它的回答會像失憶的人,突然亂講一通。這個值越大會佔用越多的記憶體,在運算時也會越耗效能,請視使用情境自行調整。
  • temperature:當你在寫作時,需要更多的創意,可以將此值往下調低,模型會給出較有創意的回答。當你需要較有條理、穩重的回答時,可以將此值往上調高。

TEMPLATE

TEMPLATE 是一種預先定義的格式或結構,用於指導模型生成特定類型的內容或回應。模板可以幫助模型更好地理解使用者的需求,並生成更符合預期的結果。

它可以包含(選擇性的)系統 (SYSTEM) 訊息、使用者 (USER) 訊息和模型的回應。注意:語法可能特定於模型。這裡的範例使用 Go 的樣板語法

模板變數:

Variable Description
{{ .System }} 用於指定自訂行為的系統訊息。
{{ .Prompt }} 使用者的提示 (prompt) 訊息。
{{ .Response }} 模型的回應。產生回應時,該變數後面的文字將被省略。
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""

SYSTEM

SYSTEM 指定在範本中使用的系統訊息(如果適用)。

SYSTEM """<system message>"""

ADAPTER

ADAPTER 指定應適用於基礎模型的微調 LoRA 轉接器。轉接器的值應該是絕對路徑或相對於 Modelfile 的路徑。應使用 FROM 指定基礎模型。如果基礎模型與轉接器調整後的基礎模型不同,則行為將不穩定。

Safetensor 轉接器:
ADAPTER <path to safetensor adapter>

目前支援的 Safetensor 轉接器:

  • Llama (including Llama 2, Llama 3, and Llama 3.1)
  • Mistral (including Mistral 1, Mistral 2, and Mixtral)
  • Gemma (including Gemma 1 and Gemma 2)
GGUF 轉接器
ADAPTER ./ollama-lora.gguf

LICENSE

LICENSE 用來指定共用或散佈與此模型檔案一起使用的模型的合法授權。

LICENSE """
<license text>
"""

MESSAGE

MESSAGE 用來指定模型回應時所使用的訊息歷史記錄,使用多次迭代來建立對話,引導模型以類似的方式回答。

MESSAGE <role> <message>
有效角色 (role)
角色 描述
system 用於提供系統指令或背景訊息,通常在對話開始時設定。
user 表示使用者的輸入或問題。
assistant 表示模型的回應或生成的內容。
對話範例
MESSAGE system "You are a helpful assistant."
MESSAGE user "Can you tell me about the weather today?"
MESSAGE assistant "Sure! The weather today is sunny with a high of 75°F."

初始化對話:使用 system 角色來設定模型的行為或角色。例如:

MESSAGE system "You are a helpful assistant."

使用者輸入:使用者可以使用 user 角色來提出問題或請求。例如:

MESSAGE user "Can you tell me about the weather today?"

模型回應:模型使用 assistant 角色來生成回應。例如:

MESSAGE assistant "Sure! The weather today is sunny with a high of 75°F."
本文網址:https://blog.tonycube.com/2024/11/ollama-modelfile.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。