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.
按下面操作:
- 将其保存为文件 (e.g.
Modelfile
) ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>'
ollama run choose-a-model-name
- 开始使用该模型!
要查看给定模型的模型文件,请使用 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 }}< | 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
指令排在最前面,以保持易读性。