Ollama 模型文件
注意:
Modelfile语法仍在开发中
模型文件是使用 Ollama 创建和分享模型的蓝图。
目录
格式
Modelfile 的格式:
注释
指令 参数
| 指令 | 说明 |
|---|---|
FROM(必需) | 定义要使用的基础模型 |
PARAMETER | 设置 Ollama 运行模型时的参数 |
TEMPLATE | 发送给模型的完整提示模板 |
SYSTEM | 指定在模板中设置的系统消息 |
ADAPTER | 定义要应用到模型的(Q)LoRA 适配器 |
LICENSE | 指定法律许可证 |
MESSAGE | 指定消息历史记录 |
示例
基础 Modelfile
创建一个马里奥蓝图的 Modelfile 示例:
FROM llama3.2
# 设置温度为 1 [数值越高越有创意,数值越低越连贯]
PARAMETER temperature 1
# 设置上下文窗口大小为 4096,这控制了 LLM 可以用作上下文来生成下一个令牌的数量
PARAMETER num_ctx 4096
# 设置自定义系统消息来指定聊天助手的行为
SYSTEM 你是来自超级马里奥兄弟的马里奥,充当助手的角色。
使用方法:
- 将其保存为文件(例如
Modelfile) ollama create 选择一个模型名称 -f <文件位置,例如 ./Modelfile>ollama run 选择一个模型名称- 开始使用模型!
要查看指定模型的 Modelfile,使用 ollama show --modelfile 命令。
ollama show --modelfile llama3.2
输出:
# 由 "ollama show" 生成的 Modelfile
# 要基于此 Modelfile 构建新的 Modelfile,请将 FROM 行替换为:
# FROM llama3.2:latest
FROM /Users/pdevine/.ollama/models/blobs/sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
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 stop "<|reserved_special_token"
指令说明
FROM(必需)
FROM 指令定义创建模型时要使用的基础模型。
FROM <模型名称>:<标签>
基于现有模型构建
FROM llama3.2
可用基础模型列表:
https://github.com/ollama/ollama#model-library
更多模型可在以下地址找到:
https://ollama.com/library
基于 Safetensors 模型构建
FROM <模型目录>
模型目录应包含支持架构的 Safetensors 权重文件。
当前支持的模型架构:
- Llama(包括 Llama 2、Llama 3、Llama 3.1 和 Llama 3.2)
- Mistral(包括 Mistral 1、Mistral 2 和 Mixtral)
- Gemma(包括 Gemma 1 和 Gemma 2)
- Phi3
基于 GGUF 文件构建
FROM ./ollama-model.gguf
GGUF 文件位置应指定为绝对路径或相对于 Modelfile 位置的相对路径。
PARAMETER
PARAMETER 指令定义在运行模型时可以设置的参数。
PARAMETER <参数> <参数值>
有效参数和值
| 参数 | 说明 | 值类型 | 使用示例 |
|---|---|---|---|
| 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:" |
| num_predict | 生成文本时预测的最大令牌数。(默认:-1,无限生成) | 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 |
| min_p | top_p 的替代方案,旨在确保质量和多样性的平衡。参数 p 表示令牌被考虑的最小概率,相对于最可能令牌的概率。例如,当 p=0.05 且最可能令牌的概率为 0.9 时,值小于 0.045 的 logits 将被过滤掉。(默认:0.0) | float | min_p 0.05 |
TEMPLATE
TEMPLATE 是传递给模型的完整提示模板。它可以包含(可选的)系统消息、用户消息和来自模型的响应。注意:语法可能特定于模型。模板使用 Go 模板语法。
模板变量
| 变量 | 说明 |
|---|---|
{{ .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 """<系统消息>"""
ADAPTER
ADAPTER 指令指定应应用于基础模型的微调 LoRA 适配器。适配器的值应为绝对路径或相对于 Modelfile 的路径。基础模型应使用 FROM 指令指定。如果基础模型与适配器调优的基础模型不同,行为将不稳定。
Safetensor 适配器
ADAPTER <safetensor 适配器路径>
当前支持的 Safetensor 适配器:
- Llama(包括 Llama 2、Llama 3 和 Llama 3.1)
- Mistral(包括 Mistral 1、Mistral 2 和 Mixtral)
- Gemma(包括 Gemma 1 和 Gemma 2)
GGUF 适配器
ADAPTER ./ollama-lora.gguf
LICENSE
LICENSE 指令允许您指定与此 Modelfile 一起使用的模型共享或分发时的法律许可证。
LICENSE """
<许可证文本>
"""
MESSAGE
MESSAGE 指令允许您为模型指定消息历史记录,以便在响应时使用。使用多个 MESSAGE 命令来构建对话,这将指导模型以类似的方式回答。
MESSAGE <角色> <消息>
有效角色
| 角色 | 说明 |
|---|---|
| system | 为模型提供 SYSTEM 消息的替代方式。 |
| user | 用户可能提出的问题的示例消息。 |
| assistant | 模型应该如何响应的示例消息。 |
对话示例
MESSAGE user 多伦多在加拿大吗? MESSAGE assistant 是的 MESSAGE user 萨克拉门托在加拿大吗? MESSAGE assistant 不是 MESSAGE user 安大略在加拿大吗? MESSAGE assistant 是的
注意事项
Modelfile不区分大小写。在示例中,使用大写指令是为了更容易将其与参数区分开来。- 指令可以按任何顺序排列。在示例中,
FROM指令首先出现是为了保持易读性。