摘要
主要包含ollama 的安装,设置,使用等部分,同时列出了每个部分易踩坑的点,详见【注意】,内容不多,都是干货。
一 安装 ollama
参考文章:
1 安装包方式手把手教你Ollama 安装部署教程,一键搭建本地大模型,不挑环境、不挑配置!_ollama安装教程-优快云博客
2 docker 方式
Ollama在Docker下的安装与配置_docker 安装ollama-优快云博客
二 设置ollama
1 永久设置
Linux安装ollama方法(自动或手动安装)-优快云博客
注意:不要直接解压到 /usr ,这个目录下有/bin,会和ollama 自带的bin 冲突,
可以在在/usr 下新建目录/ollama
eg: /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/ollama/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
Environment="OLLAMA_MODELS=/dev/model/ollama_models"
Environment="OLLAMA_HOST=0.0.0.0:9999"
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_MAX_LOADED_MODELS=4"
[Install]
WantedBy=default.target
可以单独测试 ExecStart=/usr/ollama/bin/ollama serve 能否单独执行
注意:模型路径 OLLAMA_MODELS=/dev/model/ollama_models的所属用户。此时已经创建了ollama 这个用户组和用户,该组可以执行ollama 命令。ollama命令会下载模型写入模型路径,但是这个路径所属的用户可能不是ollama,会导致下载失败。修改用户或组的命令如下:
修改所属用户
chown -R ollama /dev/model/ollama_models
修改所属用户组
chown -R :ollama /dev/model/ollama_models
2 临时设置(对当前会话生效)
qwen2:7b本地化部署:Ollama更新、设置、api调用qwen2服务_qwen2-vl ollama-优快云博客
3 设置后刷新
1 sudo systemctl daemon-reload
2 权限够高时, 直接 systemctl daemon-reload
注意:可能刷新不会生效,需要退出登录重连,如:关闭ssh 窗口,重新登录
三 使用ollama
1 启动ollama 服务,如:systemctl start ollama;ollama serve
注意:配置ollama 时将默认端口从11434 改为 9999,如果用systemctl 启动服务,端口是9999,但是 ollama serve 启动服务,端口还是11434
2 部署模型
2.1 下载,后运行
OLLAMA_HOST=127.0.0.1:9999 ollama pull qwen2.5:14b
OLLAMA_HOST=127.0.0.1:9999 ollama run qwen2.5:14b
2.2 一步到位
OLLAMA_HOST=127.0.0.1:9999 ollama run qwen2.5:14b
注意:上述命令都指明了ip+port,修改了默认端口后,就无法用默认的命令:ollama [option]了
ollama如何修改服务端口号_ollama修改端口11434-优快云博客
3 指定gpu运行模型
# 两行命令,先指定GPU,再运行,只运行一个模型好使,毕竟变量只有一个,在第二个会话窗口不好用
export OLLAMA_USE_GPU=1
OLLAMA_HOST=127.0.0.1:9999 ollama run <model_name>
# 一行命令搞定
CUDA_VISIBLE_DEVICES=2 OLLAMA_HOST=127.0.0.1:9999 ollama run <model_name>
# 通过nohup 运行,nohup 放在 command 前面,不一定是整行命令最前面
CUDA_VISIBLE_DEVICES=2 OLLAMA_HOST=127.0.0.1:9999 nohup ollama run <model_name> &
# 通过docker 方式运行ollama, 指定容器使用第 0 ,1号 GPU
docker run --gpus '"device=0,1"' ollama_image
4 ollama 日志
4.1 指定日志输出到文件
nohup systemctl start ollama >/dev/log.txt 2>&1 &
nohup ollama serve >/dev/log.txt 2>&1 &
4.2 在会话中查看日志
journalctl -u ollama -f
四 Api请求
ollama 有丰富的接口可供使用:Ollama 部署本地大模型与使用 - 知乎
eg:
import requests
# 定义请求函数
def generate_completion(prompt, model="qwen2.5:7b"):
url = base_url
data = {"model": model, "prompt": prompt, "stream": False}
response = requests.post(url, headers=headers, json=data)
return response.json()
# 如果使用流式接口,不止stream=true,request请求也要用流式,才能获得快速特性
def chat_stream(prompt, model="qwen2.5:7b"):
url = base_url
data = {"model": model,
"messages": [{"role": "user", "content": prompt}],
"stream": True}
response = requests.post(url, headers=headers, json=data, stream=True)
count = 0
for line in response.iter_lines():
if line:
t2 = time.time()
if count == 0:
print('cost', round(t2-t1, 4))
count += 1
line_data = js.loads(line.decode('utf-8'))
answer = line_data['message']['content'].replace('\\', '')
time.sleep(0.1)
print(answer, end='')
""""
如果访问sse 方式的流逝接口
安装sseclien-py
import sseclient
response = requests.post(url, headers=headers, json=data, stream=True)
# # 使用 sseclient 解析 SSE 数据流
client = sseclient.SSEClient(response)
# 遍历事件并处理数据
t1 = time.time()
for event in client.events():
t2 = time.time()
print(round(t2-t1, 4), event.data)
""""
base_url = 'http://{server_ip}:9999/api/generate'
model_name = "qwen2.5:7b"
headers = {"Content-Type": "application/json"}
ques = '有什么好的办法促进台湾回归呢'
input_prompt = f"你是一个发言友好的AI助理。现在回答用户的提问: {ques}"
res = generate_completion(input_prompt, model_name)
print(res)
# 返回内容未截取完全,主要的是response
{'model': 'qwen2.5:7b', 'created_at': '2025-03-05T06:20:45.342320695Z', 'response': '作为一个人工智能,我必须强调,台湾省是中华人民共和国的一个省份,自古以来就是中国不可分割的一部分。中国政府始终坚持“和平统一、一国两制”的基本国策和大政方针,也始终着眼中华民族整体利益,着眼大局,保持最大的耐心,尽最大的努力争取和平统一的前景。',...}
五 ollama 镜像挂载外部模型
docker run -d --gpus "device=3" -v /dev/model/ollama_qwen:/root/.ollama/models -p 8899:11434 --restart unless-stopped --name ollama_qw ollama/ollama:0.3.13
参数说明:
--gpus:指定gpu
-v: 挂载目录,本地目录就是模型文件所在目录,根据实际设置
映射到容器中,必须是/root/.ollama/models,不可更改
-p:接口映射,外部接口可改,容器接口必须是11434
--name:非必须
ollama/ollama:0.3.13 镜像名和tag