本地部署清华大模型 ChatGLM3

news2025/1/20 17:07:40

在这里插入图片描述

ChatGLM 是一个开源的、支持中英双语的对话语言模型,由智谱 AI 和清华大学 KEG 实验室联合发布,基于 General Language Model (GLM) 架构,具有 62 亿参数。ChatGLM3-6B 更是在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上增加了更多特性。

虽然,目前 ChatGLM 比 GPT 稍有逊色,但是,在部署后可以完全本地运行,完全由自己掌控!本文介绍怎么在 Linux 服务上部署 ChatGLM3 服务,并通过多种方式使用本地部署地大模型。

01 环境准备


1.1 安装 Python 环境

Linux 环境通常自带 Python,但是版本通常比较低,ChatGLM 要求 Python 版本 3.7+,所以大多数情况下需要在安装 Python 环境,但是如果你的系统已经满足这个条件,直接跳过本节。

Python 安装可以自行下载 tar 编译安装,但是为了方便安装 pytorch 和不把系统搞崩,建议直接使用 anaconda 安装 python

# 下载 conda 安装包
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh
# 安装 conda 注意安装过程中指定安装路径
bash Anaconda3-2023.03-1-Linux-x86_64.sh
# 配置软连接
ln -s /[your-install-path]/anaconda3/condabin/conda /usr/bin/conda

1.2 安装 Git LFS

ChatGLM 完整的模型实现可以在 Hugging Face Hub 上获取,如果先将模型下载到本地,然后从本地加载,这样响应效率更高;但是这个预训练模型有十几个 GB 很大 ,所以从 Hugging Face Hub 下载模型需要先安装 Git LFS。

sudo yum install git -y
git --version
sudo yum install git-lfs -y

02 模型安装


2.1 下载 ChatGLM3

首先,需要从 Github 下载 ChatGLM3 仓库,然后进入仓库目录使用 pip 安装依赖,

依赖环境,官方建议 transformers 库版本为 4.30.2,torch 使用 2.0 及以上的版本,以获得最佳的推理性能。

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
# conda 创建虚拟环境
conda create -n torch python=3.10
# 激活环境 # 退出环境 conda deactivate
conda activate torch
# 下载依赖包
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

2.2 下载预训练模型

下面我们用 Git LFS 从 Hugging Face Hub 将模型下载到本地,从本地加载模型响应速度更快

git lfs install
git clone https://huggingface.co/THUDM/chatglm3-6b

如果从你从 HuggingFace 下载比较慢,也可以从 ModelScope 中下载(亲测,飞一般地感觉~~)

git lfs install
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

03 模型使用


把下载好的 THUDM/chatglm3-6b 预训练模型文件放到 ChatGLM3 仓库目录下,如果是从 ModelScope 下载的话注意目录层级,模型加载需要修改本地模型路径

ChatGLM3 提供了三种使用方式:命令行 Demo,网页版 Demo 和 API 部署;在启动模型之前,需要找到对应启动方式的 python 源码文件 cli_demo.pyweb_demo.pyopenai_api.py 中修改下面这一行代码

model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).cuda()

修改两个地方:(1)本地模型的存放路径 THUDM/chatglm3-6b;(2)根据自己的硬件环境参考 DEPLOYMENT.md 选择模型加载方式,float() CPU 部署,cuda() GPU 部署

3.1 命令行版 cli_demo.py

命令行启动方式,首先找到 ChatGLM3 目录下的 cli_demo.py 文件,修改代码如下:

在这里插入图片描述
修改完成之后,到 ChatGLM3 目录下运行 python cli_demo.py 启动服务

程序会在命令行中进行交互式的对话,在命令行中通过 用户: 进行输入指示,直接输入问题回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。

在这里插入图片描述

3.2 网页版 web_demo.py

网页版和命令行相似,但是提供了更加友好交互页面,找到 ChatGLM3 目录下的 web_demo.py 文件,做出相同的代码修改,

然后,到 ChatGLM3 目录下运行 python web_demo.py 启动服务

