這邊紀錄從 Ollama github 上的 Modefile 紀錄有哪些可以修改的參數。

Ollama Modelfile:

Modelfile 內指令參數:

FROM 		: (必填) 定义要使用的基本模型。
PARAMETER	: 设置 Ollama 如何运行模型的参数。
TEMPLATE	: 要发送到模型的完整提示模板。
SYSTEM		: 指定将在模板中设置的系统消息。
ADAPTER		: 定义要应用于模型的 (Q)LoRA 适配器。
LICENSE		: 指定合法许可证。
MESSAGE		: 指定消息历史记录。

Base model specification

FROM:
Defines the base model to use for creating your customized model.
定義一個 model , 去所建立客製化 model

Model parameters

  • PARAMETER mirostat [0/1/2]:
    Enable Mirostat sampling for perplexity control.
    0=disabled, 1=Mirostat, 2=Mirostat 2.0.
    Mirostat值:可以有效避免出現過度重複或不連貫的内容
    預設:0 , 0 是不使用 , 1是Mirostat , 2是Mirostat2.0

  • PARAMETER mirostat_eta [float]:
    Learning rate for Mirostat. Default=0.1. Adjusts algorithm responsiveness.
    mirostat_eta值:影響算法對生成文本反應的響應速度,從而影響生成文本的質量和特徵。
    較低的值調整速度較慢,較高的值使算法更具影響性,對於需要快速迭代或調整模型輸出的場景非常有用。 ; 預設:0.1

  • PARAMETER mirostat_tau [float]:
    Balance between coherence and diversity. Default=5.0.
    Lower values = more focused text.
    mirostat_tau:可以控制生成文本的連貫性和多樣性之間的平衡,從而影響文本的重複性和連貫性等重要属性。
    較低的值可以更加集中和連貫,較高的值則會增加輸出的多樣性。預設:5.0

  • PARAMETER num_ctx [int]:
    Context window size. Default=2048.
    Controls tokens used for generating the next token.
    num_ctx:這個參數用於設置上下文 token 的數量。它决定了模型在生成響應時可以考慮的上下文長度。預設:2048

  • PARAMETER num_gqa [int]:
    Number of GQA groups in the transformer layer. Required for some models, e.g., 8 for llama2:70b.
    num_gqa:可以控制模型同時處理的任務數量,從而最佳化模型的性能和效率,設定 Transformer 層中 GQA 组的數量。某些模型需要,例如 llama2:70b 為 8

  • PARAMETER num_gpu [int]:
    Number of layers to send to the GPU(s). macOS default:1 for metal support.
    num_gpu:設置模型在推理時使用的 GPU layers 數量。預設:1,禁用:0

  • PARAMETER num_thread [int]:
    Number of threads for computation. Recommended: number of physical CPU cores.
    num_thread:設置模型在推理時使用的 CPU 線程數量。 Ollama 將檢測到這一點以獲得最佳性能。建議將此值設置為系統具有的物理 CPU 核心數(而不是邏輯核心數)。

  • PARAMETER repeat_last_n [int]:
    Lookback distance to prevent repetition.
    Default=64, 0=disabled, -1=num_ctx.
    repeat_last_n:模型在生成文本時檢測和懲罰重複 n-gram 的"數量"。告訴模型在嘗試不重複最后一部分對話時應該考慮的 token 數量。
    簡單來說就是 控制模型在生成文本時避免重複前 n-gram 的 token 出現,從而提高文本的多樣性和質量。 預設:64,禁用:0,-1=num_ctx

  • PARAMETER repeat_penalty [float]:
    Penalty for repetitions. Higher values penalize more. Default: 1.1.
    repeat_penalty:設置模型在生成文本時對重複 n-gram 的懲罰"程度"。 可以控制模型對重複 n-gram 的懲罰力度,從而影響生成文本的流暢性和連貫性。
    較高的值(例如,1.5)將更強烈的懲罰重複,而較低的值(例如,0.9)將更寬鬆。預設:1.1

  • PARAMETER temperature [float]:
    Model creativity vs coherence. Higher values = more creative. Default=0.8.
    temperature:參數可以影響生成文本的多樣性,值越"高"生成的文本越具有創造性和變化性,值越"低"生成的文本越趨向於保守和穩定。預設:0.8

  • PARAMETER seed [int]:
    Random seed for generation consistency. Default=0.
    seed:通過設定固定的種子值,可以確保每次運行相同的模型和相同的輸入時,得到的輸出是一致的。 預設:0

  • PARAMETER stop “[string]":
    Stop sequences for generation end. Multiple stops possible with separate parameters.
    stop:設置要使用的停止文字。當遇到這種模式時,LLM 將停止生成文本並返回。
    可以通過 stop 在模型文件中指定"多個"單獨的參數来設置多個停止模式。

  • PARAMETER tfs_z [float]:
    Tail free sampling for reducing less probable tokens’ impact.
    Default=1, >1 reduces impact more.
    tfs_z:通過調整 tfs_z(尾自由採樣) 的影響力度来影響模型輸出的多樣性和連貫性。
    當 tfs_z 值較高(例如,2.0)時,它會減少不太可能的 token 的影響力,從而使輸出更加多樣化。 相反,當 tfs_z 值為 1.0 時,這個設置被禁用,意味著尾自由采样的影響力度為最低,模型輸出的多樣性和連貫性可能會受到影響。 預設:1.0

  • PARAMETER num_predict [int]:
    Max tokens to predict. Default=128, -1=infinite generation, -2=fill context.
    num_predict:參數代表了在生成文本时模型預測的最大 token 數量。這個參數的功能主要是控制文本生成的過程中模型的輸出長度。 較小的 num_predict 值可以提高生成效率,但可能會限制模型生成更豐富的文本。較大的 num_predict 值則可以讓模型生成更長更複雜的文本,但可能會降低生成速度。預設:128, 無限制:-1 (模型無限制地生成文本,直到遇到停止標記), 填充上下文:-2 (會根據給定的上下文生成文本,而不會生成新的令牌)

  • PARAMETER top_k [int]:
    Limits nonsense generation. Higher values = more diverse answers. Default=40.
    top_k: 參數用於控制模型在生成文本時考慮的候選 token 數量。 較高的值(例如 100)將給出更多樣化的答案,而較低的值(例如 10)將更加保守。預設:40 (取前40個)

  • PARAMETER top_p [float]:
    Works with top-k for output diversity. Higher values = more diversity. Default=0.9.
    top_p: 值會讓模型考慮累計概率較高的 token 。 較高的值(例如,0.95)將導致更加多樣化的文本,而較低的值(例如,0.5)將生成更加集中和保守的文本。預設:0.9 (代表取權重前90%的)

