【ChatGLM2-6B】在只有CPU的Linux服务器上进行部署

news2024/11/19 1:55:02

简介

ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。

准备工作

安装wget

  • 删除自带的wget: yum remove wget
  • 重新安装wget: yum -y install wget
  • 检测wget版本: rpm -qa | grep "wget"

若出现以下,则成功。

[root@localhost ~]# rpm -qa | grep "wget"
wget-1.14-18.el7_6.1.x86_64

安装ANACONDA

  • 官网下载页面: https://www.anaconda.com/download#downloads
  • Linux64位下载: wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
  • 安装: sh Anaconda3-2023.09-0-Linux-x86_64.sh
  • 会出现很多信息,一路yes下去,观看文档用q跳过
  • 查看版本验证是否安装成功: conda -V
(base) [root@localhost ~]# conda -V
conda 23.7.4

安装pytorch

  • 前往pytorch官网: https://pytorch.org/
  • 选择StableLinuxCondaPythonCPU
  • 执行给出的指令: conda install pytorch torchvision torchaudio cpuonly -c pytorch

创建虚拟Python环境

  • conda创建虚拟环境: conda create --name ChatGLM2 python=3.10.6 -y
  • –name 后面ChatGLM2为创建的虚拟环境名称
  • python=之后输入自己想要的python版本
  • -y表示后面的请求全部为yes,这样就不用自己每次手动输入yes了。
  • 激活虚拟环境: conda activate ChatGLM2

大语言模型ChatGLM2-6B安装

  • 源码/文档: https://github.com/THUDM/ChatGLM2-6B
  • 下载源码: git clone https://github.com/THUDM/ChatGLM2-6B
  • 创建ChatGLM2项目的虚拟环境: python -m venv venv
  • 激活虚拟环境venv: source ./venv/bin/activate
  • 安装依赖(豆瓣源): pip install -r requirements.txt -i https://pypi.douban.com/simple
  • 参数:-r 是read的意思,可以把要安装的文件统一写在一个txt中,批量下载
  • 参数:-i 后面是下载的网址,这里使用的是豆瓣源,下载安装大概十几分钟
  • 清华大学源: pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
  • 阿里云源: pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
  • 也可以离线安装
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install -r requirements.txt --no-index --find-links=/home/ChatGLM2/chatglm2-dependence
  • 安装依赖: pip install gradio -i https://pypi.douban.com/simple

从Hugging Face Hub下载模型实现和参数文件

  • 在上面的ChatGLM2-6B目录下新建THUDM文件夹
  • THUDM文件夹下新建chatglm2-6b文件夹和chatglm2-6b-int4文件夹
  • 下载模型实现和参数文件: git clone https://huggingface.co/THUDM/chatglm2-6b
  • 也可以仅下载模型实现: GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
  • 然后从清华大学下载模型参数文件: https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2F&mode=list
  • 把下载后的所有文件放到上面新建的chatglm2-6b文件夹
  • 如果需要使用量化模型和参数,chatglm2-6b-int4的模型和参数文件地址: https://huggingface.co/THUDM/chatglm2-6b-int4,下载方式与chatglm2-6b一样
  • 国内无法访问huggingface.co,可以让国外的朋友帮忙下载
  • 可以从这里下载模型实现
  • 然后从清华大学下载参数文件

修改启动脚本

如果使用有chatglm2-6b-int4,需要修改cli_demo.pyapi.pyweb_demo.pyweb_demo2.py

# 修改前
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()

# 修改后
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b-int4", trust_remote_code=True)
# GPU用cuda(),CPU用float()
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4", trust_remote_code=True).float()

修改 web_demo.py文件

  • 除了需要按上面修改,还需要在最后一行,将demo.queue().lanuch函数改为如下
demo.queue().launch(share=True, inbrowser=True, server_name = '0.0.0.0')
  • predict函数中,第二句话改为
for response, history in model.stream_chat ( tokenizer ,input ,history,past_key_values=past_key_values, return_past_key_values=False, max_length=max_length, top_p=top_p,
temperature=temperature)

启动

  • 启动基于 Gradio 的网页版 demo: python web_demo.py
  • 启动基于 Streamlit 的网页版 demo: streamlit run web_demo2.py
  • 网页版 demo 会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。 经测试,基于 Streamlit 的网页版 Demo 会更流畅。
  • 命令行 Demo: python cli_demo.py

