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 }} |
模型的回應。產生回應時,該變數後面的文字將被省略。 |
"""{{ if .System }}<|im_start|>system
TEMPLATE {{ .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."
我要留言
留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。