【AIGC】本地部署 ollama + open-webui

news2024/11/20 20:22:06

在之前的篇章《【AIGC】本地部署 ollama(gguf) 与项目整合》中我们已经使用 ollama 部署了一个基于预量化(gguf)的 Qwen1.5 模型,这个模型除了提供研发使用外,我还想提供给公司内部使用,因此还需要一个 ui 交互界面。

显然,这对于我们开发人员来说不是什么难事(毕竟 ollama 已经提供了相对比较完善的 API 接口了),但都 2024 年了与其自己开发还不如先找个开箱即用的…你看,这不已经有大神开发出 open-webui 了吗,我们开箱即用即可。

本文将记录部署过程中遇到的问题以及解决方式,希望对你有所帮助(open-webui 采用 docker 进行部署)。

1. 无法访问 huggingface 官网问题

由于 open-webui 有提供模型下载功能,因此需要在 docker 启动命令中添加 HF_ENDPOINT 环境变量:

sudo docker run -d \
   ...
   -e HF_ENDPOINT=https://hf-mirror.com \
   ...
   ghcr.io/open-webui/open-webui:main

HF_ENDPOINT 将指向国内 hf-mirror 镜像站。

2. docker host 模式(ollama 宿主机直接部署的话)

open-webui 容器采用 host 模式是最方便的的做法。由于我的 ollama 是宿主机直接部署的,open-webui 容器host 模式能够直接通过 127.0.0.1 进行通讯。如果你的 ollama 是 docker 容器,那么你可以将 open-webui 部署在与 ollama 同一个网络中,然后通过桥接只公开 open-webui 访问。

在启动命令中还需要设置环境变量 OLLAMA_BASE_URL 来指定 ollama 的访问地址:

sudo docker run -d \
   --network=host \
   -e HF_ENDPOINT=https://hf-mirror.com \
   -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
   ...
   ghcr.io/open-webui/open-webui:main
3. 关于镜像拉取

有人说 ghcr.io/open-webui/open-webui 镜像拉取很慢需要通过 Docker Proxy 镜像加速 进行转换。这个… 我没有这种感受。各人看自己的情况吧,若感觉到慢的话还是先转换一下。

4. 数据挂载

open-webui 是需要注册使用的。注册数据会保存到容器内部,因此在 docker 部署时还需要挂载数据目录到宿主机以免发生误删容器导致数据丢失的情况。

sudo docker run -d \
   --network=host \
   -v /home/ubuntu/Documents/open-webui/data:/app/backend/data \
   -e HF_ENDPOINT=https://hf-mirror.com \
   ...
   ghcr.io/open-webui/open-webui:main
5. 其他配置项
sudo docker run -d \
  --network=host \
  -v /home/ubuntu/Documents/open-webui/data:/app/backend/data \
  -e HF_ENDPOINT=https://hf-mirror.com \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  -e DEFAULT_USER_ROLE=user \
  -e DEFAULT_MODELS=qwen1 5-14b \
  -e ENABLE_IMAGE_GENERATION=True \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main
  • DEFAULT_USER_ROLE:默认用户类型
  • DEFAULT_MODELS:默认模型
  • ENABLE_IMAGE_GENERATION:是否能够生成图片(使用 sd 模型时需要建议开启)

配置完以上信息后就可以启动容器了。这时我们通过日志可以看到 open-webui 在创建 webui_secret_key 文件

No WEBUI_SECRET_KEY provided
Generating WEBUI_SECRET_KEY
Loading WEBUI_SECRET_KEY from .webui_secret_key
...
INFO:     Started server process [1]
INFO:     Waiting for application startup.

在所有文件都创建后才会真正启动


  ___                    __        __   _     _   _ ___ 
 / _ \ _ __   ___ _ __   \ \      / /__| |__ | | | |_ _|
| | | | '_ \ / _ \ '_ \   \ \ /\ / / _ \ '_ \| | | || | 
| |_| | |_) |  __/ | | |   \ V  V /  __/ |_) | |_| || | 
 \___/| .__/ \___|_| |_|    \_/\_/ \___|_.__/ \___/|___|
      |_|                                               

      
v0.1.122 - building the best open-source AI user interface.      
https://github.com/open-webui/open-webui

INFO:apps.litellm.main:start_litellm_background
INFO:apps.litellm.main:run_background_process
INFO:apps.litellm.main:Executing command: ['litellm', '--port', '14365', '--host', '127.0.0.1', '--telemetry', 'False', '--config', '/app/backend/data/litellm/config.yaml']
INFO:     Application startup complete.
INFO:apps.litellm.main:Subprocess started successfully.

这时可通过浏览器输入 http://127.0.0.1:8080 进行访问。

6. Windows 无法连接问题

若 ollama 是部署在 Windows,且 open-webui 是部署在远程的机器上的话会发现 open-webui 无法远程访问 ollama 。这时 ollama 虽然已在 Windows 上正常运行,但你还需要配置一下环境变量。如下图:

image.png

这样 ollama 才能够公开访问。
最后,访问 http://127.0.0.1:8080 ,在完成注册后可以看到以下页面(与 ChatGPT 一个样):

image.png

左上角可以选择 ollama 现存模型。但是在你真正使用之前我还建议你先做下面的一步操作:

image.png

打开“设置”对话框选择“通用”,再选择高级参数“显示”之后找到“保持活动”:

image.png

这里填写一个较大的数。因为 gguf 预量化模型的本质是需要将模型加载到内存来使用的,如果“保持活动”参数过小(默认 5 分钟),模型就会在规定的时间后进行释放,需要用到的时候又要重新加载,而这个加载过程将会非常缓慢(相对于使用 GPU 模式来说),因此这里我设置了 24 小时,先保证它能够在办公时间内能够快速响应。

