ollama本地部署
ollama本地部署
1. Ubuntu系统
1.1 docker建立(可选)
假设你要把整个ollama服务端和它的配套UI都放在一个ubuntu系统的docker里面,方便部署。
使用以下命令建立在这个docker容器(当然你也可以选用官方ollama的docker容器,大概更省事,这里只是说怎么在已有cuda的基本环境下搭建ollama):
docker run --name ollama_server --runtime=nvidia --gpus all -p 11434:11434 -p 3000:8080 -v 【你要保存模型的路径】:/home -it nvidia/cuda:12.1.0-cudnn8-devel-ubuntu20.04 bash
将本地计算机磁盘上的文件复制到docker内:
docker cp 本地磁盘路径 docker名:docker内文件路径
1.2 安装基本依赖库
apt-get update
apt-get install -y sudo curl screen systemctl vim git language-pack-zh-hans
locale-gen zh_CN.UTF-8
echo "export LC_ALL=zh_CN.UTF-8">> ~/.bashrc
source ~/.bashrc
配置screen默认启动bash
vi ~/.screenrc
在配置文件中添加:
defshell -bash
保存退出即可。
1.3 安装ollama
如果用于安装的设备拥有上网的妙妙工具的话,可以使用官方提供的一键安装脚本:
curl -fsSL https://ollama.com/install.sh | sh
如果没有的话,就得按照手动处理一步步来了,因为一键脚本会因为网络超时报错。
首先,手动下载ollama的压缩包,然后放到要安装的docker内磁盘上:
https://ollama.com/download/ollama-linux-amd64.tgz
将压缩包解压到系统安装路径:
sudo tar -C /usr -xzf ollama-linux-amd64.tgz
添加为自动启动服务:
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)
创建配置文件:
vi /etc/systemd/system/ollama.service
在配置文件中添加以下内容并保存(按i进入输入模式后右键粘贴,然后按esc,输入:wq最后回车退出):
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
Environment="OLLAMA_MODELS=改成你要保存模型的路径" # 确保该文件夹有足够权限操作!
[Install]
WantedBy=default.target
如果服务无法启动,检查保存模型的文件夹是否有足够操作权限!
启动服务
sudo systemctl daemon-reload
sudo systemctl enable ollama
1.4 启动ollama
启动ollama(如果以后运行时,提示ollama没有启动,就用这个命令启动)
sudo systemctl start ollama
查询ollama运行状态
sudo systemctl status ollama
监控服务是否dead并自动重启的sh脚本
#!/bin/bash
SERVICE="ollama"
while true; do
STATUS=$(systemctl show $SERVICE | grep ActiveState | awk -F= '{print $2}')
RESULT=$(systemctl show $SERVICE | grep Result | awk -F= '{print $2}')
if [[ $STATUS == "active" ]]; then
echo "$(date): $SERVICE is $STATUS."
elif [[ $STATUS == "dead" ]]; then
echo "$(date): $SERVICE is $STATUS. Starting $SERVICE..."
systemctl start $SERVICE
elif [[ $STATUS == "failed" ]]; then
echo "$(date): $SERVICE is $STATUS. No action taken."
systemctl start $SERVICE
else # inactivate
echo "$(date): $SERVICE is $STATUS. Starting $SERVICE..."
systemctl start $SERVICE
fi
sleep 30
done
1.5 云端模型导入
ollama基本操作包括:
# 显示模型列表。
ollama list
# 显示模型信息
ollama show
# 从模型库中拉取模型
ollama pull
# 上传模型
ollama push
# 拷贝模型
ollama cp
# 删除模型
ollama rm
# 运行模型
ollama run
可以用ollama pull拉取的官方云端模型仓库为:https://ollama.com/library
例如:
ollama pull deepseek-r1:70b
注:拉取过大的模型可能超时中断,但是支持断点续传,因此,可以写一个循环脚本拉取。
#!/bin/bash
while true
do
ollama pull deepseek-r1:70b
sleep 60 # 防止下载完成后过于密集的请求
done
1.5 本地模型导入
本地导入模型格式为gguf模型,可以在huggle face上找到其他人开源和量化后的gguf模型。
ollama提供转换为gguf的工具,但考虑到量化的运算量与复杂性,使用开源量化模型更便捷。
下载.gguf格式的模型后,将其放入docker内部磁盘,在相同路径下新建一个同名的.modelfile配置文件。
官方modelfile语法文档:https://github.com/ollama/ollama/blob/main/docs/modelfile.md
在modelfile中配置模型的各种参数,包括导入模型文件路径,对话模板,停止符等。
官方演示样例:
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this one, replace the FROM line with:
# FROM llama3.2:latest
FROM /Users/pdevine/.ollama/models/blobs/sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
使用vi xxx.modelfile进入,在里面添加文本(template和stop结束符需要根据实际使用的模型提供的模板去写):
from xxx.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|begin▁of▁sentence|>"
PARAMETER stop "<|end▁of▁sentence|>"
PARAMETER stop "<|User|>"
PARAMETER stop "<|Assistant|>"
保存并退出文本编辑,然后使用命令将本地gguf模型导入ollama内:
ollama create xxx -f xxx.modelfile
其中,xxx为模型名,导入完成后,就可以使用命令运行该模型:
ollama run xxx
运行模式使用/clear清空对话内容,使用/bye退出对话。
注1:该对话模式为直接输入prompt的模式,更接近于文本补全,与封装后的直观对话有差异
注2:导入模型过程中复制了本地磁盘文件的信息,在导入完成后,删除原文件也不会影响ollama中模型的推理使用。
1.6 分块模型合并
特殊情况:模型很大,下载下来的是包含多个包含序号的gguf分块的模型文件。
例如DeepSeek-R1-Distill-Llama-70B-Q6_K-00001-of-00002.gguf和DeepSeek-R1-Distill-Llama-70B-Q6_K-00002-of-00002.gguf2个文件都属于模型DeepSeek-R1-Distill-Llama-70B-Q6_K。
这种情况的处理方法:暂未搞定,可能直接用llama.cpp解决
2. Windows系统
2.1 安装
下载ollama的官方安装包:https://ollama.com/download/windows
2.2 配置模型保存路径
在电脑-属性-高级系统设置-环境变量中添加环境变量OLLAMA_MODELS,值设置为保存模型的文件夹路径。
2.3 启动ollama
安装包似乎无法修改路径,默认安装路径的启动位置在:
C:\Users\【windows用户名】\AppData\Local\Programs\Ollama\ollama.exe
一旦退出后,该程序无法双击直接启动(因此它也没有被添加到桌面图标),你需要打开cmd,输入ollama.exe来运行它。
2.4 拉取模型
同样从官方模型云端仓库拉取模型:https://ollama.com/library
不过windows需要使用download.bat脚本来编写循环拉取:
:loop
ollama pull qwen2.5:7b
timeout /t 60 /nobreak >nul
goto loop
3. UI部署
3.1 open-webui
1、安装anaconda,安装完之后需要重启终端
2、创建python版本>=3.11的虚拟环境
conda create -n open-webui python==3.12
3、激活虚拟环境
conda activate open-webui
4、安装open-webui(需要很久)
pip install open-webui -i https://mirrors.aliyun.com/pypi/simple/
5、启动open-webui服务端
open-webui serve
6、用浏览器从外部访问地址
http://ip地址:3000
7、数据库路径(删除以重置管理员)
/root/anaconda3/envs/open-webui/lib/python3.12/site-packages/open_webui/data/webui.db
8、在~/.bashrc中添加环境变量
export WEBUI_AUTH=False # 关闭用户注册
export ENABLE_OPENAI_API=0 # 关闭openai的连接(否则可能长时间白屏)
更多推荐


所有评论(0)