
在开源通用大模型已经很多的今天,我们为什么要自定义一个AI大模型?
这所谓名不正则言不顺,只有搞清楚自定义AI大模型的意义是什么,才能有针对性的去搞清楚怎样自定义AI大模型!在我看来主要有以下几点原因:
通用的AI大模型难以满足垂直领域的业务需要,定制AI大模型可以基于业务流程,在融合行业术语等具体内容后提升大模型推理检索的准确性;在自定义AI大模型的过程中可以通过硬件适配、模型压缩等技术,降低大模型的计算成本,提升大模型的推理速度;一些对数据安全有特殊要求的行业,自定义AI大模型可以满足数据安全;自定义AI大模型可以申请技术专利,提升企业差异化竞争力。一、自定义模型基本流程

大家先不用管 Modelfile 文件里写入内容的具体含义,先按下面流程操作,熟悉自定义AI大模型的流程!
创建一个名为 Modelfile 的文件编辑 Modelfile 文件,写入下面内容FROM ./vicuna-33b.Q4_0.gguf创建AI大模型ollama create example -f Modelfile运行AI大模型ollama run example通过以上四步,我们就可以得到一个自定义的AI大模型,这只是一个最简单的演示案例,实际业务使用的AI大模型自定义会比这更复杂,接下来我们将进行详细说明!
二、导入AI大模型

AI大模型都是通过在 Modelfile 文件中使用 FROM 命令导入的,接下来将详细讲解四种常用的导入方式。
2.1 通过 safetensors 权重文件导入基础模型
导入命令:
FROM /path/to/safetensors/directory说明:
FROM 命令后面跟随的文件夹中必须包含要导入的 Safetensors 格式的模型权重文件;Safetensors 是由 Hugging Face 开发的一种更高效更安全的模型权重文件存储格式,专为存储大型张量数据而设计的;如果创建的 Modelfile 文件和权重文件在同一个文件夹下时,可以简化命令为 FROM .2.2 通过预训练过的适配器文件导入Safetensors 权重文件
导入命令:
FROM <base model name>ADAPTER /path/to/safetensors/adapter/directory说明:
通过 FROM 指定预训练需要的基础模型,通过 ADAPTER 指定适配器文件夹路径指定的基础模型需要和预训练的适配器必须是同一个基础大模型大部分的不同框架使用的量化方法不相同,因此最好使用无量化的适配器如果 Modelfile 文件和适配器文件在同一个文件夹下时,命令可以简化为 FROM .2.3 导入 GGUF 格式的基础模型
导入命令:
FROM /path/to/file.gguf说明:
FROM 命令后面的路径就是 GGUF格式的模型文件可以通过 Llama.cpp 提供的 convert_hf_to_gguf.py 脚本将一个Safetensors 格式的模型转换为 GGUF 格式同样,也可以通过 Llama.cpp 提供的 convert_lora_to_gguf.py 脚本将一个 Safetensors 格式的适配器文件转换为 GGUF 适配器文件2.4 导入 GGUF 格式的适配器
导入命令:
FROM <model name>ADAPTER /path/to/file.gguf说明:
通过 FROM 指定预训练需要的 GGUF 格式的基础模型,通过 ADAPTER 指定适配器文件夹路径指定的 GGUF 格式基础模型需要和预训练的适配器是同一个模型。三、Modelfile 详解

命令
说明
FROM (required)
导入要使用的基础模型
PARAMETER
设置 ollama 运行模型时的参数
TEMPLATE
发送给模型的提示词模板
SYSTEM
指定设置到模板中的系统消息
ADAPTER
定义要提供给模板的(Q)LoRA 适配器
LICENSE
指定License
MESSAGE
指定消息历史
3.1 命令说明
FROM(必需)FROM 指令定义创建模型时要使用的基础模型。
FROM <模型名称>:<标签>
可用基础模型列表: https://github.com/jmorganca/ollama#model-library
从 bin 文件构建
FROM ./ollama-model.bin应将此bin文件位置指定为绝对路径或相对于 Modelfile 位置的路径。
PARAMETERPARAMETER指令定义在运行模型时可以设置的参数
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_ gqa
Transformer 层中的 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
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"""SYSTEMSYSTEM 指令用于指定模板中要使用的系统消息。
SYSTEM """<system message>"""ADAPTERADAPTER 指令用于指定要应用于基础模型的 LoRA 适配器。
该指令的值应为绝对路径或相对于 Modelfile 的路径,并且文件必须采用 GGML 文件格式。
适配器应该是从基础模型调整过的,否则行为是不确定的。
ADAPTER ./ollama-lora.binLICENSELICENSE 指令允许您指定在使用此 Modelfile 的模型下共享或分发的法律许可。
LICENSE """<许可证文本>"""MESSAGEMESSAGE 指令允许您为模型指定消息历史记录,以便在响应时使用。
使用多个 MESSAGE 命令的迭代来构建对话,这将引导模型以类似的方式回答。
MESSAGE <角色> <消息>有效角色system:为模型提供系统消息的替代方式。
user:用户可能会提出的示例消息。
assistant:模型应该如何回应的示例消息。
示例对话MESSAGE user 多伦多在加拿大吗?MESSAGE assistant 是的MESSAGE user 萨克拉门托在加拿大吗?MESSAGE assistant 不是MESSAGE user 安大略在加拿大吗?MESSAGE assistant 是的注意事项Modelfile 不区分大小写。
在示例中,使用大写指令是为了更容易区分它与参数。
指令可以以任何顺序出现。在示例中,FROM 指令首先出现是为了使其易于阅读。
3.2 创建一个基础的小学生作文创作助手(essay-assistant)的 Modelfile 示例
FROM qwq:latest# 设置温度为1[ 温度越高,创造性越强;温度越低,连贯性越好]PARAMETER temperature 1# 将上下文窗口大小设置为4096, 这控制了LLM可以使用多少标记作为上下文来生成下一个标记PARAMETER num_ctx 4096# 设置自定义系统消息以指定聊天助手的行为SYSTEM 你是一个小学学生,你擅长创作小学语文作文。使用方法:
将其保存为文件(Modelfile)执行以下命令ollama create <模型名称 如 essay-assistant> -f <文件位置,如 ./Modelfile> ollama run essay-assistant四、发布自定义的AI大模型
自定义AI大模型只有发布后,才可以共享给别人使用。可以按下面的操作流程进行发布
在Ollama平台注册一个帐户