Prompt template

TEMPLATE "”" … “"":
Full prompt template including optional system message, user’s message, and the model’s response.
TEMPLATE:該參數用於定義模型的模板或系统提示,控制模型在生成文本時的輸出結構和風格。 例如,可以使用 TEMPLATE 參數来指定模型在生成文本時是否包含系统提示、用户提示、模型響應等信息。
控制模型生成文本的整體結構和格式。 (使用 Go 語法格式)
Example:

	| Variable 		  | Description |
	| {{ .System }}   | The system message used to specify custom behavior. 用於設定自訂義行為|
	| {{ .Prompt }}   | The user prompt message. 使用者提示消息|
	| {{ .Response }} | The response from the model. When generating a response, text after this variable is omitted. 模型生成的回复。在生成回复时,此变量后的文本将被省略。|
TEMPLATE """{{ if .System }}system
{{ .System }}
{{ end }}{{ if .Prompt }}user
{{ .Prompt }}
{{ end }}assistant
"""

System message

SYSTEM “”"[system message]”"":
Custom system message specifying chat assistant behavior.
SYSTEM:參數的主要功能是為模型提供一個初始的對話上下文。 通過設置 SYSTEM 參數,開發者可以控制模型在開始生成文本之前,系统消息的内容。
簡單來說就是開始回答前先跟它講是現在是哪種身分與設定,影響模型生成文本的風格和内容。
Example:

SYSTEM """You are a helpful medicine assistant."""

LoRA adapter

ADAPTER:
Specifies the LoRA adapter to apply. Path relative to the Modelfile or absolute.
ADAPTER: 指定要應用於基礎模型的 (Q)LoRA 檔案。 必須采用 GGML 文件格式。
Example:

ADAPTER ./ollama-lora.bin

License

LICENSE:
Legal license under which the model is shared or distributed.
LICENSE:此模型分享與合法授權遵守的 License 規則。 Example:

LICENSE """
	<license text>
"""

Message

MESSAGE [role] [message]:
Sets up a predefined message history for the model to consider when generating responses, helping to provide context or guide the model’s outputs.
MESSAGE:指令允許您為模型指定消息歷史紀錄,以便在響應時使用。使用多個 MESSAGE 命令的迭代来建構對話,這將引導模型以類似的方式回答。
Example:

	| Variable 	| Description |
	| system   	| Alternate way of providing the SYSTEM message for the model. 为模型提供系统消息的替代方式。|
	| user   	| An example message of what the user could have asked. 用户可能会提出的示例消息。|
	| assistant | An example message of how the model should respond. 模型应该如何回应的示例消息。|
MESSAGE user Is Toronto in Canada?
MESSAGE assistant yes
  ...

參考文件: 翻譯與找資料:perplexity.ai and phind.ai 基于Ollama定制自己的大语言模型 - 53ai 上百大语言模型快速部署调用工具 Ollama使用指南 Ollama GitHub - Modefile Ollama GitHub - Modefile Ollama GitHub - import 自定义大型语言模型-使用OLLAMA和Modelfile定制、运行和保存LLM - 知乎

筆記:

temperature, top_k, top_p 3者相關性:

  • temperature:擷取 prompt 中的 token。
  • top_k:從 tokens 里選擇 k 個作為候選,然后根据它們的 likelihood scores 来採樣。
  • top_p:從 tokens 里按百分比選擇候選詞。
  • 順序:temperature 整體參數取樣 => top_k 取樣前n個重新賦予權重排名 => top_p 取前 n% 來使用

閱讀文章:
promptingguide.ai

learnprompting.org

GitHub:
Ollama - GitHub