【笔记】LLM|Ubuntu22服务器极简本地部署DeepSeek+API使用方式

2025/02/18说明:2月18日~2月20日是2024年度博客之星投票时间,走过路过可以帮忙点点投票吗?我想要前一百的实体证书,经过我严密的计算只要再拿到60票就稳了。一人可能会有多票,Thanks♪(・ω・)ノ传送门如下:https://www.csdn.net/blogstar2024/detail/151

我本来以为这个事情其实很简单的,因为我都放了个寒假了,我以为大家应该都已经部署好了吧,结果没有人发链接给我,遗憾自己部署。原以为网上的文章那么多应该已经很全面了吧,本来想直接在社区里发点东西结束,结果发现大家都在偷工减料,各种细节少写,我在社区里补充了半天都快补出一篇大博客出来了……大抵是因为这个部署过程比较长吧,遗憾还得写博客。

2025/02/18补充:这篇文章写于2025/02/15,当时确实还没有人部署,然后我刚这么说,清华那边就说自己能量化671B用内存加速让单卡4090也能跑,17号浙大公开说自己要将满血R1公开给全国高校使用……赶不上变化了属于是。

以下是我自己记录的最简单的方式,要是有问题请评论区留言,我可能有的东西也会漏写。

以下分成三部分,先教以下怎么安装ollama去本地拉模型,然后再推荐一下Page Assist,再介绍一下openwebui 0.5.10的使用方式,补充一下文件上传、联网搜索功能和直接使用对话API的设置方式。

我自己的Ubuntu版本是22,如果你的比较低就不要看我的博客了,因为python版本麻烦事很多。高的可以看。

文章目录

    • 本地部署
    • Page Assist(推荐)
      • 第一步,用VSCode连接你的服务器
      • 第二步,安装浏览器插件Page Assist
    • Openwebui(个人用户不推荐使用哈,麻烦死了)
      • Open WebUI搭建部署指南
      • 修复文件上传功能
      • 联网搜索功能

本地部署

这些步骤都很简单哈,就不列小标题了,直接用序号了。

  1. 安装ollama:curl -fsSL https://ollama.com/install.sh | sh
  2. 启动服务并设置开机自启:
    service ollama start
    systemctl enable ollama
    
  3. 拉取DeepSeek:ollama run deepseek-r1:70b
  4. 拉取后就有终端交互,随便打点什么测试一下,如果发现没有输出可以参考一下我这篇博客:【BUG】LLM|Ubuntu 用 ollama 部署 DeepSeek 但没输出,llama 有输出-CSDN博客

要拉多少大小可以参考下表:

在这里插入图片描述

跑分结果:

在这里插入图片描述

我自己的环境是GPU 4090 24G,拉取了70b和7b,70b有点卡卡的,7b还好。

表格来源:在Linux服务器中部署Deepseek等大语言模型 | 香菇肥牛的博客

Page Assist(推荐)

参考:国内,怎么使用open webui 网络搜索功能,有大佬指导一下嘛? · open-webui/open-webui · Discussion #3851

第一步,用VSCode连接你的服务器

第一步,你只需要用VSCode连接你的服务器,它就会自动端口映射,把你的127.0.0.1和服务器的关联起来,你就可以用服务器上已有的ollama服务类。

第二步,安装浏览器插件Page Assist

笔者注:我自己只尝试了Edge的,可以哈。

全平台(PC、Mac、安卓、iOS)安装方案如下(自带思维链显示支持和无需设置API的联网搜索,如百度、搜狗等,也支持SearXNG,不同搜索引擎搜索内容不同,根据需求选择):

1、PC、Mac浏览器直接安装插件即可(默认启用Ollama连接状态检查,可设置中禁用)
Chrome:
https://chromewebstore.google.com/detail/page-assist-%E6%9C%AC%E5%9C%B0-ai-%E6%A8%A1%E5%9E%8B%E7%9A%84-web/jfgfiigpkhlkbnfnbobbkinehhfdhndo
Edge:
https://microsoftedge.microsoft.com/addons/detail/page-assist-a-web-ui-fo/ogkogooadflifpmmidmhjedogicnhooa
Firefox:
https://addons.mozilla.org/en-US/firefox/addon/page-assist/

2、安卓手机可以使用kiwi浏览器(需要谷歌框架): https://github.com/kiwibrowser/src.next/releases 再安装该扩展Chrome版,或使用安卓Firefox浏览器安装Firefox版插件,联网可以使用内置无需设置的搜索引擎和自建或公共SearXNG服务,国内建议直接选baidu即可,搜索结果建议设置50 (token消耗更多,但效果更好)