API部署

  • 安装额外的依赖: pip install fastapi uvicorn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
  • 运行: python api.py
  • 通过 POST 方法进行调用:
curl -X POST "http://192.168.3.109:8000" -H "Content-Type: application/json" -d "{\"prompt\": \"你好\", \"history\": []}"
  • 得到的返回值为
{"response":"你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。","history":[["你好","你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。"]],"status":200,"time":"2023-10-18 14:26:48"}

可视化交互界面

在这里插入图片描述

协议

  • 本仓库的代码依照 Apache-2.0 协议开源,ChatGLM2-6B 模型的权重的使用则需要遵循 Model LicenseChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

总结

  • 如果机器的内存资源不多,命令行交互模式、可视化模式、API模式,通常只能运行一种
  • 再启动另外一个脚本时,会导致前一个启动的进行被killed
  • ChatGLM2在多个中文数据集上测试结果优于GPT,比上代版本ChatGLM1有较大改善,受限于训练数据和资源,从实际效果看推理对话内容仍比较简单,本次部署在云端的CPU,推理过程需要几分钟,甚至十几分钟,不过重在体验,看下效果。有兴趣的话使用GPU能够较大程度提高反应速度,几秒就能给出答案。

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

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

相关文章

PhotoShop字体加粗,PhotoShop字体添加边框,PhotoShop设置文字背景为图片

字体加粗 创建文字: 选中文字 (用鼠标点一下) 然后 转换为智能对象 输入合适的数值即可加粗字体 字体添加外边框 点击字体,点击右下角的fx 咋fx中选择描边 设置文字背景为图片 将文字放到刚刚图片所在的位置即可 。…

useragent识别访问设备

背景需求 ruoyi框架,前后端分离。现在要在用户访问的时候根据不同的设备跳转到不同的登录页面。 教程 router/index.js 修改src/router/index.js,在这里增加自己的要跳转的页面 permission.js 在白名单中添加自己的登录页面 增加以下识别的代码 le…

F5负载均衡知多少?一文为你详细解读

在当今数字化时代,网络应用的可用性和性能对于企业的成功至关重要。而F5负载均衡技术则成为了许多企业实现高可用性和高性能的关键工具之一。那么什么是负载均衡,F5负载均衡有哪些强大的性能呢?跟上我的脚步一起来看看,充实你的知…

cbu和无cc的shiro反序列化

前置知识 学习CommonsBeanutils之前应该知道 javaBean,可以看《Java简单特性》也可以看这里有关BeanComparator的介绍TemplatesImpl gadget,前两个方法是public TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> Tem…

用于细胞定位的指数距离变换图--Exponential Distance Transform Maps for Cell Localization

论文:Exponential Distance Transform Maps for Cell Localization Paper Link: Exponential Distance Transform Maps for Cell Localization Code(有EDT Map的生成方式): https://github.com/Boli-trainee/MHFAN 核…

2023.10.18 区别 对象 和 类对象

