目录
一、官网
二、安装方式一:window10版本下载
三、安装方式二:linux版本docker
四、 模型库
五、运行模型
六、API服务
七、python调用
ollama库调用
langchain调用
requests调用
aiohttp调用
八、模型添加方式
1.线上pull
2.导入 GGUF 模型文件
3.导入 safetensors 模型文件
九、部署Open WebUI
参考链接:Ollama完整教程:本地LLM管理、WebUI对话、Python/Java客户端API应用 - 老牛啊 - 博客园 (cnblogs.com)https://www.cnblogs.com/obullxl/p/18295202/NTopic2024071001
一、官网
在 macOS 上下载 Ollama - Ollama 中文
二、安装方式一:window10版本下载
安装完成没有提示。 接下来配置环境变量!
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。右下角图标如下
如果没有,则去打开一下
黑窗口查看一下 版本
浏览器查看一下API服务:127.0.0.1:11434
如果出现连接不上,则检查一下环境变量是不是配错了,是不是没有E盘(如果你照抄)。
运行一个0.5b的qwen模型
ollama run qwen2:0.5b
看看API访问情况:
提问:
对话:
① system 代表系统设定(也就是告诉chatGPT他的角色)
② user 表示用户
③ assistant 表示GPT的回复
三、安装方式二:linux版本docker
Olama现已作为官方Docker镜像提供 · Olama博客 - Ollama 中文
docker run -d -v ollama:/root/.ollama -p 11435:11434 --name ollama ollama/ollama
进入容器内部:
docker exec -it ollama /bin/bash
查看ollama执行
ollama
ollama serve # 启动ollama
ollama create # 从模型文件创建模型
ollama show # 显示模型信息
ollama run # 运行模型,会先自动下载模型
ollama pull # 从注册仓库中拉取模型
ollama push # 将模型推送到注册仓库
ollama list # 列出已下载模型
ollama ps # 列出正在运行的模型
ollama cp # 复制模型
ollama rm # 删除模型
# 本地模型列表
>ollama list
NAME ID SIZE MODIFIED
gemma2:9b c19987e1e6e2 5.4 GB 7 days ago
qwen2:7b e0d4e1163c58 4.4 GB 10 days ago
# 删除单个模型
>ollama rm gemma2:9b
deleted 'gemma2:9b'
>ollama list
NAME ID SIZE MODIFIED
qwen2:7b e0d4e1163c58 4.4 GB 10 days ago
# 启动本地模型
>ollama run qwen2:0.5b
>>>
# 运行中模型列表
>ollama ps
NAME ID SIZE PROCESSOR UNTIL
qwen2:0.5b 6f48b936a09f 693 MB 100% CPU 4 minutes from now
# 复制本地大模型:ollama cp 本地存在的模型名 新复制模型名
>ollama cp qwen2:0.5b Qwen2-0.5B
copied 'qwen2:0.5b' to 'Qwen2-0.5B'
>ollama list
NAME ID SIZE MODIFIED
Qwen2-0.5B:latest 6f48b936a09f 352 MB 4 seconds ago
qwen2:0.5b 6f48b936a09f 352 MB 29 minutes ago
qwen2:7b e0d4e1163c58 4.4 GB 10 days ago
四、 模型库
library (ollama.com)
五、运行模型
模型要求
这里我们运行一个要求最小的0.5B的qwen模型。
注意这是在容器内部运行的:
ollama run qwen2:0.5b
root@535ec4243693:/# ollama run qwen2:0.5b
pulling manifest
pulling 8de95da68dc4... 100% ▕████████████████████████████████████▏ 352 MB
pulling 62fbfd9ed093... 100% ▕████████████████████████████████████▏ 182 B
pulling c156170b718e... 100% ▕████████████████████████████████████▏ 11 KB
pulling f02dd72bb242... 100% ▕████████████████████████████████████▏ 59 B
pulling 2184ab82477b... 100% ▕████████████████████████████████████▏ 488 B
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> 你是谁
我是来自阿里云的超大规模语言模型——通义千问。我能够理解、生产、传播各种语言和文字,可以回答您在任
何语言或任何问题的问题。
>>> Send a message (/? for help)
六、API服务
curl --location --request POST 'http://127.0.0.1:11435/api/generate' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "qwen2:0.5b",
"prompt": "你知道麦克斯韦吗"
}'
curl --location --request POST 'http://127.0.0.1:11435/api/chat' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "qwen2:0.5b",
"messages": [
{
"role": "system",
"content": "你是一个历史专家"
},
{
"role": "user",
"content": "东北三省是哪三个?"
},
{
"role": "assistant",
"content": "东北三省是指中国东北地区(不含内蒙古)。它包括吉林省的延边朝鲜族自治州、黑龙江省的黑河市和哈尔滨市,以及辽宁省的抚顺市、本溪市、丹东市。其中,延边州包括临山子、龙沙等13个县市。"
},
{
"role": "user",
"content": "张作霖的势力是在这里兴起的吗"
}
],
"stream": false
}'
① system 代表系统设定(也就是告诉chatGPT他的角色)
② user 表示用户
③ assistant 表示GPT的回复
七、python调用
- temperature:用于调整生成结果的创造性程度,设置越高,生成的文本越新颖、越独特,设置越低,结果更集中。
- stream:默认false,是否流式传输回部分进度。
- format: 转录输出的格式,可选项包括json、str等。
ollama库调用
pip install ollama
import ollama
host = "127.0.0.1"
port = "11434"
client = ollama.Client(host=f"http://{host}:{port}")
res = client.chat(model="qwen2:0.5b",
messages=[{"role": "user", "content": "你是谁"}],
options={"temperature": 0})
print(res)
langchain调用
pip install langchain
pip install langchain_community
from langchain_community.llms import Ollama
host="127.0.0.1"
port="11434" #默认的端口号为11434
llm=Ollama(base_url=f"http://{host}:{port}", model="qwen2:0.5b",temperature=0)
res=llm.invoke("你是谁")
print(res)
requests调用
pip install requests
host="127.0.0.1"
port="11434"
url = f"http://{host}:{port}/api/chat"
model = "qwen2:0.5b"
headers = {"Content-Type": "application/json"}
data = {
"model": model, #模型选择
"options": {
"temperature": 0. #为0表示不让模型自由发挥,输出结果相对较固定,>0的话,输出的结果会比较放飞自我
},
"stream": False, #流式输出
"messages": [{
"role": "system",
"content":"你是谁?"
}] #对话列表
}
response=requests.post(url,json=data,headers=headers,timeout=60)
res=response.json()
print(res)
aiohttp调用
pip install aiohttp
Welcome to AIOHTTP — aiohttp 3.10.5 documentation
import asyncio
import json
import aiohttp
host = "127.0.0.1"
port = "11434"
url = f"http://{host}:{port}/api/chat"
headers = {
'Content-Type': 'application/json'
}
payload = json.dumps({
"model": "qwen2:0.5b",
"options": {
"temperature": 0. # 为0表示不让模型自由发挥,输出结果相对较固定,>0的话,输出的结果会比较放飞自我
},
"messages": [
{"role": "system", "content": "你是一个历史砖家,专门胡说八道,混淆历史"},
{"role": "user", "content": "吕雉和吕不韦是啥关系?汉朝是大秦帝国的延续吗?"}
],
"stream": False
})
async def main():
start_time = asyncio.get_event_loop().time()
async with aiohttp.ClientSession() as session:
try:
async with session.post(url, headers=headers, data=payload, timeout=60) as response:
if response.status == 200:
data = await response.text()
print(data)
end_time = asyncio.get_event_loop().time()
elapsed_time = end_time - start_time
except asyncio.TimeoutError:
print("请求超时了")
finally:
print(f"耗时:0.0570秒")
if __name__ == '__main__':
asyncio.run(main())
八、模型添加方式
1.线上pull(推荐)
即上述教程采用的方式。
2.导入 GGUF 模型文件(推荐)
示例:
从 HF 或者 ModeScope 下载了 GGUF 文件:qwen2-0_5b-instruct-q4_0.gguf
新建一个文件夹来存放GGUF文件,例如我存放在E:\huggingface_models\qwen2-05b-q4中,在GGUF文件的同级,创建一个文件名为Modelfile的文件,该文件的内容如下:
FROM ./qwen2-0_5b-instruct-q4_0.gguf
打开终端,执行命令导入模型文件:
ollama create 模型名称 -f ./Modelfile
导入成功之后,我们就可以通过list
命名,看到名为Llama-3-8B的本地模型了,后续可以和其他模型一样进行管理了。
3.导入 safetensors 模型文件(不推荐,操作过程太慢了)
示例:
https://huggingface.co/Qwen/Qwen2.5-0.5B/tree/main
从 HF 或者 ModeScope 下载了 safetensors 文件(文件目录为:Mistral-7B)
git lfs install
git clone https://www.modelscope.cn/rubraAI/Mistral-7B-Instruct-v0.3.git Mistral-7B
然后,我们转换模型(结果:Mistral-7B-v0.3.bin
):
python llm/llama.cpp/convert.py ./Mistral-7B --outtype f16 --outfile Mistral-7B-v0.3.bin
接下来,进行量化量化:
llm/llama.cpp/quantize Mistral-7B-v0.3.bin Mistral-7B-v0.3_Q4.bin q4_0
最后,通过 Ollama 导入到本地磁盘,创建Modelfile
模型文件:
FROM Mistral-7B-v0.3_Q4.bin
执行导入命令,导入模型文件:ollama create 模型名称 -f ./Modelfile
>ollama create Mistral-7B-v0.3 -f ./Modelfile
transferring model data
using existing layer sha256:647a2b64cbcdbe670432d0502ebb2592b36dd364d51a9ef7a1387b7a4365781f
creating new layer sha256:459d7c837b2bd7f895a15b0a5213846912693beedaf0257fbba2a508bc1c88d9
writing manifest
success
九、部署Open WebUI
🏡 Home | Open WebUI