至此你就可以用上最基本的联网搜索能力+R1大模型了!快速高效不费劲,省下几百兆的本地Web客户端。

在这里插入图片描述

Openwebui(个人用户不推荐使用哈,麻烦死了)

注意自己的用户要有Root权限哈,没有就别搭了,找你们管理员去。

(openwebui,主要是方便多用户共享,它功能很完善,搜索和知识库什么的也都有)

我的版本:openwebui 0.5.10

Open WebUI搭建部署指南

首先,这种涉及到服务的操作先清空一下当前缓存的sudo密码,避免systemctl enable 指令执行不了:

sudo -k

新建一个用户openwebui用于运行Open WebUI。本文中,将把程序安装在/opt/openwebui目录中。

mkdir /opt/openwebui
adduser openwebui

设置好密码,再切换到用户:

chown -R openwebui /opt/openwebui
su openwebui

切换用户后进入这个目录:

cd /opt/openwebui

然后,我们新建一个虚拟环境 (venv),并使用VENV中的PIP安装Open WebUI。

python3 -m venv ./openwebui-venv
/opt/openwebui/openwebui-venv/bin/pip3 install open-webui

推荐使用/opt/openwebui/openwebui-venv/bin/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple open-webui安装,因为官方pip源太卡了。

如果没有报错,Open WebUI就安装好了。

我们来写一个SystemD服务,将Open WebUI运行在后台并实现开机自动启动。

编辑文件/etc/systemd/system/openwebui.service,输入下面的内容(如果你要改端口就修改一下8080改成你自己想要的端口):

[Unit]
Description=OpenWebUI
After=network.target

[Service]
User=openwebui
WorkingDirectory=/opt/openwebui/openwebui-venv
ExecStart=/opt/openwebui/openwebui-venv/bin/open-webui serve --port 8080
Restart=always

[Install]
WantedBy=multi-user.target

保存退出后,切换回原本的有root权限的用户:

su 之前的用户

安装一些关键依赖,启动该服务并设置开机自动启动。

sudo apt install sqlite3 # fix sqlite3
sudo apt install apache2-utils # fix htpasswd

systemctl daemon-reload
service openwebui start
systemctl enable openwebui

systemctl enable openwebui的时候,多用户的服务器可能会报奇怪的错误,这个时候清除密码缓存就可以正常enable了:sudo -k

然后,要等启动完成,要等一会儿。如果你等了好久还不行,你可以考虑终端启动看看问题。首先切换到openwebui用户然后运行指令:

su openwebui
cd /opt/openwebui
/opt/openwebui/openwebui-venv/bin/open-webui serve --port 8080

值得一提的是,如果你是在终端直接启动,也就是这种指令:/opt/openwebui/openwebui-venv/bin/open-webui serve --port 8080,那么以下这个东西出来了并没有启动完成:
在这里插入图片描述
要等待更多东西出来才是启动完成了。

如果你是终端启动并且使用vscode,你会看到“端口”界面出现端口映射情况:
在这里插入图片描述
如果你不是,你可以通过lsof -i:端口号指令查看自己的端口占用情况,注意不要打多了空格。

启动完成后,访问http://your_ip_address:8080,就能看到下面的Open WebUI界面了。

如果http://127.0.0.1:8080能访问但是ip+端口访问不了,一般都是防火墙没开放对应端口导致的,sudo ufw allow 端口号 就可以了。

在这里插入图片描述

进入界面之后创建管理员账号密码,如果提示权限有问题,很可能是关键依赖没有装,装好就行了,装好之后重新创建:

sudo apt install sqlite3 # fix sqlite3
sudo apt install apache2-utils # fix htpasswd

这样,Open WebUI搭建部署完毕。

修复文件上传功能

坏消息说在最前:我还没解决!!!因为我的openwebui 版本有点高,我没找到最新的解决思路,还在自己探索,但我感觉没什么好探索的后期我可能会考虑降版本。以下是我在网上找到的解决思路,我照着实施了一遍也并没有解决……