目录 对象 类对象 总结 对象 对象是类的实例化结果它是内存中的一块区域,包含了该类的属性和方法的具体值和实现对象具有唯一的标识、状态、行为通过创建类的实例,我们可以在程序中操作和处理具体的对象 简单实例 class Person {public int high 1…

ruoyi识别访问设备是pc端还是移动端跳转到对应的登录页面

背景需求 ruoyi框架,前后端分离。现在要在用户访问的时候根据不同的设备跳转到不同的登录页面。 教程 router/index.js 修改src/router/index.js,在这里增加自己的要跳转的页面 permission.js 在白名单中添加自己的登录页面 增加以下识别的代码 le…

6. 方法引用

我们在使用lambda时,如果方法体中只有一个方法的调用的话(包括构造方法),我们可以用方法引用进一步简化代码。 6.1 推荐用法 我们在使用lambda时不需要考虑什么时候用方法引用,用哪种方法引用,方法引用的格式是什么。…

java正则校验金额

整数位5位 小数位4位 public static boolean judgeTwoDecimalFour(Object obj) {boolean flag false;try {if (obj ! null) {String source obj.toString();// 判断是否是整数或者是携带一位或者两位的小数Pattern pattern Pattern.compile("^[]?([0-9]{1,5}(.[0-9]{1…

【数字人】4、RAD-NeRF | 通过解耦 audio-spatial 编码来实现基于 NeRF 的高效数字人合成

文章目录 一、背景二、方法2.1 问题定义2.2 Decomposed audio-spatial encoding module2.3 Pseudo-3D Deformable Module 用于控制 torso2.4 训练细节 三、效果3.1 实验设置3.2 对比 论文:Real-time Neural Radiance Talking Portrait Synthesis via Audio-spatial …

【前端学习】—变量类型和计算(五)

【前端学习】—变量类型和计算(五) 一、JS中使用typeof能得到哪些类型 字符串(String):表示文本数据,用单引号或双引号括起来。 数字(Number):表示数值数据,包括整数和浮点数。 布尔值(Boolean):表示真或假(true或false)的逻辑值。 空值(Null):表示一个空…

echarts的markline警标线(一条/多条)的使用

echarts之markLine(可以设置特定阈值线(警戒线)) 一条线写法 series: [{name: Fake Data,type: line,showSymbol: false,data: data,markLine: {symbol: [none, none], // 去掉箭头label: {show: false,position: start,formatter: {b}},data: [{name: 阈值,yAxis: 200}],line…

[备忘]WindowsLinux上查看端口被什么进程占用|端口占用

Windows上 查看端口占用&#xff1a; netstat -aon|findstr <端口号> 通过进程ID查询进程信息 tasklist | findstr <上一步查出来的进程号> 图例&#xff1a; Linux 上 查看端口占用&#xff1a; netstat -tuln | grep <端口号> lsof -i:<端口号&…

Canvas绘图学习笔记:画笔的路径与状态

beginPath beginPath表示开始一个路径&#xff0c;我们在上一章画弧的时候用到过好多次&#xff0c;他的API非常简单&#xff1a; context.beginPath(); 开始路径有2层意思&#xff0c;一个就是本次绘制的起点是新的&#xff08;不再是上次结束的点了&#xff09;&#xff0…

诈骗分子投递“大闸蟹礼品卡”,快递公司如何使用技术手段提前安全预警?

目录 快递公司能不能提前识别&#xff1f; 如何通过技术有效识别 为即将带来的双十一提供安全预警 金秋十月&#xff0c;正是品尝螃蟹的季节。中秋国庆长假也免不了走亲访友&#xff0c;大闸蟹更是成了热门礼品。10月7日&#xff0c;演员孙艺洲发布微博称&#xff0c;“收到…

优思学院|质量保证是什么?提高产品和服务质量的关键方法

在当今竞争激烈的市场中&#xff0c;企业需要确保他们的产品和服务能够满足客户的期望。质量保证是实现这一目标的关键。本文将探讨质量保证的重要性&#xff0c;以及提高产品和服务质量的方法。 1. 了解质量保证的概念 质量保证是指一系列的活动和措施&#xff0c;旨在确保产…

STM32 裸机编程 03

MCU 启动和向量表 当 STM32F429 MCU 启动时&#xff0c;它会从 flash 存储区最前面的位置读取一个叫作“向量表”的东西。“向量表”的概念所有 ARM MCU 都通用&#xff0c;它是一个包含 32 位中断处理程序地址的数组。对于所有 ARM MCU&#xff0c;向量表前 16 个地址由 ARM …

Databend 开源周报第 115 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 聚合索引 Data…

再现ORA-600 4000故障处理---惜分飞

有一个10g的库&#xff0c;由于redo损坏导致无法正常recover成功 正常途径无法open成功,尝试强制打开库 Wed Oct 18 11:23:25 2023 alter database open resetlogs Wed Oct 18 11:23:25 2023 RESETLOGS is being done without consistancy checks. This may result in a corr…

端到端测试(End-to-end tests)重试策略

作者&#xff5c;Giuseppe Donati&#xff0c;Trivago公司Web测试自动化工程师 整理&#xff5c;TesterHome 失败后重试&#xff0c;是好是坏&#xff1f; 为什么要在失败时重试所有测试&#xff1f;为什么不&#xff1f; 作为Trivago&#xff08;德国酒店搜索服务平台&…