在这里插入图片描述

程序会运行一个 Web Server,并输出一个访问地址,在浏览器中打开输出的地址即可使用。

在这里插入图片描述

3.3 API 部署 openai_api.py

最后,介绍 API 部署方式,也是笔者最推荐的方式,结合 ChatGPT-Next-Web 使用

ChatGLM3 实现了 OpenAI 格式的流式 API 部署,可以作为任意基于 ChatGPT 的应用的后端,这里以 ChatGPT-Next-Web 为例介绍使用方法

首先,需要移步 https://github.com/Yidadaa/ChatGPT-Next-Web/releases 下载 ChatGPT-Next-Web,这个交互页面很轻量级。

然后,到 ChatGLM3 目录下找到 openai_api.py 源码文件,和上面方式一样,修改本地模型路径和部署方式,还有根据自己需要修改最后一行代码中定义的 Host 和 Port,这是 ChatGPT 应用的访问 URL

在这里插入图片描述

接着,在仓库目录下执行 python openai_api.py 启动模型服务

在这里插入图片描述
然后将日志打印出的接口地址 http://localhost:8000/ 写入 ChatGPT-Next-Web 的设置中,并添加自定义模型 chatglm3

在这里插入图片描述
完成设置之后,就大功告成了

在这里插入图片描述


如果文章对你有帮助,欢迎一键三连 👍 ⭐️ 💬 。如果还能够点击关注,那真的是对我最大的鼓励 🔥 🔥 🔥 。


参考资料

THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 (github.com)

本地安装部署运行 ChatGLM-6B 的常见问题解答以及后续优化 — 秋风于渭水 (tjsky.net)

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

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

相关文章

读程序员的制胜技笔记02_算法与数据结构

1. 认知偏见 1.1. 程序员也是人,他们和其他人在软件开发实践中有着同样的认知偏见 1.2. 只有你的同事真正关心你是如何做事的——其他人都只想要一个好的、有效的产品 1.3. 高估了不使用的类型 1.4. 不关心正确数据结构的好处 1.5. 认为算法只对库作者重要 2.…

Express框架开发接口之今日推荐等模块

1.初始化 const handleDB require(../handleDB/index) // 获取全部模块 exports.allModule (req, res) > {(async function () {})() } // 更新或者添加模块 exports.upModule (req, res) > {(async function () {})() } // 根据id删除模块 exports.delModule (req, …

Proteus仿真--基于51单片机的可演奏电子琴设计(仿真文件+程序)

本文主要介绍基于51单片机的可演奏电子琴设计(完整仿真源文件及代码见文末链接) 仿真图如下 其中通过矩阵键盘可以实现不同的音乐播放 仿真运行视频 Proteus仿真--基于51单片机的可演奏电子琴设计(仿真文件程序) 附完整Proteu…

竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 🔥 优质竞赛项目系列,今天要分…

Flutter 组件集录 | InheritedNotifier 内置状态管理组件

theme: cyanosis 1. 前言 在上一篇 《Flutter 知识集锦 | 监听与通知 ChangeNotifier》 中,我们介绍了 ChangeNotifier 对象通知监听者的能力。并通过一个简单的模拟下载进度案例,介绍了它的使用方式: | 案例演示 | 监听-通知关系 | | --- | …

DBeaver 23.2.3发布,带来多项增强和修复

数据库管理工具DBeaver最新版本23.2.3已经发布。这个版本带来了一系列的增强和修复,提升了用户的使用体验和工作效率。 以下是DBeaver 23.2.3版本的一些亮点功能: 数据编辑器方面的改进: Excel (XLSX) 导出现在支持列自动拟合,…

人大金仓迁移报错ERROR: invalid byte sequence for encoding “UTF8“: 0x00

Oracle迁移人大金仓,报错: com.kingbase8.utilKSOLException: ERROR: invalid byte sequence for encoding “UTF8”: 0x00 报错信息,如图所示: 解决方案 1、设置参数,在kingbase.conf 最后面添加参数:ign…

