DeepSeek已经火了很长一段时间了,但是相关文章眼花缭乱,其实博主在年前DeepSeek未爆火的时候已经体验过官方的满血版了,只不过爆火后服务器经常繁忙不可用,大家也可选择第三方的满血版使用。
本地化部署DeepSeek,会消耗大量算力,成本随着模型的大小而增加,其次本地的模型需要拥有专业能力的人去调整训练,否则准确度大大降低。
并且现在做AI相关的厂商也很多,有做API接口套壳、有做本地化模型训练,厂商的“大饼”远大于实际成果(自古深情留不住,只有套路得人心)。
关于Ollama、open-webui教程很多,大多数都是docker run一下就结束了,实际上并没有这么简单,如果你在国内通过docker跑open-webui,那么首先要解决run的问题,其次运行后大概率是白屏状态,这个问题几乎看不到有人提到,有人去讲,这样就给本地化体验的用户来说带来极大的困扰。
由于国内某些网络原因,导致在线安装经常失败,并产生一些错误,所以本文基于“离线方法”部署Ollama大型语言模型,以及利用open-webui图形化平台与Ollama交互。
Ollama是一个开源的用于管理和部署大型语言模型(LLM)的平台。它旨在简化用户在本地机器上使用和运行各种语言模型的过程,通俗点说,通过Ollama可以方便使用各种模型,DeepSeek仅仅是其中一种模型而已,如果为了使用方便,体验更好,可以对接个web页面,如open-webui。
注:web页面有很多种,open-webui仅是其中的一种而已。
当前系统:AnolisOS8,理论适用于opencloudos8、rockylinux8、almalinux8
ollama、open-webui版本:v0.5.4
一、Ollama离线安装
1、下载Ollama包(二选一)
通过github下载
https://github.com/ollama/ollama/releases/download/v0.5.4/ollama-linux-amd64.tgz
本地下载(v0.5.4版本)
https://down.whsir.com/downloads/ollama-linux-amd64.tgz
2、将下载好的包上传到服务器并解压
1 |
tar -C /usr -xzf ollama-linux-amd64.tgz |
3、添加Ollama用户
1 2 |
useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama usermod -a -G ollama $(whoami) |
4、创建启动服务
注1:User和Group结合实际情况填写,我这里使用的是ollama
注2:Environment="OLLAMA_HOST=127.0.0.1:11434"字段结合实际情况填写
1 |
vi /etc/systemd/system/ollama.service |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Unit] Description=Ollama Service After=network-online.target [Service] Environment="OLLAMA_HOST=127.0.0.1:11434" ExecStart=/usr/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="PATH=$PATH" [Install] WantedBy=default.target |
5、启动服务并设置开机自启
1 2 |
systemctl daemon-reload systemctl enable ollama --now |
6、查看ollama版本
1 |
ollama -v |
ollama version is 0.5.4
此时ollama安装完成,接下来导入模型。
7、离线下载模型
deepseek-r1:1.5b离线包下载地址:http://down.whsir.com/downloads/deepseek-r1_1.5b.gguf
注1:在https://ollama.com/library/deepseek-r1可以看到,同样的模型分为1.5b、7b、8b、14b等等,这些数字表示模型中的参数数量。值越大,模型的数量越多,模型越复杂,请结合实际使用情况进行选择,我这里演示需要,我就以1.5b模型为例。
注2:如果网络允许,可以直接执行ollama run deepseek-r1:1.5b安装,网络不允许请下载我这里的离线包,我这里的离线包是通过网络允许的环境下,下载好后导出的。
8、导入模型
1 |
ollama create deepseek-r1_1.5b-q4_k_m -f deepseek-r1_1.5b.config |
注:deepseek-r1_1.5b-q4_k_m是你自行起的名字,导入成功后就可以看到这个名字了,后续使用也是通过这个名字,该名字可以自行定义。
导入成功后会看到以下内容
transferring model data 100%
using existing layer sha256:aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
creating new layer sha256:369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150
creating new layer sha256:6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4
creating new layer sha256:f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588
creating new layer sha256:a85fe2a2e58e2426116d3686dfdc1a6ea58640c1e684069976aa730be6c1fa01
writing manifest
success
9、查看模型
1 2 3 |
ollama list NAME ID SIZE MODIFIED deepseek-r1_1.5b-q4_k_m:latest e7554f04cb37 1.1 GB 3 seconds ago |
10、使用模型
1 |
ollama run deepseek-r1_1.5b-q4_k_m |
此时可以直接提问,如你是谁。
Ctrl+d退出当前模型交互。
11、通过API调用模型接口
1 2 3 4 5 6 7 8 |
curl --location --request POST 'http://127.0.0.1:11434/api/generate' \ --header 'Content-Type: application/json' \ --data '{ "model": "deepseek-r1_1.5b-q4_k_m", "stream": false, "prompt": "你是谁?" }' \ -w "Time Total: %{time_total}s\n" |
正常返回大概内容如下
1 |
{"model":"deepseek-r1_1.5b-q4_k_m","created_at":"2025-03-02T02:29:46.953925304Z","response":"\u003cthink\u003e\n\n\u003c/think\u003e\n\n您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。","done":true,"done_reason":"stop","context":[151644,105043,100165,30,151645,151648,271,151649,271,111308,6313,104198,67071,105538,102217,30918,50984,9909,33464,39350,7552,73218,100013,9370,100168,110498,33464,39350,10911,16,1773,29524,87026,110117,99885,86119,3837,105351,99739,35946,111079,113445,100364,1773],"total_duration":3544649527,"load_duration":26057743,"prompt_eval_count":6,"prompt_eval_duration":294000000,"eval_count":40,"eval_duration":3223000000}Time Total: 4.408524s |
二、open-webui离线安装
Open-WebUI是一个开源的WebUI,用于与各种机器学习模型和工具进行交互,网上大多数教程基本都是通过docker容器在线安装,由于网络因素,在安装过程中并不是那么顺利,并且安装完成后也可能因为网络原因导致其它的一些报错。
open-webui开源地址https://github.com/open-webui/open-webui
官方推荐的安装方式是docker,除此之外还可以使用python、Kubernetes等其它安装方法,详见官方文档:https://docs.openwebui.com/getting-started/quick-start
1、安装podman
因为podman不需要守护进程,使用起来比较方便,所以我这里使用podman来替代docker。
挂载iso镜像,使用内网镜像源安装yum install podman,这步要是都不会,AI模型就不要玩了,非常基础的操作,不做过多说明。
2、创建数据存放目录
1 |
mkdir -p /data/openwebui |
3、下载open-webui镜像
下载地址:https://down.whsir.com/downloads/open-webui-offline.tar
该镜像是我在香港服务器通过podman pull always ghcr.io/open-webui/open-webui:main得来,相比官方的版本仅更改了OpenAI API接口默认为关闭状态,你也可以自行制作导出离线包。
4、导入镜像
1 |
podman load -i open-webui-offline.tar |
5、启动容器
使用以下方式启动服务(二选一)
①如果当前仅使用CPU,请使用下面命令,我这里更改为host方式启动,可以结合实际需求自行调整容器启动命令
1 |
podman run -d --network=host -e OLLAMA_BASE_URL=http://127.0.0.1:11434 -v /data/openwebui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main |
②如果需要运行支持Nvidia GPU的open-webui,使用以下命令
1 |
podman run -d --gpus all --network=host -e OLLAMA_BASE_URL=http://127.0.0.1:11434 -v /data/openwebui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main |
6、访问open-webui
默认open-webui端口为8080,因为我这里以host方式启动,端口并没有映射,所以直接访问http://IP:8080登录
注:启动后要一会时间,请等待2、3分钟后查看8080端口是否启动,8080端口启动后访问即可。
点击中下方的开始使用
名称、电子邮箱、密码,自行配置,该配置文件存在本地库,因为我这个镜像默认配置关闭了OpenAI API接口,所以登录后不会出现白屏现象。
关于访问后白屏问题见:https://blog.whsir.com/post-8021.html
如果想通过open-webui接入本地知识库的话,在工作空间→知识库→点击右边+号创建知识库,最后上传文件或者添加文件内容等即可,请结合实际情况配置一些参数,我这里仅简短说明。
使用本地知识库方法,在对话框中输入#号选择知识库,即可。
如果上传文件失败报错400:'NoneType' object has no attribute 'encode'见:https://blog.whsir.com/post-8055.html
附1:ollama离线包模型导出方法
使用ollama show --modelfile <model_name>命令查看模型的详细信息,如
1 |
ollama show --modelfile deepseek-r1:1.5b |
从输出结果中可以看到模型的实际存储路径,格式类似
1 |
/usr/share/ollama/.ollama/models/blobs/sha256-xxx |
拷贝模型文件,如
1 |
cp /usr/share/ollama/.ollama/models/blobs/sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc deepseek-r1_1.5b.gguf |
导出配置文件,如
1 |
ollama show --modelfile deepseek-r1:1.5b > deepseek-r1_1.5b.config |
修改导出的配置信息,将FROM路径改成当前
即FROM行内容为FROM ./deepseek-r1_1.5b.gguf
附2:通过配置文件关闭OpenAI API接口方法
复制配置文件
1 |
podman cp open-webui:/app/backend/open_webui/config.py . |
找到以下字段
1 2 3 4 5 |
ENABLE_OPENAI_API = PersistentConfig( "ENABLE_OPENAI_API", "openai.enable", os.environ.get("ENABLE_OPENAI_API", "True").lower() == "true", ) |
将ENABLE_OPENAI_API改为False,这样启动后默认就是关闭OpenAI API
将修改好的配置文件复制回去
1 |
podman cp config.py open-webui:/app/backend/open_webui/config.py |
附录3:open-webui离线包导出方法
通过容器导出镜像
1 |
podman commit open-webui ghcr.io/open-webui/open-webui:main |
导出open-webui镜像
1 |
podman save -o open-webui.tar ghcr.io/open-webui/open-webui:main |
原文链接:Ollama结合open-webui部署DeepSeek(Linux离线安装版),转载请注明来源!