团队小规模本地大模型服务平台搭建

news/2024/12/17 13:34:33/文章来源:https://www.cnblogs.com/hvker/p/18612160

实现目标和考虑因素

部署一个支持多用户同时使用、多模型运行的离线局域网大模型服务器
需要考虑以下几个关键因素:

  1. 大模型的加载和管理。使用一个基础大模型,根据需要创建多个专用模型,模型管理方便可靠。
  2. 并发用户和请求管理。设置管理员、用户角色,用户管理方便可靠,支持多名用户同时在线操作。
  3. 多模型同时运行与切换。多个模型可同时多人使用与切换,且能迅速响应、流畅使用。
  4. 硬件资源的优化利用。大模型服务后端支持充分利用多显卡资源。
  5. 高可用性和负载均衡。大模型服务前后端均有高可用性,前端支持负载均衡。
  6. 数据隐私与安全。全部使用离线本地平台和模型,数据保留在本地局域网内。

环境和平台配置

硬件环境

需要支持AI计算的Nvidia显卡,显卡专用内存不少于8G,计算机内存不少于16G。

系统环境

64位的 Windows 10 或以上、Ubuntu 20.04、macOS 11 或以上,这里以 Windows 10 x64 为例
安装 python 3.11

所需平台

Ollama(https://ollama.com/),为大模型管理和调用提供后端服务支持
Open-WebUI(https://docs.openwebui.com/,推荐 python 3.11 环境下通过pip或其他包管理工具安装),为大模型可视化使用和切换、用户管理提供前端服务支持

平台配置

ollama

设置环境变量

执行以下PowerShell命令

[Environment]::SetEnvironmentVariable("OLLAMA_ORIGINS","*","User") # 允许的源列表,使用逗号分隔
[Environment]::SetEnvironmentVariable("OLLAMA_MODELS","D:\AI\ollama_models","User") # 模型存储位置
[Environment]::SetEnvironmentVariable("OLLAMA_KEEP_ALIVE","0","User") # 模型在内存中保持加载的时长(默认值:5m,小时用h)
[Environment]::SetEnvironmentVariable("OLLAMA_HOST","localhost:11434","User") # 服务器IP地址(默认值:localhost:11434)
[Environment]::SetEnvironmentVariable("OLLAMA_NUM_PARALLEL","20","User") # 最大并行请求数
[Environment]::SetEnvironmentVariable("OLLAMA_MAX_LOADED_MODELS","1","User") # 每个GPU上最大加载模型数量,只有在显卡专用内存足够大、多个基础模型参数量合适的情况下,可以同时加载多个模型
[Environment]::SetEnvironmentVariable("OLLAMA_SCHED_SPREAD","1","User") # 始终跨所有GPU调度模型,默认为空
[Environment]::SetEnvironmentVariable("OLLAMA_FLASH_ATTENTION","1","User") # 启用 Flash Attention,默认为true

Ollama后端服务启动后,模型是未加载状态,当有用户调用时,会进行模型的加载过程,这个过程根据模型大小和性能不同持续时间也不同,之后模型会在内存中保持一段时间,方便用户快速调用模型,上面配置中模型在内存中保持加载的时长设置为了0,即模型被调用后,在内存中不会释放。配置中最大并行请求数即可同时进行的聊天窗口数;每个GPU上最大加载模型数量这个配置项,只有在显卡专用内存足够大、多个基础模型参数量合适的情况下,可以同时加载多个模型。按需调整配置参数,完成后重启计算机。

下载模型

根据需要下载不同大模型,可下载的大模型列表可在ollama官方网站找到,也可在本地使用已有或自制GGUF格式大模型创建。这里下载qwen2.5:7b

ollama pull qwen2.5:7b

Open-WebUI

设置环境变量

执行以下PowerShell命令

[Environment]::SetEnvironmentVariable("HF_ENDPOINT","https://hf-mirror.com","User") # 设置huggingface的国内镜像源
[Environment]::SetEnvironmentVariable("WEBUI_AUTH","True","User") # Default: True,False则免登录
[Environment]::SetEnvironmentVariable("WEBUI_NAME","团队本地大模型服务平台","User") # Default: Open WebUI,平台名称
[Environment]::SetEnvironmentVariable("AIOHTTP_CLIENT_TIMEOUT","300","User") # Default: 300
[Environment]::SetEnvironmentVariable("DATA_DIR","D:\AI\webui_data","User") # Default: ./data,指定数据存储的基本目录,包括上传、缓存、矢量数据库等
[Environment]::SetEnvironmentVariable("DEFAULT_MODELS","qwen2.5:7b","User") # 设置默认语言模型
[Environment]::SetEnvironmentVariable("ENABLE_COMMUNITY_SHARING","False","User") # Default: True,控制是否显示“分享到社区”按钮
[Environment]::SetEnvironmentVariable("ENABLE_MESSAGE_RATING","False","User") # Default: True,启用消息评分功能
[Environment]::SetEnvironmentVariable("DEFAULT_LOCALE","cn","User") # Default: en,设置应用程序的默认区域设置
[Environment]::SetEnvironmentVariable("OLLAMA_BASE_URL","http://localhost:11434","User") # Default: http://localhost:11434,配置 Ollama 后端 URL,若启用 Ollama 后端负载均衡,设置 OLLAMA_BASE_URLS,由;分隔

以上默认语言模型、Ollama 后端 URL等配置也可在平台管理员后台设置

按指定端口启动服务

在终端执行以下命令

open-webui serve --port 8080

第一次启动会要求创建管理员账号,邮箱部分后缀用“@localhost”,后面创建新用户也用这个后缀。

若忘记了管理员账号和密码,可通过修改数据库找回

修改管理员密码
关闭 open-webui 服务
使用在线工具生成Bcrypt密码哈希(https://www.bejson.com/encrypt/bcrpyt_encode/,Rounds为10)
找到程序目录里的 D:\AI\webui_data\webui.db 文件,更新管理员密码,以下是linux命令示例:
sqlite3 ./webui.db "UPDATE auth SET password='管理员密码哈希' WHERE email='admin@example.com';"

进入管理员面板,关闭竞技场匿名评价模型,创建新用户,其他按需进行设置

基于大模型创建专用模型

在工作空间中进行设置,创建模型,选择好基础模型后,按需设置系统提示词、知识库、可用工具、过滤器、自动化部分
比如创建一个简单的“推理助手”模型,基础模型选择qwen2.5:7b,系统提示词设置为“针对以下问题,给出最简短的答案,并解释你的推理过程”,点击保存并更新即可。
基于基础模型所调用的所有新模型,其内存加载的都是基础模型,所以多个用户可同时使用该基础模型所创建的多个模型,而不用再次经过模型加载过程,表现在多名用户可同时流畅使用多个模型。

平台使用

详见Open-WebUI官方文档(https://docs.openwebui.com/)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入聊聊asyncPromise

正文 最近在学习JavaScript里的async、await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下。 从Example说起 const createImg = function (path) {return new Promise((resolve, reject) => {const img = do…

[OS] 计算机资源虚拟化技术

1 定义:计算机资源虚拟化服务器虚拟化主要通过软件技术将物理服务器的硬件资源抽象化,创建多个独立的虚拟服务器环境。2 虚拟化技术方向 以下是一些常见的服务器虚拟化方式和工具: 基于hypervisor的虚拟化Hypervisor技术: 也称为虚拟机监视器(Virtual Machine Monitor,VMM…

C#调用Python代码的方式(二),以PaddleOCR-GUI为例

前言 前面介绍了在C#中使用Progress类调用Python脚本的方法,但是这种方法在需要频繁调用并且需要进行数据交互的场景效果并不好,因此今天分享的是C#调用Python代码的方式(二):使用pythonnet调用Python代码。 pythonnet介绍 Python.NET 是一个包,为 Python 程序员提供了与…

在线教育系统厂家电话

为了方便您直接对接相关业务,下面提供几个在线教育相关企业的联系电话,请自行选择合适的服务商联系。若想直接获取更多信息或定制化的产品方案,请拨打以下联系电话:- 顺企网在线教育直播软件开发平台联系人:张生;联系方式:电话 15989102540(说明您来自顺企网,可获得优…

如何解决Git合并冲突?

讲个故事先: 一个晴朗的日子,Alex 把远程版本库的修改拉到他的本地版本库。 他修改了名为 abc.txt 的文件,将其暂存(staged),提交(committed),最后推送(pushed)回远程版本库。 同时,Tina 不知道 Alex 对abc.txt文件的修改,在该文件的 相同区域 做了一些修改,并尝…

MongoDB备份脚本

#!/bin/bash #backup MongoDB #mongodump命令路径 DUMP=/home/mongodb/bin/mongodump #临时备份目录 OUT_DIR=/home/mongodb_bak/mongodb_bak_now #备份存放路径 TAR_DIR=/home/mongodb_bak/mongodb_bak_list #获取当前系统时间 DATE=`date +%Y_%m_%d` #数据库账号 DB_USER=roo…

SQL Server创建用户一直提示用户已存在的解决办法

背景:复制的老数据库,创建账号onlyread时,一直提示数据库里有这个用户名。报错如下:“用户、组或角色onlyread在当前数据库中已存在。”解决方法: 1. 查询数据库,是否有这个用户 -- 查询是否存在指定的用户、组或者角色 SELECT * FROM sys.database_principals WHERE na…

jquery目录树插件

file-explore是一款简单的jquery目录树插件。它使用嵌套的无序列表作为目录树的结构,结合font-awesome图标可以制作出非常漂亮的jquery目录树效果。在线预览 下载使用方法 在页面中引入file-explore.css和font-awesome文件,以及jquery和file-explore.js文件。<link rel=&…

SQL Server的数据库备份与还原

数据库备份分类 备份分类完全备份:(常用方式)备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。 因而,占用不少时间和空间,这种方式不建议太频繁,一般一周一次。差异备份:也叫增量备份。它不使用事务日志,相反,它使用整个数据库的一种新映…

vue-实现组件是否显示还是隐藏

比如我们在home页面需要这个标签在city页面不需要这个标签我们可以在router里面添加meta属性在需要的组件页面导入route实力获取meta属性的值

教育行业办公软件排行榜揭晓!J 人备考该选谁?

在教育领域,高效的办公软件对团队协作和个人学习意义重大。尤其对于 J 人,其偏好秩序与规划,可视化团队协作办公软件能助其在教育教培团队运作和个人公考备考中精准把控进程。本文将盘点 6 款此类软件,助力相关人士做出合适选择。 一、板栗看板 板栗看板是教育办公软件中的…