Ollama 模型文件(Modelfile)

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

TEMPLATE

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

模板变量
变量描述
{{ .System }}用于指定自定义行为的系统消息。
{{ .Prompt }}用户提示消息。
{{ .Response }}来自模型的响应。生成响应时,此变量后的文本将被省略。
TEMPLATE “””{{ if .System }}<im_start
{{ .System }}<im_end
{{ end }}{{ if .Prompt }}<im_start
{{ .Prompt }}<im_end
{{ end }}<im_start
“””
#### SYSTEM

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

SYSTEM “”””””

#### ADAPTER

`ADAPTER` 指令是可选指令,用于指定应应用于基础模型的任何 LoRA 适配器。该指令的值应为`绝对路径`或`相对于 Modelfile 的路径`,并且文件必须采用 GGML 文件格式。应根据基础模型调整适配器,否则行为将不明确。

ADAPTER ./ollama-lora.bin

#### LICENSE

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

LICENSE “””

“””

#### MESSAGE

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

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 指令排在最前面,以保持易读性。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注