跳到主要内容

四、自定义模型文件

注意:Modelfile语法正在开发中

模型文件是使用Ollama创建和共享模型的蓝图。

1. 格式

Modelfile的格式如下:

# 注释

INSTRUCTION 参数
指令描述
FROM(必需)定义要使用的基础模型。
PARAMETER设置Ollama运行模型的参数。
TEMPLATE要发送到模型的完整提示模板。
SYSTEM指定将设置在模板中的系统消息。
ADAPTER定义要应用于模型的(Q)LoRA适配器。
LICENSE指定法律许可。
MESSAGE指定消息历史。

2. 示例

(1). 基本Modelfile

创建一个马里奥蓝图的Modelfile示例:

FROM llama2

# 将温度设置为1 [温度越高,创造性越强,温度越低,连贯性越强]

PARAMETER temperature 1

# 将上下文窗口大小设置为4096,这控制了LLM可以使用多少标记作为上下文来生成下一个标记

PARAMETER num_ctx 4096

# 设置自定义系统消息以指定聊天助手的行为

SYSTEM 你是超级马里奥兄弟中的马里奥,充当助手。

使用方法:

  1. 将其保存为文件(例如Modelfile
  2. ollama create choose-a-model-name -f <文件位置,例如./Modelfile>
  3. ollama run choose-a-model-name
  4. 开始使用该模型!

更多示例可在示例目录中找到。

(2). ollama.com/library中的Modelfile

查看ollama.com/library中模型底层的Modelfile有两种方法:

  • 选项1:从模型的标签页面查看详细信息:

    1. 转到特定模型的标签页(例如https://ollama.com/library/llama2/tags)

    2. 单击标签(例如https://ollama.com/library/llama2:13b)

    3. 向下滚动至“Layers”

      • 注意:如果FROM指令不存在,则表示该模型是从本地文件创建的
  • 选项2:使用ollama show打印任何本地模型的Modelfile,如下所示:

    > ollama show --modelfile llama2:13b

    # 由“ollama show”生成的Modelfile

    # 要基于此构建新的Modelfile,请将FROM行替换为:

    # FROM llama2:13b

    FROM /root/.ollama/models/blobs/sha256:123abc

    TEMPLATE """[INST] {{ if .System }}<<SYS>>{{ .System }}<</SYS>>

    {{ end }}{{ .Prompt }} [/INST] """

    SYSTEM """"""

    PARAMETER stop [INST]

    PARAMETER stop [/INST]

    PARAMETER stop <<SYS>>

    PARAMETER stop <</SYS>>

3. 说明

(1). FROM(必需)

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

FROM <模型名称>:<标签>

从llama2构建

FROM llama2

可用基础模型列表:

https://github.com/jmorganca/ollama#model-library

bin文件构建

FROM ./ollama-model.bin

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

(2). PARAMETER

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

PARAMETER <参数> <参数值>

有效参数和值

参数描述值类型示例用法
mirostat启用 Mirostat 采样以控制困惑度。(默认值: 0, 0 = 禁用, 1 = Mirostat, 2 = Mirostat 2.0)整数mirostat 0
mirostat_eta影响算法对生成文本反馈的响应速度。较低的学习率会导致调整速度较慢,而较高的学习率会使算法更具响应性。(默认值: 0.1)浮点数mirostat_eta 0.1
mirostat_tau控制输出的连贯性和多样性之间的平衡。较低的数值会导致更加聚焦和连贯的文本。(默认值: 5.0)浮点数mirostat_tau 5.0
num_ctx设置用于生成下一个 Token 的上下文窗口大小。(默认值: 2048)整数num_ctx 4096
num_gqaTransformer 层中的 GQA 组数。某些模型需要,例如 llama2:70b 需要设置为 8整数num_gqa 1
num_gpu发送到 GPU 的层数。在 macOS 上,默认值为 1 以启用 Metal 支持,为 0 则禁用。整数num_gpu 50
num_thread设置计算过程中要使用的线程数。默认情况下,Ollama 会检测以获得最佳性能。建议将此值设置为系统实际物理 CPU 核心数(而非逻辑核心数)。整数num_thread 8
repeat_last_n设置模型回顾以避免重复的范围。(默认值: 64, 0 = 禁用, -1 = num_ctx)整数repeat_last_n 64
repeat_penalty设置惩罚重复的强度。较高的值(例如 1.5)会更严厉地惩罚重复,而较低的值(例如 0.9)会更宽容。(默认值: 1.1)浮点数repeat_penalty 1.1
temperature模型的温度。增加温度会使模型更具创造性。(默认值: 0.8)浮点数temperature 0.7
seed设置用于生成的随机数种子。将其设置为特定数字将使模型对相同提示生成相同的文本。(默认值: 0)整数seed 42
stop设置要使用的停止序列。当遇到此模式时,LLM 将停止生成文本并返回。可以通过在模型文件中指定多个单独的 stop 参数来设置多个停止模式。字符串stop "AI assistant:"
tfs_z尾部自由采样用于减少输出中较不可能的 Token 的影响。较高的值(例如 2.0)会更大程度地减少影响,而值为 1.0 则禁用此设置。(默认值: 1)浮点数tfs_z 1
num_predict生成文本时要预测的最大 Token 数。 (默认值: 128, -1 = 无限生成, -2 = 填充上下文)整数num_predict 42
top_k减少生成无意义文本的概率。较高的值(例如 100)会给出更多样化的答案,而较低的值(例如 10)会更保守。(默认值: 40)整数top_k 40
top_p与 top-k 一起使用。较高的值(例如 0.95)会导致更多样化的文本,而较低的值(例如 0.5)会生成更聚焦和保守的文本。(默认值: 0.9)浮点数top_p 0.9

(3). TEMPLATE

该模板将传递到模型中。它可以包括(可选)系统消息、用户消息和模型的响应。注意:语法可能是特定于模型的。模板使用Go 模板语法

4. 模板变量

在模板中,我们使用以下变量来表示不同部分的内容:

变量描述
{{ .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
"""

5. SYSTEM

SYSTEM 指令用于指定模板中要使用的系统消息。

SYSTEM """<system message>"""

6. ADAPTER

ADAPTER 指令用于指定要应用于基础模型的 LoRA 适配器。该指令的值应为绝对路径或相对于 Modelfile 的路径,并且文件必须采用 GGML 文件格式。适配器应该是从基础模型调整过的,否则行为是不确定的。

ADAPTER ./ollama-lora.bin

7. LICENSE

LICENSE 指令允许您指定在使用此 Modelfile 的模型下共享或分发的法律许可。

LICENSE """
<许可证文本>
"""

8. MESSAGE

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

MESSAGE <角色> <消息>

(1). 有效角色

  • system:为模型提供系统消息的替代方式。
  • user:用户可能会提出的示例消息。
  • assistant:模型应该如何回应的示例消息。

9. 示例对话

MESSAGE user 多伦多在加拿大吗?
MESSAGE assistant 是的
MESSAGE user 萨克拉门托在加拿大吗?
MESSAGE assistant 不是
MESSAGE user 安大略在加拿大吗?
MESSAGE assistant 是的

10. 注意事项

  • Modelfile 不区分大小写。在示例中,使用大写指令是为了更容易区分它与参数。
  • 指令可以以任何顺序出现。在示例中,FROM 指令首先出现是为了使其易于阅读。

通过本教程,您可以更好地了解如何使用模板化模型的完整提示模板。希望这篇博客能帮助您更好地应用模板化模型。