之后就能愉快地与人工智能玩耍了,enjoy!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2003-2022年各省对外直接投资存量/省对外直接投资流量/省OFDI流量/省OFDI存量数据

2003-2022年各省对外直接投资存量、省对外直接投资流量、省OFDI流量、省OFDI存量数据 1、时间:2003-2022年 2、来源:对外直接投资公报 3、范围:31省 4、指标:省对外直接投资流量/OFDI流量、省对外直接投资存量/OFDI存量 5、指…

OpenCV(三)—— 车牌筛选

本篇文章要介绍如何对从候选车牌中选出最终进行字符识别的车牌。 无论是通过 Sobel 还是 HSV 计算出的候选车牌都可能不止一个,需要对它们进行评分,选出最终要进行识别的车牌。这个过程中会用到两个理论知识:支持向量机和 HOG 特征。 1、支…

爬虫自动化之drissionpage实现随时切换代理ip

目录 一、视频二、dp首次启动设置代理三、dp利用插件随时切换代理一、视频 视频直接点击学习SwitchyOmega插件使用其它二、dp首次启动设置代理 from DrissionPage import ChromiumPage, ChromiumOptions from loguru

MySQL与金蝶云星空对接集成执行查询语句-v2打通销售退货新增V1

MySQL与金蝶云星空对接集成执行查询语句-v2打通销售退货新增V1 数据源系统:MySQL mysql是一个关系数据库管理系统(RDBMS),所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数…

深度解析 Spring 源码:探寻Bean的生命周期

文章目录 一、 Bean生命周期概述二、Bean生命周期流程图三、Bean生命周期验证3.1 代码案例3.2 执行结果 四、Bean生命周期源码4.1 setBeanName()4.2 setBeanFactory()4.3 setApplicationContext()4.4 postProcessBeforeInitialization()4.5 afterPropertiesSet()4.6 postProces…

npm安装依赖报错解决办法

项目场景: 安装gitee上的开源vue3TS项目,npm安装依赖报错 问题描述 克隆项目到VSCode之后,使用npm install安装依赖,报错 npm install npm ERR! code ENOENT npm ERR! syscall open npm ERR! path Y:\WebStudyBlog\MovieWeb/p…

【Linux】学习笔记

文章目录 [toc]第一章:基础篇01|课程介绍02|内容综述03|什么是Linux04|Linux的内核版本及常见发行版内核版本发行版本Red Hat Enterprise LinuxFedoraCentOSDebianUbuntu 05|安装VirtualBox虚拟机VirtualBox下载url 06|在虚拟机中安装Linux系统Linux安装镜像下载 07…

基于OpenCv的图像傅里叶变换

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

【C++并发编程】(四)条件变量

文章目录 (四)条件变量 (四)条件变量 条件变量(Condition Variable)用于线程间的同步,允许一个或多个线程在特定条件不满足时等待,并在条件满足时被其他线程唤醒。C标准库中提供了的…

D3CTF2024

文章目录 前言notewrite_flag_where【复现】D3BabyEscapePwnShell 前言 本次比赛笔者就做出两道简单题,但队里师傅太快了,所以也没我啥事。然后 WebPwn 那题命令行通了,但是浏览器不会调试,然后就简单记录一下。 note 只开了 N…

【热门话题】如何构建具有高度扩展性的系统

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 如何构建具有高度扩展性的系统引言一、理解扩展性1.1 扩展性的定义1.2 扩展性的…

3GPP官网下载协议步骤

1.打开官网 https://www.3gpp.org/ 2.点击 3.在界面选择要找的series,跳转到查找界面 以V2X通信协议为例,论文中通常会看到许多应用: [7] “Study on evaluation methodology of new Vehicle-to-Everything (V2X) use cases for LTE and NR…

2-手工sql注入(进阶篇) sqlilabs靶场1-4题

1. 阅读,学习本章前,可以先去看看基础篇:1-手工sql注入(基础篇)-CSDN博客 2. 本章通过对sqlilabs靶场的实战,关于sqlilabs靶场的搭建:Linux搭建靶场-CSDN博客 3. 本章会使用到sqlmap,关于sqlmap的命令&…

C 深入指针(2)

目录 1 野指针 1.1 成因 1.2 如何规避野指针 2 assert 断言 2.1 用法 2.2 assert 的优点 2.1 assert 的缺点 3 小注解 3.1 Debug 和 Release 1 野指针 【概念】: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的&#…

解决windows下无法安装Hyper-V

在windows中打开hyper-v的办法如下:(但不适用无法安装hyper-v的windows系统如win10家庭版) 通过「控制面板」是启用 Hyper-V 最直接的方法: 1 使用Windows R快捷键打开「运行」对话框,执行appwiz.cpl以打开「控制面…

关于win平台c语言引入开源库的问题与解决

许久不写博客,五一还在加班,就浅浅写一篇吧 最近除了做物联网平台 还对网关二次开发程序做了修改,网关的二次开发去年年底的时候做过,但是当时的逻辑不是十分完善,差不多已经过了半年了,很多细节已经忘记了…

Java--方法的使用

1.1什么是方法 方法顾名思义就是解决问题的办法,在程序员写代码的时候,会遇到很多逻辑结构一样,解决相同问题时,每次都写一样的代码,这会使代码看起来比较绒余,代码量也比较多,为了解决这个问题…

VBA 根据表格指定列拆分多sheet

一. 需求 ⏹ 根据部分列,拆分数据到多个sheet页 二. 代码 ⏹ 重点代码摘要 CreateObject("scripting.dictionary"):创建一个字典对象,相当于Java中的MapDim aRef() As String:定义一个存储字符串类型的数组ReDim aRe…

Linux学习之IP协议

前言: 在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们治安学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进…

【讲解如何OpenCV入门】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…