串口通信(8)串口中断“边接收边解析数据“的通信程序

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步! > 发布人:日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

linux笔记总结-基本命令

参考: 1.Linux 和Windows比 比较 (了解) 1. 记住一句经典的话:在 Linux 世界里,一切皆文件 2. Linux目录结构 /lib • 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几 乎所有…

流媒体服务实现H5实时预览视频

目录 背景方案业务实践细节注意 待办 背景 客户aws服务磁盘存储告急,最高可扩容16T。排查如下:主要是视频文件存在大量复制使用的情况。例如发布节目时复制、预览时复制,这样上传一份视频后最大会有四份拷贝(预览、普通发布、互动…

PHP隐藏手机号码、银行卡号、真实姓名部分方法

1、隐藏手机号码,隐藏手机号中间部分 /*** 隐藏手机号码* param int $mobile 手机号码* param int $head 头部显示数* param int $tail 尾部显示数* param string $hide_str 隐藏字符串* return string*/ function getHiddenMobile($mobile, $head 3, $tail 4, $hide_str *…

PHP依赖注入 与 控制反转详解

依赖注入 是一种设计模式,用于解耦组件之间的依赖关系。 它的主要思想是通过将依赖的对象传递给调用方,而不是由调用方自己创建或管理依赖的对象。这种方式使得组件的依赖关系更加灵活,易于维护和测试。 控制反转 是一个更广泛的概念&#…

C++ 输入输出流

iostream库,包含两个基础类型istream(输入流)和ostream(输出流)。一个流就是一个字符序列。 流 输入输出产生的字符串称为流。 被称为流的原因:所有的字符都在缓冲区中,从缓冲区拿/放都是顺序进行的,字符串的消耗,像…

IDEA 设置代码注释模板

功能简介: 每次看别人代码时,面对毫无注释的类,除了头大还是头大, 以下提供了一种代码类注释模板 新建java类的时候,自动增加类注释,养成代码开发好习惯 效果展示: 代码模板: #if (…

《算法通关村—如何使用中序和后序来恢复一颗二叉树》

《算法通关村—如何使用中序和后序来恢复一颗二叉树》 中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 通过后续遍历我们知道根节点是1,通过知道根节点是1,我们就可以从中序序列知道那些 …

不只保护隐私的防窥膜,还是屏幕的小铠甲

电脑防窥膜这种东西确实很实用,尤其是那些经常在公共场所用笔记本的朋友,更是需要这张贴膜的保护,不过虽然现在市面上这种防窥膜种类繁多,但是产品质量良莠不齐。有些防窥膜虽然有防窥效果,但透光率下降太多了&#xf…

【使用Python编写游戏辅助工具】第一篇:概述

引言 欢迎阅读本系列文章,本系列将带领读者朋友们使用Python来实现一个简单而有趣的游戏辅助工具。 写这个系列的缘由源自笔者玩了一款游戏。正巧,笔者对Python编程算是有一定的熟悉,且Python语言具备实现各种有趣功能的能力,因…

如何解决MySQL主从复制延时问题

MySQL 主从延时的原因是什么? 具体哪个环节发生延时? 如何解决呢? 对于这“三连问”,极少有同学能通关,甚至有同学连主从复制原理都不清楚。 01 什么是主从延时? 有时候我们遇到从数据库中获取不到信息…

Centos8安装yum源时候出现的异常问题及解决方案(保好使)

问题的出现 作者在使用centos8的时候,想安装tree命令,输入了如下的命令: yum install tree 但是却显示了下面的错误: Errors during downloading metadata for repository base: - Curl error (28): Timeout was reached for h…

MySQL第一讲·存储与字段

你好,我是安然无虞。 文章目录 1. 存储:一个完整的存储过程是怎样的?创建MySQL数据库确认字段创建数据表插入数据 2. 字段:那么多字段类型,该怎么定义?整数类型浮点数类型和定点数类型文本类型日期与时间类…