基本介绍
Ollama 是一个开源的大型语言模型服务工具,专为在服务器上便捷部署和运行大型语言模型(LLMs)而设计,它提供了一个简洁且用户友好的命令行界面,通过这一界面,用户可以轻松地部署和管理各类开源的 LLM。具有以下特点和优势:
- 开源免费:Ollama 以及其支持的模型完全开源免费,任何人都可以自由使用、修改和分发
- 简化部署:Ollama 目标在于简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型,无需复杂的配置和安装过程,只需几条命令即可启动和运行Ollama
- 轻量级与可扩展:作为轻量级框架,Ollama 保持了较小的资源占用,同时具备良好的可扩展性,允许用户根据需要调整配置以适应不同规模的项目和硬件条件,即使在普通笔记本电脑上也能流畅运行。
- API支持:提供了一个简洁的 API,使得开发者能够轻松创建、运行和管理大型语言模型实例,降低了与模型交互的技术门槛。
- 预构建模型库:包含一系列预先训练好的大型语言模型,用户可以直接选用这些模型应用于自己的应用程序,无需从头训练或自行寻找模型源。
官方站点:ollama.com/
Github:github.com/ollama/olla…
安装使用
注意,在windows下安装ollama是不允许自定义位置的,会默认安装在系统盘,而后续使用的大模型可以选择自定义保存路径。
安装过程,非常简单:
安装完成以后,新开一个命令终端并输入命令ollama,如果效果如下则表示安装成功:
拉取并运行一个大模型:
**
bash
ollama run qwen2.5:3b
常用命令
这里的命令,全系统通用的。
| 命令 | 描述 |
|---|---|
| ollama list | 列出本地拉取的模型镜像列表 |
| ollama pull | 从远程仓库中拉取模型镜像文件 |
| ollama run | 运行模型,如果本地没有则先默认执行pull命令进行拉取 |
| ollama ps | 展示当前加载的模型、它们所占的内存大小以及使用的处理器类型(GPU 或 CPU) |
| ollama serve | 启动ollama的http网络服务 |
| ollama rm | 删除模型 |
| ollama cp | 复制模型 |
| ollama push | 推送模型到远程仓库,需要在ollama官网上面注册账号。 |
| ollama create | 从模型文件Modelfile创建自定义模型 |
| help | 帮助提示 |
模型仓库
ollama仓库地址:ollama.com/library
hugging face仓库地址:huggingface.co/models 【镜像】hf-mirror.com/models
魔塔社区:modelscope.cn/models
自定义模型
魔塔下载大模型说明文档:www.modelscope.cn/docs/模型的下载
使用魔塔下载大模型文件,安装魔塔工具(python3.10^):
**
bash
pip install modelscope
基于python脚本调用魔塔拉取模型文件,modelscope_download.py,代码:
**
python
from modelscope import snapshot_download
# 模型名字
name = 'qwen/Qwen2.5-7B-Instruct-GGUF'
# 模型存放路径,需要手动创建对应的目录,并保证有足够的空间,否则下载出错。
model_path = r'C:\huggingface'
model_dir = snapshot_download(
name, # 仓库中的模型名
cache_dir=model_path, # 本地保存路径,
revision='master', # 分支版本
allow_file_pattern="Qwen2.5-7B-Instruct-GGUF" # 模糊匹配的文件名
)
# modelscope download --model=qwen/Qwen2.5-7B-Instruct-GGUF --include "qwen2.5-7b-instruct-q5_k_m*.gguf" --local_dir .
执行效果如下:
Modelfile
Ollama自定义大模型需要通过Modelfile定义和配置模型的行为和特性,在使用 Ollama 进行本地部署和运行大型语言模型时,Modelfile 扮演着至关重要的角色。
Modelfile 是使用 Ollama 创建和共享模型的方案。它包含了构建模型所需的所有指令和参数,使得模型的创建和部署变得简单而直接。
常用指令
Modelfile中不区分大小写,但是强烈要求一定大写!!
| 操作说明 | 描述 |
|---|---|
FROM <model name>:<tag> (必须) | 定义要使用的基础模型,如果值是一个路径表示镜像文件在本地,如果是模型名称则默认到官方仓库中拉取。 |
SYSTEM """<system message>""" | 指定将在模板中设置的系统消息. |
PARAMETER <parameter> <parametervalue> | 设置 Ollama 如何运行模型的参数 |
TEMPLATE | 要发送给模型的完整提示模板. |
ADAPTER | 定义适用于模型的 (Q)LoRA 适配器. |
LICENSE | 指定合法的许可证。 |
MESSAGE <role> <message> | 指定消息历史记录。 |
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 将停止生成文本并返回。可以通过stop在模型文件中指定多个单独的参数来设置多个停止模式。 | string | stop “AI assistant:” |
| tfs_z | 尾部自由采样用于减少输出中可能性较小的标记的影响。较高的值(例如 2.0)将进一步减少影响,而值 1.0 则禁用此设置。(默认值:1) | float | tfs_z 1 |
| num_predict | 生成文本时要预测的最大标记数。(默认值:128,-1 = 无限生成,-2 = 填充上下文) | 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 |
TEMPLATE的模板变量
| 变量 | 描述 |
|---|---|
{{ .System }} | 用于指定自定义行为的系统消息。 |
{{ .Prompt }} | 用户提示消息。 |
{{ .Response }} | 来自模型的响应。生成响应时,此变量后的文本将被省略。 |
MESSAGE的有效角色
| 角色 | 描述 |
|---|---|
| system | 为模型提供系统消息的另一种方法。 |
| user | 用户可能询问的示例消息。 |
| assistant | 模型应如何响应的示例消息。 |
创建模型描述文件Modelfile,编写内容如下:
**
dockerfile
FROM C:\huggingface\qwen\Qwen2___5-7B-Instruct-GGUF\Qwen2.5-7B-Instruct.Q5_0.gguf
# set the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 0.7
PARAMETER top_p 0.8
PARAMETER repeat_penalty 1.05
PARAMETER top_k 20
TEMPLATE """{{ if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{ .System }}
{{- if .Tools }}
# Tools
You are provided with function signatures within <tools></tools> XML tags:
<tools>{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}{{- end }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}"""
# set the system message
SYSTEM """你是江小白, 由林墨创建. 你是一个非常厉害的工具人."""
文档:qwen.readthedocs.io/en/latest/r…
通过运行以下命令来创建ollama模型
**
highlighter-
ollama create qwen2.5-7b -f ./Modelfile
运行新建的ollama模型:
**
highlighter-
ollama run qwen2.5-7b