抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Open Web UI 、Ollama、HuggingFace 自建大模型浅谈

背景

在几天前看到前 Google XXO 一瓜后,对于当下的 AI 发展情况有了一些好奇。两年前尝时过程之复杂,最后不了了之,可是现在不一样了,这一年开源社区可以说飞速发展。

用法用量

这里提到 Open Web UI OllamaHuggingFace 对于刚接触的人或许一头雾水。但是如果对 Docker 有一定了解,简单类比一下,就很简单。

Open Web UI 相当于 Portainer 。Ollama 相当于 Docker Core。HuggingFace 相当于 Docker hub。此外Open Web UI 前身为 Ollama 专用 Web UI,几个月前独立兼容发展。

那么对于 Docker 用户,鉴于复杂度也仅考虑 Docker 用户,直接 Compose 流便可解决:

version: '3'

services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
network_mode: "nas"
hostname: ollama
volumes:
- /path/to/ollama:/root/.ollama
# ports:
# - "11434:11434"

open-webui:
image: ghcr.io/open-webui/open-webui:latest
container_name: open-webui
network_mode: "nas"
volumes:
- /path/to/open-webui:/app/backend/data
depends_on:
- ollama
ports:
- 3000:8080
environment:
- 'OLLAMA_BASE_URL=http://ollama:11434'
- 'WEBUI_AUTH=False'
- 'WEBUI_SECRET_KEY=lckiss'
- 'https_proxy=http://maybe or must'
- 'http_proxy=http://maybe or must'
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped

简单说明:

network_mode:改自用 network,没有就 bridge,便于互相沟通,无法沟通考虑是否因为自建 DNS 影响,默认容器 DNS 跟随宿主。

环境变量:

OLLAMA_BASE_URL:Ollama 容器地址,默认填容器名加端口即可,如果不通,如 network_mode 所述,优先考虑 DNS 与网段问题。

WEBUI_AUTH:是否需要登录,自建直接 False。

WEBUI_SECRET_KEY:自建不公开则随意。

proxy:在国内无需多言。

多提一嘴:Open Web UI 在第一次启动时,有下载 Hugging Face 一个语义解释器的需求,注意查看日志是否有错误。树莓派在最新版有无法启动的 BUG , 可考虑使用 0.3.10 进行体验。大模型有内存要求,Linux 内存不够也可以考虑扩展 Swap 进行体验。

如需更多环境变量参看官方:https://docs.openwebui.com/getting-started/env-configuration

关于 Model 模型,是 AI 的大脑,如果能接受 Ollama 官方列表中的模型,自然可以,但是大概率不能接受,因为支持中文需要中文微调,以及每个模型有其擅长的地方,需要哪个用哪个,于是就需要去到 Hugging Face 找 Model:https://huggingface.co/models

对于每个 Model ,需要区分 GPU 计算和 CPU 计算,如果需要配合 GPU 则容器部署时需要按官方文档适当修改一些参数:https://hub.docker.com/r/ollama/ollama

我这里以 CPU 计算为例: 纯 CPU 计算大多数时候找 GGUF 文件,比如:https://huggingface.co/shenzhi-wang/Llama3.1-8B-Chinese-Chat/tree/main/gguf

至于 8B,后面还跟着 q4_k_m、q8、f16,具体这些量化标准我就不谈了,自行检索,从文件大小可知,越大自然是性能要求越高,结果自然也更准确。

下载完将 gguf 放到 Ollama 挂载目录下, 新建 Modelfile ,内容简单,除非想玩点高级的,可以自行了解:

FROM ./llama3.1_8b_chinese_chat_q4_k_m.gguf 

进入 Ollama 容器:

docker exec -it ollama /bin.bash

执行

cd /root/.ollama
ollama create llama3.1_chinese -f ./Modelfile

静静等待 success,根据读写速度和 CPU 速度,时间可长可短,导入完成会在 .ollama/models/blobs 下有个副本,双份体积很大,自行考虑是否删除源模型文件。

完成后,打开 Open Web UI :http://localhost:3000 就能在首页选择大模型那里选 llama3.1_chinese,然后开始对话吧,每一次对话都是他对你的一次了解

如果不需要配合 Web UI ,也可以直接在容器中执行 ollama run llama3.1_chinese 使用。

界面简单,管理界面见实力,不错的 Web UI:

流程就此结束,开源集成度已经很高,大概率不会遇到什么问题除了下载慢。

再提一嘴,不适合在 Mac 上使用 docker 搭建,问题见:https://github.com/open-webui/open-webui/discussions/3677,同时他们也没打算将其视为 bug,另外容器体积也是一个问题,一个 Web UI 为何需要几个 G 是我无法理解的,简单看像是将编译的那一堆 lib 库也保留在了容器中。

至此,把 Hugging Face 的所有资源进行整合,换皮,就可以看到,几乎与国内那些 AI 聚合站点无差。

后续

鉴于 Open Web UI 缓慢且问题多,本地大模型其实需要的只是一个 UI,从而在 ollama 社区中找了几个,目前是直接使用的支持原生的客户端:Chatbox,体积小,能满足基本需求。

其他使用 js 框架的 WebUI 捆绑数据库很严重,体积也都不小,还不太适合,硬要选也有一个:lobe-chat

其他

在 llama 3.1 405B 发布后,仅体验了一下 8B 的我,便觉得拥有一个属于自己的 AI,时机已经成熟。不过于我目前尚且缺少一台有力的算力机器,树莓派承担不起这个庞然大物。

至此也可以理解为,想要在移动端本地支持中文的运算,除了舍弃成一个人工智障,暂时不会有什么好办法。

以上。


本站由以下主机服务商提供服务支持:

0条评论

发表评论