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.ggufDeepSeek-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的连接(否则可能长时间白屏)
Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