linux服务器部署自己本地微调的大模型,并利用api或ollama接入open webui ...

打印 上一主题 下一主题

主题 1726|帖子 1726|积分 5178

摘要:前期本地微调了DeepSeek-R1-Distill-Qwen-1.5B,现在想给模型加一个前端。颠末简单调研后决定选用开源项目open webui。但是上网查相干的设置教程发现大部分是ollama拉取开源模型并接入open webui,较少有自己微调的模型接入open webui,于是打算记录自己的完整步骤,供更多的人参考。
openwebui项目地址:https://github.com/open-webui/open-webui
操作体系:Ubantu 22.04.4 LTS
step1 部署模型

open webui只支持与openAI兼容的API模型调用和部署在ollama里的模型调用。两种方法的优缺点:


  • 与openAI兼容的API调用更便捷,唯一小缺点要写一个前端代码
  • ollama部署要写Modelfile模版文件,并且微调模型每次更新后都要重新写Modelfile模版文件并载入ollama
我个人更推荐与openAI兼容的API调用,写好一个简单的前端代码,一劳永逸。但如果不会或不想写前端代码的,当然就选用ollama。
法1:将模型封装成 OpenAI 兼容的 API

先要在自己的微调代码里写一个简单的前端,与openAI兼容:
有两个关键路由要写:
1 模型列表路由,open webui会在这里面找你的模型。要求一定是/v1/models。

2 用于对话的路由:(截图只截了部分)

法2:导入模型进ollama

分析:ollama只支持.gguf模文件,因此如果本地模型文件是.safetensor之类,要用开源项目llama.cpp将.safetensor模型文件转换成.safetensor模型文件。
1 利用llama.cpp进行模型转换(.safetensor —>.gguf)
  1. # 创建专用conda环境(推荐Python 3.10)
  2. conda create -n ollama_convert python=3.10
  3. conda activate ollama_convert
  4. # 仅克隆必要组件
  5. git clone git@github.com:ollama/ollama.git
  6. cd ollama
  7. # 紧接着,同步 llm/llama.cpp 子模块:
  8. git submodule init
  9. git submodule update llm/llama.cpp
  10. # 安装依赖
  11. pip install -r llama.cpp/requirements.txt
  12. # 运行转换脚本(FP16精度)
  13. python llm/llama.cpp/convert_hf_to_gguf.py /home/chenaotian/merged_model --outtype f16 --outfile /home/chenaotian/LLM-Large-Language-Model/merged.gguf
  14. python llm/llama.cpp/convert_hf_to_gguf.py \
  15.   --input_dir /path/to/your_model_dir \
  16.   --outtype f16 \
  17.   --outfile converted.bin
  18. # 关键参数说明:
  19. # --input_dir:包含safetensors分片和配置文件的目录
  20. # --output_type:降低到f16浮点精度(也可以保持f32精度或)
  21. # --vocab-only:仅测试分词器(可选验证步骤)
复制代码
2 导入模型进ollama
将天生的 merged.gguf 文件移动到 Ollama 的模型目录中:
  1. # 创建模型存储目录(若不存在)
  2. mkdir -p ~/.ollama/models
  3. # 复制 GGUF 文件
  4. cp merged.gguf ~/.ollama/models/
复制代码
新建文件:
  1. # 进入模型目录
  2. cd ~/.ollama/models/
  3. # 创建 Modelfile
  4. touch Modelfile
复制代码
Modelfile内容如下:
注意:这里是重点,每个人的Modelfile文件都差别,超参数和对话模版都要依据自己的模型界说。
  1. FROM "/home/chenaotian/LLM-Large-Language-Model/merged.gguf"
  2. PARAMETER temperature 0.6
  3. PARAMETER num_ctx 131072
  4. PARAMETER num_predict 512
  5. PARAMETER stop "<|end▁of▁sentence▁|>"
  6. PARAMETER top_p 0.95
  7. TEMPLATE "
  8. <|begin▁of▁sentence▁|>
  9. {{ range .Messages }}
  10.   {{ if eq .Role "system" }}
  11.     {{ .Content }}
  12.   {{ end }}
  13. {{ end }}
  14.   
  15. {{ range .Messages }}
  16.   {{ if eq .Role "user" }}<|User|>{{ .Content }}{{ end }}
  17.   {{ if eq .Role "assistant" }}<|Assistant|>{{ .Content }}<|end▁of▁sentence▁|>{{ end }}
  18. {{ end }}
  19. <|Assistant|><think>
  20. "
