首页 > 其他分享 >Ollama部署及模型功能使用

Ollama部署及模型功能使用

时间:2025-01-12 09:33:30浏览次数:1  
标签:Modelfile 部署 Ollama 模型 响应 设置 ollama

Ollama部署及模型功能使用

Ollama官网

Ollama官方 GitHub 源代码仓库

安装部署

本地安装

自动安装
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安装完成之后,有几个常用的系统环境变量参数建议进行设置:

  1. OLLAMA_MODELS:模型文件存放目录,默认目录为当前用户目录(Windows 目录:C:\Users%username%.ollama\models,MacOS 目录:~/.ollama/models,Linux 目录:/usr/share/ollama/.ollama/models),如果是 Windows 系统建议修改(如:D:\OllamaModels),避免 C 盘空间吃紧
  2. OLLAMA_HOST:Ollama 服务监听的网络地址,默认为127.0.0.1,如果允许其他电脑访问 Ollama(如:局域网中的其他电脑),建议设置成0.0.0.0,从而允许其他网络访问
  3. OLLAMA_PORT:Ollama 服务监听的默认端口,默认为11434,如果端口有冲突,可以修改设置成其他端口(如:8080等)
  4. OLLAMA_ORIGINS:HTTP 客户端请求来源,半角逗号分隔列表,若本地使用无严格要求,可以设置成星号,代表不受限制
  5. OLLAMA_KEEP_ALIVE:大模型加载到内存中后的存活时间,默认为5m即 5 分钟(如:纯数字如 300 代表 300 秒,0 代表处理请求响应后立即卸载模型,任何负数则表示一直存活);我们可设置成24h,即模型在内存中保持 24 小时,提高访问速度
  6. OLLAMA_NUM_PARALLEL:请求处理并发数量,默认为1,即单并发串行处理请求,可根据实际情况进行调整
  7. OLLAMA_MAX_QUEUE:请求队列长度,默认值为512,可以根据情况设置,超过队列长度请求被抛弃
  8. OLLAMA_DEBUG:输出 Debug 日志标识,应用研发阶段可以设置成1,即输出详细日志信息,便于排查问题
  9. 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 : 消息的角色,可以是 systemuserassistanttool

​ 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 的使用示例:

  1. 下载模型文件 并 添加一个 Modelfile 示例文件,如:名为 Modelfile 的文件
  2. ollama pull llama3.2 获取模型文件中使用的模型。
  3. ollama create NAME -f ./Modelfile 从此模型文件创建模型
  4. 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 指令首先出现以保持易于阅读。

标签:Modelfile,部署,Ollama,模型,响应,设置,ollama
From: https://www.cnblogs.com/cyanty/p/18666616

相关文章