Ollama系列文章:
Ollama入门,一键启动本地DeepSeek大模型
Ollama入门,Ollama技术架构与原理
Ollama进阶,在Python、Java、Go项目中集成Deepseek、QWQ大模型
Ollama进阶,在Javascript(nodejs)前后端项目中集成Deepseek、QWQ大模型
Ollama高手,玩转本地自定义大模型(LLM)
Ollama高手,调优Ollama环境变量,提高性能与安全性
Ollama高手,调优Ollama模型参数,提高模型输出质量
在Ollama进阶过程中,我们通过前面的两篇文章了解了如何将Ollama大模型服务应用到自己的项目中,这使得Deepseek、QWQ之类的本地大模型有了具体的用途。
然而在实际的项目中,需求往往是千变万化的,一个大模型可能满足不了需求,甚至有时需要的也不一定是大模型,而是嵌入式模型、视觉模型、语音模型等等面向特定需要的模型。
好在Ollama官方提供了模型库,用户可以通过ollama pull
命令拉取到本地使用。
1、Ollama 官方模型
Ollama 收录了主流厂商的开源大模型,包括阿里巴巴的Qwen、深度求索的DeepSeek、Meta的Llama、Google的Gemma、Microsoft的Phi等等,详细如下表:
模型厂商 | 模型系列 | 模型版本 | 模型用途 |
---|---|---|---|
阿里巴巴 | Qwen | Qwen 1.5、Qwen 2、Qwen 2.5、Qwen 2.5 Coder | 通用大模型、代码生成 |
阿里巴巴 | QwQ | QwQ 32B | 推理模型 |
深度求索 | DeepSeek | DeepSeek-R1、DeepSeek Coder V2、DeepSeek V3 | 通用大模型、代码生成 |
Meta | Llama | Llama 2、Llama 3、Llama 3.1、Llama 3.2、Llama 3.3 | 通用大模型 |
Google DeepMind | Gemma | Gemma、Gemma 2、Gemma 3、Gemma 3 Vision | 通用大模型、视觉模型 |
Microsoft | Phi | Phi-2、Phi-3、Phi-4 | 通用大模型 |
Mistral AI | Mistral | Mistral、Mistral-Nemo | 通用大模型、嵌入式模型 |
LLaVA Project | LLaVA | LLaVA | 视觉模型,多模态模型 |
StarCoder | StarCoder | StarCoder2 | 代码生成 |
TinyLlama | TinyLlama | TinyLlama | 嵌入式模型 |
NVIDIA & Mistral | Nemo | Mistral-Nemo | 通用大模型,支持长上下文 |
Ollama | Dolphin | Dolphin 3.0 | 通用大模型 |
Ollama | Command R | Command R 35B | 通用大模型,长上下文处理 |
Ollama | Orca | Orca Mini 3B、7B、13B、70B | 通用大模型,入门级硬件 |
一般情况下可以直接从官方模型库中选择合适的模型使用。
2、自定义模型
如果在实际项目中需要根据自身行业特征、企业自有数据集对一些通用模型进行微调,如专业的医疗诊断、法律助手、企业客服机器人等;或者其他平台如Hugging Face提供了,但Ollama模型库中还没有的模型,这时就需要自定义模型。
要自定义模型可以按以下步骤进行:
STEP1、准备自定义模型
在开始自定义模型前需要明确以下几点:
1.Ollama主要支持GGUF Engine、LLAMA.cpp两类推理引擎;
2.Ollama 支持 LLaMA、Mistral、Gemma 等架构。确保您的模型文件符合支持的架构。
3.事先需要准备好自定义模型文件,Ollama支持的格式包括 Safetensors 和 GGUF。
STEP2、创建 Modelfile
Ollama 使用 Modelfile
来定义模型的加载和配置。Modelfile的格式如下:
指令 | 描述 |
---|---|
FROM(必需) | 定义要使用的基础模型或者架构。 |
PARAMETER | 设置Ollama运行模型的参数。 |
TEMPLATE | 要发送到模型的完整提示模板。 |
SYSTEM | 指定将设置在模板中的系统消息。 |
ADAPTER | 定义要应用于模型的(Q)LoRA适配器。 |
LICENSE | 指定法律许可。 |
MESSAGE | 指定消息历史。 |
下面是一个具体的示例:
# 使用基础模型
FROM llama2
# 指定模型路径
MODEL /path/to/model.safetensors
# 设置参数
PARAMETER temperature=0.7
PARAMETER max_tokens=4096
一个模型可以设置一个或多个参数,具体有:
参数 | 描述 | 值类型 | 示例用法 |
---|---|---|---|
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) | 浮点数 |
STEP3、导入模型
使用以下命令导入模型:
ollama create my-custom-model -f /path/to/Modelfile
参数解析
my-custom-model
:自定义模型的名称。-f
:指定 Modelfile 的路径。
导入成功后,模型会被存储在 Ollama 的本地模型库中。
STEP4、运行和测试模型
导入完成后,可以直接运行模型进行测试:
ollama run my-custom-model
示例:
ollama run my-custom-model -p "你是谁?"