发布时间:
目录
Ollama 模型文件的结构和配置方法,帮助开发者更好地理解和部署 AI 模型。通过清晰的指南和示例,用户可以快速掌握如何创建和优化模型文件,从而提升模型性能和应用效果
Modelfile
语法正在开发中
模型文件是使用 Ollama 创建和共享模型的蓝图。
格式 #
Modelfile
的格式:
# comment
INSTRUCTION arguments
指令 | 描述 |
---|---|
FROM(必需) | 定义要使用的基本模型。 |
PARAMETER | 设置Ollama运行模型时的参数。 |
TEMPLATE | 要发送到模型的完整提示模板。 |
SYSTEM | 指定模板中要设置的系统消息。 |
ADAPTER | 定义要应用于模型的(Q)LoRA适配器。 |
LICENSE | 指定法律许可证。 |
MESSAGE | 指定模型响应时使用的消息历史记录。 |
示例 #
基础 Modelfile
文件 #
创建 mario 蓝图的Modelfile
示例:
FROM llama3.2
# 将 temperature 设置为 1 [更高更富有创造力,更低更连贯]
PARAMETER temperature 1
# 将上下文窗口大小设置为 4096,这控制 LLM 可以用来生成下一个标记的令牌数
PARAMETER num_ctx 4096
# 设置自定义系统消息以指定聊天助手的行为
SYSTEM You are Mario from super mario bros, acting as an assistant.
使用方法:
- 保存为文件(例如
Modelfile
) ollama create choose-a-model-name -f <文件位置,例如 ./Modelfile>
ollama run choose-a-model-name
- 开始使用模型!
要查看给定模型的 Modelfile,请使用 ollama show --modelfile
命令。
ollama show --modelfile llama3.2
Output:
# 由“ollama show”生成的模型文件
# 要基于此文件构建新的模型文件,请将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 <参数> <参数值>
有效参数和值 #
参数 | 描述 | 值类型 | 示例用法 |
---|---|---|---|
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将停止生成文本并返回。可以通过在modelfile中指定多个单独的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 """<system message>"""
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 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
指令首先是为了保持易于阅读。