复制代码
  1. 运行以下命令:
  2. ```bash
  3. # 创建模型(跳过量化)
  4. ollama create my_model -f ~/.ollama/models/Modelfile
  5. # 运行测试
  6. ollama run my_model
复制代码
step2 部署open-webui

利用docker当然更便捷,但标题是许多人大概跟我一样,是跟许多人一起共用服务器,为了保证安全,全部人被放在服务器的一个docker容器里面,因此docker中没法再创建docker,此时只能下令行一条条输下令,不过幸亏是不利用docker安装open-webui的过程一点都不复杂。
法1:不利用docker


  • 创建 Conda 环境:
    利用以下下令创建一个 Python 3.11 的新环境:
    1. conda create -n open-webui python=3.11
    复制代码
  • 激活 Conda 环境:
    切换到新创建的环境:
    1. conda activate open-webui
    复制代码
  • 安装 Open WebUI:
    利用 pip 安装最新版本:
    1. pip install open-webui
    复制代码
  • 启动 Open WebUI 服务:
    运行以下下令启动服务:
    1. open-webui serve --host 0.0.0.0 --port 9090
    复制代码
启动到官网界面后注册管理员账号:
(我已经注册过了,因此这里显示的是登录界面)

注:创建管理员账号/登录后大概会出现白屏现象,按这个教程就可以解决(教程)
登录进去后的界面:
可以在左上角选择模型,我这里有自己的微调模型也有ollama拉取的主流模型。

法2:利用docker

启动docker
  1. sudo dockerd &
  2. sudo systemctl start docker
  3. sudo systemctl enable docker
复制代码
部署并与ollama关联:
  1. sudo docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui1 --restart always ghcr.io/open-webui/open-webui:main
复制代码


  • docker run: 启动一个新的 Docker 容器。
  • -d: 以保卫进程模式运行容器,容器将在背景运行。
  • -p 3000:8080: 将本地呆板的端口 3000 映射到容器内的端口 8080。这意味着你可以通过访问 http://localhost:3000 来访问运行在容器内的服务。
  • –add-host=host.docker.internal:host-gateway: 将主机名 host.docker.internal 映射到 Docker 网关。这对于在容器内访问主机服务很有用。
  • -v open-webui:/app/backend/data: 将本地的 open-webui 卷映射到容器内的 /app/backend/data 目录。这用于持久化数据,确保纵然容器停止或重新启动,数据也不会丢失。
  • –name open-webui: 为容器指定一个名称 open-webui,以便于管理和识别。
  • –restart always: 设置容器的重启策略为 always,这意味着容器如果停止(例如由于崩溃或体系重启),Docker 会自动重启它。
  • ghcr.io/open-webui/open-webui:main: 利用来自 GitHub 容器注册表(GitHub Container Registry)的 open-webui 镜像,并指定利用 main 标签的版本。
step3 设置后端模型与前端open webui的毗连

1 若利用Open AI兼容的API:

打开管理员面板:

点 设置——>外部毗连

添加openAI API毗连:

   URL是固定的,一定要这么写:http://localhost:5002/v1
密钥如果没有的话就写:NULL
最下面写自己模型在后端的项目路径。
  然后点击保存即可。
2 若利用ollama

什么也不用做,open webui已经设置好ollama接入,直接在选模型那里选自己的模型即可。
step4 将服务部署运行在局域网

分析:我现在是在服务器的docker容器里,因此想将服务部署到局域网还要做一些操作:以服务部署在9090端口(任意选一个就行)为例
step4.1 将容器9090端口(示例)映射到宿主机9090端口(示例)

获取容器IP:
  1. hostname -i
复制代码
用宿主机root权限实行:
  1. # 添加 NAT 规则(将宿主机的 8000 转发到容器 IP 的 9090 端口)
  2. sudo iptables -t nat -A DOCKER -p tcp --dport 9090 -j DNAT --to-destination 容器IP:9090
  3. # 允许转发流量
  4. sudo iptables -A FORWARD -p tcp -d 容器IP --dport 9090 -j ACCEPT
  5. # 保存规则(避免重启失效)
  6. sudo iptables-save | sudo tee /etc/iptables/rules.v4  
复制代码
step4.2 确保宿主机的9090端口(示例)的防火墙放行(如果本来就没开防火墙,就不需要这一步)

宿主机root权限实行:
  1. # 如果宿主机启用了防火墙(如 `ufw` 或 `firewalld`),放行端口 `8000`
  2. # 一般来说Ubantu系统用ufw做防火墙
  3. sudo ufw allow 9090/tcp
  4. sudo ufw reload
复制代码
step4.3 在服务器上永久启用服务

这样就不怕每次关掉终端服务就停止,方便局域网里全部人随时检察,如果想停止服务可以手动停止。

  • 创建一个新的 tmux 会话并命名:
    1. tmux new -s OpenWebUI # 命名为了OpenWebUI
    复制代码
  • 在 tmux 会话中运行以下下令:
    1. conda activate open-webui
    2. -newopen-webui serve --host 0.0.0.0 --port 9090
    复制代码
    这会启动你的服务。
  • 分离 tmux 会话,让服务在背景运行:

    • 按下 Ctrl + b,然后按 d。 这会让你退出 tmux 会话,但服务仍在背景运行。

  • 重新毗连到会话(可选): 如果你想检察服务运行状态,可以重新毗连:
    1. tmux attach -t OpenWebUI
    复制代码
  • 关闭会话(可选): 如果不再需要运行服务,可以关闭会话:
    1. tmux kill-session -t OpenWebUI
    复制代码
  • 创建一个新的 model_api 会话并命名:
    1. tmux new -s model_api
    复制代码
  • 在 tmux 会话中运行以下下令:
    1. conda activate cat
    2. cd /home/chenaotian/LLM-Large-Language-Model/web
    3. python server.py
    复制代码
  • 分离 tmux 会话,让服务在背景运行:

    • 按下 Ctrl + b,然后按 d。 这会让你退出 tmux 会话,但服务仍在背景运行。

  • 重新毗连到会话(可选): 如果你想检察服务运行状态,可以重新毗连:
    1. tmux attach -t model_api
    复制代码
  • 关闭会话(可选): 如果不再需要运行服务,可以关闭会话:
    1. tmux kill-session -t model_api
    复制代码
到此已经竣事!有错误的地方欢迎各人指正,也十分欢迎各人评论区跟我交流讨论,我看到就一定回复!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表