Ollama 快速入门:模型文件(Modelfile)

在使用 Ollama 进行本地部署和运行大型语言模型时,Modelfile 扮演着至关重要的角色。它是一个文本文件,用于定义和配置模型的行为和特性。

什么是 Modelfile?

Modelfile 是使用 Ollama 创建和共享模型的方案。它包含了构建模型所需的所有指令和参数,使得模型的创建和部署变得简单而直接。

格式

Modelfile 的格式:

# comment
INSTRUCTION arguments
操作说明 描述
FROM (必须) 定义要使用的基础模型
PARAMETER 设置 Ollama 如何运行模型的参数
TEMPLATE 要发送给模型的完整提示模板.
SYSTEM 指定将在模板中设置的系统消息.
ADAPTER 定义适用于模型的 (Q)LoRA 适配器.
LICENSE 指定合法的许可证。
MESSAGE 指定消息历史记录。

示例

基础 Modelfile

创建 mario 的 Modelfile 示例:

FROM llama3
# sets the temperature to 1 [higher is more creative, lower is more coherent]
# 将温度设置为 1 [越高越有创意,越低越连贯]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
# 将上下文窗口大小设置为 4096,这控制了 LLM 可以使用多少个 token 作为上下文来生成下一个 token
PARAMETER num_ctx 4096

# sets a custom system message to specify the behavior of the chat assistant
# 设置自定义系统消息来指定聊天助手的SYSTEM行为
SYSTEM You are Mario from super mario bros, acting as an assistant.

按下面操作:

  1. 将其保存为文件 (e.g. Modelfile)
  2. ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>'
  3. ollama run choose-a-model-name
  4. 开始使用该模型!

要查看给定模型的模型文件,请使用 ollama show --modelfile 命令。

> ollama show --modelfile llama3

# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM llama3:latest

FROM E:\Ollama\models\blobs\sha256-6a0746a1ec1aef3e7ec53868f220ff6e389f6f8ef87a01d77c96807de94ca2aa
TEMPLATE "{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>"
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
PARAMETER num_keep 24

指令

FROM (必须)

FROM 指令定义了创建模型时要使用的基础模型。

FROM <model name>:<tag>
从 llama3 构建
FROM llama3

可用基础模型列表: https://github.com/ollama/ollama#model-library

bin 文件构建
FROM ./ollama-model.bin

该 bin 文件位置应指定为绝对路径或相对于该Modelfile位置的路径。

PARAMETER

PARAMETER 指令定义了模型运行时可以设置的参数。

PARAMETER <parameter> <parametervalue>
有效参数和值
参数 描述 值类型 示例用法
mirostat 启用 Mirostat 采样来控制困惑度。(默认值:0,0 = 禁用,1 = Mirostat,2 = Mirostat 2.0) int mirostat 0
mirostat_eta 影响算法对生成文本反馈的响应速度。较低的学习率会导致调整速度较慢,而较高的学习率会使算法响应更快。(默认值:0.1) float mirostat_eta 0.1
mirostat_tau 控制输出的连贯性和多样性之间的平衡。值越低,文本越集中、越连贯。(默认值:5.0) float mirostat_tau 5.0
num_ctx 设置用于生成下一个标记的上下文窗口的大小。(默认值:2048) int num_ctx 4096
repeat_last_n 设置模型回溯多远以防止重复。(默认值:64,0 = 禁用,-1 = num_ctx) int repeat_last_n 64
repeat_penalty 设置对重复的惩罚力度。较高的值(例如 1.5)将对重复的惩罚力度更大,而较低的值(例如 0.9)将更宽松。(默认值:1.1) float repeat_penalty 1.1
temperature 模型的温度。增加温度将使模型的回答更具创意。(默认值:0.8) float temperature 0.7
seed 设置用于生成的随机数种子。将其设置为特定数字将使模型针对同一提示生成相同的文本。(默认值:0) int seed 42
stop 设置要使用的停止序列。遇到此模式时,LLM 将停止生成文本并返回。可以通过stop在模型文件中指定多个单独的参数来设置多个停止模式。 string stop “AI assistant:”
tfs_z 尾部自由采样用于减少输出中可能性较小的标记的影响。较高的值(例如 2.0)将进一步减少影响,而值 1.0 则禁用此设置。(默认值:1) float tfs_z 1
num_predict 生成文本时要预测的最大标记数。(默认值:128,-1 = 无限生成,-2 = 填充上下文) int num_predict 42
top_k 降低产生无意义答案的概率。值越高(例如 100)答案就越多样化,值越低(例如 10)答案就越保守。(默认值:40) int top_k 40
top_p 与 top-k 配合使用。较高的值(例如 0.95)将产生更加多样化的文本,而较低的值(例如 0.5)将产生更加集中和保守的文本。(默认值:0.9) float top_p 0.9

TEMPLATE

TEMPLATE 传递到模型中的完整提示模板。它可能包括(可选)系统消息、用户消息和模型的响应。注意:语法可能特定于模型。

模板变量
变量 描述
{{ .System }} 用于指定自定义行为的系统消息。
{{ .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 的路径,并且文件必须采用 GGML 文件格式。应根据基础模型调整适配器,否则行为将不明确。

ADAPTER ./ollama-lora.bin

LICENSE

LICENSE 指令允许您指定与此 Modelfile 一起使用的模型在何种合法许可证下共享或分发。

LICENSE """
<license text>
"""

MESSAGE

MESSAGE 指令允许您指定模型在响应时使用的消息历史记录。使用 MESSAGE 命令的多次迭代来构建对话,这将引导模型以类似的方式回答。

MESSAGE <role> <message>
有效角色
角色 描述
system 为模型提供系统消息的另一种方法。
user 用户可能询问的示例消息。
assistant 模型应如何响应的示例消息。
对话示例
MESSAGE user Is Toronto in Canada?
MESSAGE assistant yes
MESSAGE user Is Sacramento in Canada?
MESSAGE assistant no
MESSAGE user Is Ontario in Canada?
MESSAGE assistant yes

提示

  • Modelfile不区分大小写. 在示例中,使用大写指令是为了更容易与参数区分开来。
  • 指令可以按任意顺序排列。在示例中,FROM 指令排在最前面,以保持易读性。
作者:Jeebiz  创建时间:2024-07-21 11:24
最后编辑:Jeebiz  更新时间:2024-11-21 01:00