上传文件报错:python “‘NoneType’ object has no attribute ‘encode’”,要打开管理员面板装个模型,详见https://github.com/open-webui/open-webui/discussions/8059,根据文档讨论内容,总结所有解决办法如下:

  1. 重置嵌入模型配置

    • 进入Admin Panel → 找到Embedding Model设置
    • 手动输入默认模型名称:sentence-transformers/all-MiniLM-L6-v2
    • 点击右侧刷新按钮应用配置
    • 适用版本:0.4.7及早期版本
      在这里插入图片描述
  2. 代码层修复

    # 在/backend/open_webui/apps/retrieval/main.py中添加:
    default_embedding_model = "sentence-transformers/all-MiniLM-L6-v2"
    if not app.state.config.RAG_EMBEDDING_MODEL.strip():
        app.state.config.RAG_EMBEDDING_MODEL = default_embedding_model
        update_embedding_model(default_embedding_model)
    

    通过添加空值检测和默认值回退机制

  3. 切换嵌入模型引擎

    • 将Embedding Engine改为ollama
    • 设置API地址为本地Ollama服务(如http://127.0.0.1:11434
    • 适用版本:0.5.5+
  4. 更换兼容的嵌入模型

    • 推荐模型:
      • BAAI/bge-m3(验证有效)
      • nomic-ai/nomic-embed-text-v1.5(需网络稳定)
      • paraphrase-multilingual
    • 避免使用空值或无效模型名称
  5. 基础设施调整

    • Docker用户:更新至0.5.10版并通过compose部署
    • 手动安装用户:检查依赖完整性
    • 确保网络通畅(影响模型下载)
    • 重置向量数据库:rm -rf vector_storage/
  6. 开发分支修复

    • 尝试合并提交4b7f0c5的修复
    • 注意:dev分支可能存在不稳定性
  7. 替代方案

    • 通过API使用外部嵌入服务
    • 直接使用Ollama而非OpenWebUI集成

附加建议

  • 出现错误时检查日志:ERROR[open_webui.routers.retrieval]
  • 优先使用Docker部署保证环境一致性
  • 首次配置时建议:
    # 清理旧配置
    rm -rf ~/.cache/openwebui/models/
    rm -rf vector_storage/
    

不同版本适用性:

  • 0.4.x版本:方案1、2有效
  • 0.5.x版本:方案3、4、5更可靠
  • 0.5.10+版本:建议优先使用Docker部署

注:若问题持续,建议在Github提交包含完整错误日志的新issue。

联网搜索功能

参考:国内,怎么使用open webui 网络搜索功能,有大佬指导一下嘛? · open-webui/open-webui · Discussion #3851
OpenWebUI接入博查搜索API - 开发调优 - LINUX DO

看了半天我感觉还是不花钱好,于是想选择 Searxng,自己搭。

但搭挺费事的,我现在还没开始搭,之后搭了再补博客吧。

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/145671009。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode-414.第三大的数

leetcode-414.第三大的数 code review! 文章目录 leetcode-414.第三大的数一.题目描述二.代码提交 一.题目描述 二.代码提交 class Solution { public:int thirdMax(vector<int>& nums) {set<int> set_v(nums.begin(), nums.end());auto it set_v.rbegin()…

【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})

代理模式 代理模式是一种结构型设计模式&#xff0c;它提供了一种替代访问的方法&#xff0c;即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下&#xff0c;增加额外的功能&#xff0c;如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…

深度学习之图像回归(二)

前言 这篇文章主要是在图像回归&#xff08;一&#xff09;的基础上对该项目进行的优化。&#xff08;一&#xff09;主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…

利用分治策略优化快速排序

1. 基本思想 分治快速排序&#xff08;Quick Sort&#xff09;是一种基于分治法的排序算法&#xff0c;采用递归的方式将一个数组分割成小的子数组&#xff0c;并通过交换元素来使得每个子数组元素按照特定顺序排列&#xff0c;最终将整个数组排序。 快速排序的基本步骤&#…

照片模糊怎么变清晰?图生生AI修图-一键清晰放大

当打开手机相册时&#xff0c;那些泛着噪点的合影、细节模糊的风景照、像素化的证件图片&#xff0c;让珍贵时刻蒙上遗憾的面纱。而专业级图像修复工具的门槛&#xff0c;让多数人只能无奈接受这些"不完美的记忆"。AI技术的发展&#xff0c;让普通用户也能轻松拥有专…

Linux 网络与常用操作(适合开发/运维/网络工程师)

目录 OSI 七层协议简介 应用层 传输层 Linux 命令&#xff01;&#xff01;&#xff01; 1. ifconfig 命令 简介 1. 查看网络地址信息 2. 指定开启、或者关闭网卡 3. 修改、设置 IP 地址 4. 修改机器的 MAC 地址信息 5. 永久修改网络设备信息 2. route 路由命令 …

PID控制学习

前言 本篇文章属于PID控制算法的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 PID入门教程-电机控制 倒立摆 持续更新中_哔哩哔哩_bilibili 一…

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式 解决按键扫描&#xff0c;松手检测时阻塞的问题实现LED闪烁的非阻塞总结补充&#xff08;为什么不会阻塞&#xff09; 参考江协科技 KEY1和KEY2两者独立控制互不影响 阻塞&#xff1a;如果按下按键不松手&#xff0c;程序就…

【Arxiv 大模型最新进展】PEAR: 零额外推理开销,提升RAG性能!(★AI最前线★)

【Arxiv 大模型最新进展】PEAR: 零额外推理开销&#xff0c;提升RAG性能&#xff01;&#xff08;★AI最前线★&#xff09; &#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 自小刺头深草里&#xff0c;而今渐觉出蓬蒿。 NLP Github 项目…

vscode的一些实用操作

1. 焦点切换(比如主要用到使用快捷键在编辑区和终端区进行切换操作) 2. 跳转行号 使用ctrl g,然后输入指定的文件内容&#xff0c;即可跳转到相应位置。 使用ctrl p,然后输入指定的行号&#xff0c;回车即可跳转到相应行号位置。

OAI 平台 4G(LTE)基站 、终端、核心网 端到端部署实践(一)

本系列文章,基于OAI LTE代码搭建端到端运行环境,包含 eNB,EPC,UE三个网元。本小节先介绍系统总体架构,硬件平台及驱动安装方法。 1. Overview 系统总体架构如下图所示。 2 Machine setup 2.1 Machine specs Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS…

Linux环境Docker使用代理推拉镜像

闲扯几句 不知不觉已经2月中了&#xff0c;1个半月忙得没写博客&#xff0c;这篇其实很早就想写了&#xff08;可追溯到Docker刚刚无法拉镜像的时候&#xff09;&#xff0c;由于工作和生活上的事比较多又在备考软考架构&#xff0c;拖了好久…… 简单记录下怎么做的&#xf…

基于TI的TDA4高速信号仿真条件的理解 4.6

Application Note 《Jacinto7 AM6x, TDA4x, and DRA8x High-Speed Interface Design Guidelines》 4.6 Reviewing Simulation Results检查仿真结果 The results generated by the channel simulations outlined in the preceding sections are compared against an eye mask s…

unity学习46:反向动力学IK

目录 1 正向动力学和反向动力学 1.1 正向动力学 1.2 反向动力学 1.3 实现目标 2 实现反向动力 2.1 先定义一个目标 2.2 动画层layer&#xff0c;需要加 IK pass 2.3 增加头部朝向代码 2.3.1 专门的IK方法 OnAnimatorIK(int layerIndex){} 2.3.2 增加朝向代码 2.4 …

DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

DAY07 Collection、Iterator、泛型、数据结构

学习目标 能够说出集合与数组的区别数组:1.是引用数据类型的一种2.可以存储多个元素3.数组的长度是固定的 int[] arr1 new int[10]; int[] arr2 {1,2,3};4.数组即可以存储基本类型的数据,又可以存储引用数据类型的数据int[],double[],String[],Student[]集合:1.是引用数据类…

ls命令的全面参数解析与详尽使用指南

目录 ls 命令的所有参数及含义 ls -a 命令详解 ls -A 命令详解 ls -b 命令详解 ls -C 命令详解 ls -d 命令详解 ls -f 命令详解 ls -F 命令详解 ls -G 命令详解 ls -h 命令详解 ls -H 命令详解 ls -i 命令详解 ls -I 命令详解 ls -l 命令详解 ls -L 命令详解 l…

【Spring+MyBatis】_图书管理系统(中篇)

【SpringMyBatis】_图书管理系统&#xff08;上篇&#xff09;-CSDN博客文章浏览阅读654次&#xff0c;点赞4次&#xff0c;收藏7次。&#xff08;1&#xff09;当前页的内容records&#xff08;类型为List&#xff09;&#xff1b;参数&#xff1a;userNameadmin&&pas…

动态规划算法篇:枚举的艺术

那么本篇文章就正式进入了动态规划的算法的学习&#xff0c;那么动态规划算法也可谓是算法内容中的一座大山&#xff0c;那么在大厂算法笔试乃至算法比赛中出现的频率也逐渐变高&#xff0c;那么可见学习好动态规划算法的一个重要性&#xff0c;那么对于动态规划最难理解的&…

算法——舞蹈链算法

一&#xff0c;基本概念 算法简介 舞蹈链算法&#xff08;Dancing Links&#xff0c;简称 DLX&#xff09;是一种高效解决精确覆盖问题的算法&#xff0c;实际上是一种数据结构&#xff0c;可以用来实现 X算法&#xff0c;以解决精确覆盖问题。由高德纳&#xff08;Donald E.…