Ollama部署及模型功能使用
安装部署
本地安装
自动安装
curl -fsSL https://ollama.com/install.sh | sh
手动安装
具体安装及环境配置详见:https://github.com/ollama/ollama/blob/main/docs/linux.md
docker安装
docker-compose.yml
version: '3'
services:
ollama:
image: ollama/ollama:latest
ports:
- 11434:11434
volumes:
- .:/code
- ./ollama/ollama:/root/.ollama
container_name: ollama
#pull_policy: always # 每次启动容器时,都会尝试拉取最新的镜像版本(latest)
tty: true
restart: on-failure # 只在异常退出时重启
environment:
- OLLAMA_KEEP_ALIVE=24h
- OLLAMA_HOST=0.0.0.0
networks:
- ollama-docker
networks:
ollama-docker:
external: false # 默认为false,强调这个网络是内部的; true则表示该网络是外部网络,即由用户手动创建或预先存在的网络
启动容器:docker compose up -d
进入容器中执行指令
docker exec -it ollama /bin/bash
如果不想进入容器,也可以参考如下指令,一键运行容器中的模型:
docker exec -it ollama ollama run qwen2.5:0.5b
浏览器中打开:http://<my_host>:11434/
,如果出现 Ollama is running
字样,说明服务已经成功运行。
Ollama 常用命令及参数
常用命令
Ollama 都有哪些指令?终端输入 ollama
:
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
pull Pull a model from a registry
push Push a model to a registry
list List models
ps List running models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for ollama
-v, --version Show version information
Use "ollama [command] --help" for more information about a command.
我们翻译过来,和 docker 命令非常类似:
ollama serve # 启动ollama
ollama create # 从模型文件创建模型
ollama show # 显示模型信息
ollama run # 运行模型,会先自动下载模型
ollama pull # 从注册仓库中拉取模型
ollama push # 将模型推送到注册仓库
ollama list # 列出已下载模型
ollama ps # 列出正在运行的模型
ollama cp # 复制模型
ollama rm # 删除模型
常用参数
Ollama安装完成之后,有几个常用的系统环境变量参数建议进行设置:
OLLAMA_MODELS
:模型文件存放目录,默认目录为当前用户目录(Windows 目录:C:\Users%username%.ollama\models
,MacOS 目录:~/.ollama/models
,Linux 目录:/usr/share/ollama/.ollama/models
),如果是 Windows 系统建议修改(如:D:\OllamaModels),避免 C 盘空间吃紧OLLAMA_HOST
:Ollama 服务监听的网络地址,默认为127.0.0.1,如果允许其他电脑访问 Ollama(如:局域网中的其他电脑),建议设置成0.0.0.0,从而允许其他网络访问OLLAMA_PORT
:Ollama 服务监听的默认端口,默认为11434,如果端口有冲突,可以修改设置成其他端口(如:8080等)OLLAMA_ORIGINS
:HTTP 客户端请求来源,半角逗号分隔列表,若本地使用无严格要求,可以设置成星号,代表不受限制OLLAMA_KEEP_ALIVE
:大模型加载到内存中后的存活时间,默认为5m即 5 分钟(如:纯数字如 300 代表 300 秒,0 代表处理请求响应后立即卸载模型,任何负数则表示一直存活);我们可设置成24h,即模型在内存中保持 24 小时,提高访问速度OLLAMA_NUM_PARALLEL
:请求处理并发数量,默认为1,即单并发串行处理请求,可根据实际情况进行调整OLLAMA_MAX_QUEUE
:请求队列长度,默认值为512,可以根据情况设置,超过队列长度请求被抛弃OLLAMA_DEBUG
:输出 Debug 日志标识,应用研发阶段可以设置成1,即输出详细日志信息,便于排查问题OLLAMA_MAX_LOADED_MODELS
:最多同时加载到内存中模型的数量,默认为1,即只能有 1 个模型在内存中
Ollama 模型库
类似 Docker 托管镜像的 Docker Hub,Ollama 也有个 Library 托管支持的大模型。
传送门:https://ollama.com/library
REST API 服务
Generate a completion
Generate a completion:模型会根据输入的提示(prompt)或上下文,生成一段响应文本,以补全或续写输入内容。通常为一次性回答,用于专项问题的回答补全。
具体作用:补全输入、续写文本、回答问题、生成创意内容。
实际应用场景:文本生成、代码补全、翻译和摘要。
接口格式
POST /api/generate
:生成针对给定提示的响应,使用提供的模型。这是一个流式端点,因此将有一系列响应。最终的响应对象将包括请求的统计数据和附加数据。
Parameters 参数
model
: (必需) 模型名称prompt
: 生成响应的提示suffix
: 模型响应之后的文本images
: (可选)一组 base64 编码的图片(用于多模态模型,如llava
)
高级参数(可选)
format
: 返回响应的格式。格式可以是json
或 JSON 模式options
: 在 Modelfile 文档中列出的附加模型参数,例如temperature
system
: 系统消息到(覆盖了在Modelfile
中定义的内容)template
:要使用的提示模板(覆盖在Modelfile
中定义的内容)stream
: 如果false
,则响应将以单个响应对象返回,而不是对象流raw
: 如果true
没有格式化,则不会对提示应用格式。您可以选择在请求 API 时使用raw
参数,如果您指定了一个完整的模板提示keep_alive
:控制模型在请求后将在内存中保持加载多长时间(默认:5m
)context
(已弃用):从先前的请求返回给/generate
的上下文参数,这可以用来保持短暂的对话记忆
简单示例:
curl http://192.168.1.199:11434/api/generate -d '{
"model": "qwen2.5:0.5b",
"prompt":"你叫什么名字?",
"stream":false
}'
Generate a chat completion
Generate a chat completion:模型会根据输入的对话上下文,生成一段连贯的回复,以补全或续写对话内容。通常为连续多轮的问答,结合上下文回答问题并补全。
具体作用:生成对话回复、多轮对话支持、模拟对话场景、个性化回复。
实际应用场景:聊天机器人、客服系统、教育问答、社交娱乐。
与 "Generate a completion" 的区别?
- "Generate a completion":更通用,适用于任何文本补全任务,例如补全句子、生成文章、续写代码等。
- "Generate a chat completion":专门针对对话场景,生成对话回复,支持多轮对话和上下文理解。
接口格式
POST /api/chat
:生成与提供的模型进行聊天的下一条消息。这是一个流式端点,因此将有一系列响应。可以使用 "stream": false
禁用流式传输。最终响应对象将包括请求的统计信息和附加数据。
Parameters 参数
model
: (必需) 模型名称messages
: 聊天消息,这可以用来保存聊天记录tools
: 如果支持,模型将使用的工具。需要将stream
设置为false
其中message
对象具有以下字段:
1、role
: 消息的角色,可以是 system
, user
, assistant
或 tool
2、content
: 消息内容
3、images
(可选):要包含在消息中的图像列表(用于多模态模型如 llava
)
4、tool_calls
(可选):模型想要使用的工具列表
高级参数(可选)
format
: 返回响应的格式。格式可以是json
或 JSON 模式。options
: 在 Modelfile 文档中列出的附加模型参数,例如temperature
stream
: 如果false
,则响应将以单个响应对象返回,而不是对象流keep_alive
:控制模型在请求后将在内存中保持加载多长时间(默认:5m
)
简单示例:
curl http://192.168.1.199:11434/api/chat -d '{
"model": "qwen2.5:0.5b",
"messages": [
{
"role": "user",
"content": "你叫什么名字?"
}
],
"stream":false
}'
更多参数和使用,详见github官方 API 文档:https://github.com/ollama/ollama/blob/main/docs/api.md
Modelfile
官方 Modelfile 文档:https://github.com/ollama/ollama/blob/main/docs/modelfile.md
Format
Modelfile
的格式为:
# comment
INSTRUCTION arguments
Instruction | Description |
---|---|
FROM (required) |
定义要使用的基础模型。 |
PARAMETER |
设置 Ollama 运行模型的参数。 |
TEMPLATE |
要发送给模型的完整提示模板。 |
SYSTEM |
指定将在模板中设置的系统消息。 |
ADAPTER |
定义应用于模型的(Q)LoRA 适配器。 |
LICENSE |
指定法律许可。 |
MESSAGE |
指定消息历史记录。 |
Examples
一个简单的示例:
FROM llama3.2
# 将温度设置为1(越高越有创意,越低越连贯)
PARAMETER temperature 1
# 将上下文窗口大小设置为4096,这将控制LLM可以使用多少个token作为上下文来生成下一个token
PARAMETER num_ctx 4096
# 设置自定义系统消息以指定聊天助手的行为,如:你是马里奥,来自《超级马里奥兄弟》,扮演一名助手的角色。
SYSTEM """You are Mario from super mario bros, acting as an assistant."""
Modelfile 的使用示例:
- 下载模型文件 并 添加一个 Modelfile 示例文件,如:名为 Modelfile 的文件
ollama pull llama3.2
获取模型文件中使用的模型。ollama create NAME -f ./Modelfile
从此模型文件创建模型ollama run NAME
运行此模型
需要查看给定模型的 Modelfile,使用 ollama show --modelfile
命令进行查看。
ollama show --modelfile qwen2.5:0.5b
Modelfile 语法使用
FROM
FROM(必需):定义创建模型时使用的基模型
FROM <model name>:<tag>
从现有的模型中创建,如 llama3.2模型
FROM llama3.2
PARAMETER
PARAMETER:指令定义了在运行模型时可以设置的参数。
可以通过添加 PARAMETER 的方式来影响模型响应的文本输出,具体参数如下:
PARAMETER <parameter> <parametervalue>
Parameter | 描述 | 值的类型 | 使用示例 |
---|---|---|---|
mirostat | 启用Mirostat算法以控制困惑度(perplexity)。 Mirostat算法可以有效减少结果中重复的发生。perplexity是指对词语预测的不确定性 (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) | int | mirostat 0 |
mirostat_eta | 它影响算法对生成文本反馈的响应速度。学习率较低会导致调整更慢,而较高的学习率则会使算法反应更加迅速。 (Default: 0.1) | float | mirostat_eta 0.1 |
mirostat_tau | 控制输出的连贯性和多样性之间的平衡。较低的值会使得文本更集中和连贯,而较高的值则会带来更大的多样性。 (Default: 5.0) | float | mirostat_tau 5.0 |
num_ctx | 设置生成下一个token时使用的上下文窗口大小。(Default: 2048) | int | num_ctx 4096 |
repeat_last_n | 设定了模型需要回顾多少信息来以防止重复。 (Default: 64, 0 = disabled, -1 = num_ctx) | int | repeat_last_n 64 |
repeat_penalty | 设定了重复惩罚的强度。较高的值(例如,1.5)会更强烈地处罚重复,而较低的值(如0.9)则会宽容一些. (Default: 1.1) | float | repeat_penalty 1.1 |
temperature | 模型的温度。 temperature通常用于控制随机性和多样性,提高温度意味着更高的随机性,可能导致更出乎意料但可能更有创意的答案。(Default: 0.8) | float | temperature 0.7 |
seed | 设置了生成时使用的随机数种子。设置特定的数值将使得模型对于相同的提示会生成相同的文本。(Default: 0) | int | seed 42 |
stop | 设置停止序列。当模型遇到这个模式时,会停止生成文本并返回。可以通过在Modelfile中指定多个独立的stop 参数来设置多个停止模式。 |
string | stop “AI assistant:” |
tfs_z | 尾部自由采样被用来减少不那么可能的token对输出的影响。较高的值(例如,2.0)会更大幅度地减小这种影响,而设置为1.0则禁用此功能。(default: 1) | float | tfs_z 1 |
num_predict | 生成文本时预测的最大token数量。 (Default: 128, -1 = infinite generation(无限制), -2 = fill context(根据上下文填充完整fill the context to its maximum)) | int | num_predict 42 |
top_k | 减少生成无意义内容的概率。较高的值(例如,100)会使答案更加多样,而较低的值(如,10)则会更为保守。 (Default: 40) | int | top_k 40 |
top_p | top-k协同工作。较高的值(例如,0.95)将导致更丰富的文本多样性,而较低的值(如,0.5)则会生成更聚焦和保守的内容。(Default: 0.9) | float | top_p 0.9 |
TEMPLATE
官方 TEMPLATE 文档:https://github.com/ollama/ollama/blob/main/docs/template.md
TEMPLATE:将完整提示模板传递给模型。它可能包括(可选)系统消息、用户消息和模型的响应。注意:语法可能因模型而异。模板使用 Go 模板语法。
Template Variables(模板变量)
Variable(变量) | 描述 |
---|---|
{{ .System }} |
用于指定自定义行为的系统消息。 |
{{ .Prompt }} |
用户的提示消息。 |
{{ .Response }} |
来自模型的回应。在生成响应时,这部分之后的文本会被忽略。 |
以一个 TEMPLATE 为例:
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""
大致流程如下:
首先,检查是否存在.System
(消息列表),如果存在,继续执行后续逻辑;否则跳过;
如果 .System
存在,则插入一个标记 <|im_start|>system
(这通常用于表示系统消息的开始)。
之后,插入 .System
的内容(系统消息),插入一个标记 <|im_end|>
,表示系统消息的结束;
最后,end
表示结束 if .System
的条件块。.Prompt
的判断逻辑以此类推。
可以多参考ollama下开源模型默认的Modelfile设置,可以设置Role为"tool"的工具支持调用等。不同配置产生的效果还没有具体测试,有经验或感兴趣的朋友可以一起多多交流下。
SYSTEM
SYSTEM:指定在模板中使用的系统消息。
SYSTEM """<system message>"""
ADAPTER
ADAPTER:指定一个应该应用于基本模型的经过微调的LoRA适配器。适配器的值应该是绝对路径或相对于Modelfile的路径。基本模型应该用FROM指令指定。如果基本模型与适配器所调优的基本模型不相同,则行为将是不稳定的。
Safetensor adapter
ADAPTER <path to safetensor adapter>
当前支持的 Safetensor 适配器:
- Llama(包括 Llama 2、Llama 3 和 Llama 3.1)
- Mistral(包括 Mistral 1、Mistral 2 和 Mixtral)
- Gemma(包括 Gemma 1 和 Gemma 2)
GGUF adapter
ADAPTER ./ollama-lora.gguf
LICENSE
LICENSE:允许指定与这个 Modelfile 关联使用的模型所采用的合法许可协议。
LICENSE """
<license text>
"""
MESSAGE
MESSAGE:允许您在模型回复时指定一个消息历史,供模型在响应时使用。多次使用 MESSAGE 命令可以迭代来构建一段对话,该对话将指导模型以类似的方式进行回答。这与在chat模式下role的设定规则相符。
MESSAGE <role> <message>
Role(角色) | 描述 |
---|---|
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
指令首先出现以保持易于阅读。