清华大模型ChatGLM3部署初体验

news2024/9/25 3:22:37

648798b6995013ee7f40cfe10a136f72.gif

正文共:1555 字 17 图,预估阅读时间:2 分钟

ChatGLM3是智谱AI和清华大学KEG实验室联合发布的对话预训练模型。该项目在GitHub的工程链接为:

https://github.com/THUDM/ChatGLM3

在人工智能领域中,类似“3B”、“6B”、“12B”的表述通常指的是大语言模型所具有的参数数量,参数数量是衡量现代深度学习模型规模和复杂性的一个关键指标,这里的“B”代表“十亿”(billion)。比如,ChatGLM3-6B是ChatGLM3系列中的开源模型,这里的6B意味着该模型具有大约60亿个参数。在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B引入了如下特性:

1、更强大的基础模型:ChatGLM3-6B的基础模型ChatGLM3-6B-Base采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base具有在10B以下的基础模型中最强的性能

2、更完整的功能支持:ChatGLM3-6B采用了全新设计的Prompt格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和Agent任务等复杂场景。

3、更全面的开源序列:除了对话模型ChatGLM3-6B外,还开源了基础模型ChatGLM3-6B-Base、长文本对话模型ChatGLM3-6B-32K和进一步强化了对于长文本理解能力的ChatGLM3-6B-128K。项目中介绍,以上所有权重对学术研究完全开放,在填写问卷登记后亦允许免费商业使用。

ChatGLM3模型推荐使用Conda和PyTorch进行部署和使用,正好我们已经部署好了成了!Tesla M4+Windows 10+Anaconda+CUDA 11.8+cuDNN+Python 3.11

因为需要使用Git来克隆项目,我们先安装Git命令。访问以下页面,按需选择需要的系统及软件版本:

https://git-scm.com/downloads

1adb091b57948061d72b2792b319d527.png

Windows版的下载链接如下:

https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe

下载完成之后,按照推荐提示完成Git的安装。在Git安装过程中,确保选择选项将Git添加到系统PATH环境变量中。

c0444f4133719856362e4a64a780e20f.png

安装完成后,打开Anaconda。首先,新创建一个ChatGLM3环境,Python需要使用3.10或更高版本,我们使用3.11.8版本。

80d610576d5ebed47d55b2b3f6c2bcd6.png

启动Terminal终端。

a9cd1a7905d33eeb8519842a335699fb.png

激活环境ChatGLM3环境,并下载ChatGLM3项目。

conda activate ChatGLM3
git clone https://github.com/THUDM/ChatGLM3

cbaa42aba799c937e4e004cca493c377.png

然后进入到项目中,使用pip安装依赖软件:

cd ChatGLM3
pip install -r requirements.txt

eea0b6172b73b2a8e59c1425dcc830aa.png

安装完成后,运行以下命令在本地加载模型并启动demo:

streamlit run main.py

6358b11aa8754e313565bd0e3b92308d.png

然后就可以从命令行回显中看到demo的链接了,默认可以自动打开目标页面,也可以手动输入到浏览器进行访问。

e0e726be9125a2accadcf0bf5957d7c0.png

初次访问需要下载并加载模型,可能需要花费一定时间(访问https://huggingface.co/可能需要互联网,请自行联网)。关键的模型文件一共是7个,共12.5 GB,大小分别为1.83 GB、1.97 GB、1.93 GB、1.82 GB、1.97 GB、1.93 GB、1.05 GB。

ead69bc87451f1ba69ff7c8c2785c49b.png

或者先将模型下载到本地,再通过export MODEL_PATH=/path/to/model命令来指定从本地加载模型。具体参考以下链接:

https://huggingface.co/docs/transformers/installation#offline-mode

等加载完成即可进入到ChatGLM3 Demo页面。

c706aa0ff1a673bed323645919b00393.png

从页面可以看到,ChatGLM3 Demo 拥有三种模式:

Chat:对话模式,在此模式下可以与模型进行对话。

Tool:工具模式,模型除了对话外,还可以通过工具进行其他操作。

Code Interpreter:代码解释器模式,模型可以在一个Jupyter环境中执行代码并获取结果,以完成复杂任务。使用Code Interpreter还需要安装Jupyter内核:

ipython kernel install --name ChatGLM3 --user

首先是对话模式,我们可以通过调节top_p(控制生成的文本的多样性)、temperature(控制模型生成文本的创造性或随机性)、repetition_penalty(惩罚模型生成重复的内容)和Output length(生成文本的最大长度)等参数来调整模型行为。

33922740aa074ca1b3324deade508643.png

实际上用起来体验较差,肯定是服务器配置过低的原因,导致响应时间巨长,一直处于运行状态,但迟迟没有结果。

f52284c255cadcc3eb06cd5dc640359b.png

对应的,命令行也会展示前端的交互过程,但就是没有响应。

按照文档提示:默认情况下,模型以FP16精度加载,运行上述代码需要大概13GB显存。而我的Tesla M4只有4 GB显存,肯定是不够了;不过,我也不知道这个模型是什么情况,没有运行在GPU上面,也就没有出现显存不够的报错信息了。

6155a3527761541722681136fd20c0b8.png

而且,它好像也没有加载到内存上面,内存的占用率也不高,只有CPU使用率稍微高一些。

44da5116be685cf3763fc97b29b2c2e4.png

但也不是一直高,一直在波动,我也不知道到底在没在运算。

一句hello就计算了十分钟。

991f9634c0bf49f03ed4a2d2d310ec9c.png

按照文档提示,如果显存不够的话,可以尝试以量化方式加载模型,使用方法如下:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).quantize(4).cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好吗?", history=[])
print(response)

fe9e45a55e443715d1b427e6ea683067.png

结果还是失败了。

按照官方说法,模型量化会带来一定的性能损失,但官方测试ChatGLM3-6B在4-bit量化下仍然能够进行自然流畅的生成。不过,为了能够流畅运行Int4版本的ChatGLM3-6B,官方建议GPU显存的最低配置要求为5 GB,对应GTX1060(6 GB)、GTX2060(6 GB)等显卡。

但是加载过程中,内存占用还是达到了12 GB,所以前面似乎是没有加载成功。

9ed2d1142cd9f1d399b06342e2606f1f.png

不换设备怕是难成大事啊!为此,我已经紧急加购了Tesla P4显卡,有8 GB显存,性能大约提升160%,期待它的精彩表现吧。

最后,分享一下ChatGLM3的在线文档:

https://zhipu-ai.feishu.cn/wiki/WvQbwIJ9tiPAxGk8ywDck6yfnof

a35915db2f536a08d5c39c7d269c7c4e.gif

长按二维码
关注我们吧

323db923f07fecb8e905f00b6d952c4a.jpeg

035b7e9941875de24b2ea25d0ba39c27.png

成了!Tesla M4+Windows 10+Anaconda+CUDA 11.8+cuDNN+Python 3.11

CentOS 7.9安装Tesla M4驱动、CUDA和cuDNN

MX250笔记本安装Pytorch、CUDA和cuDNN

复制成功!GTX1050Ti换版本安装Pytorch、CUDA和cuDNN

人工智能如何发展到AIGC?解密一份我四年前写的机器学习分享材料

一起学习几个简单的Python算法实现

GPU性能测试中的张量和矩阵运算

IPv6从入门到精通

SRv6典型配置

付出总有回报,全国SRv6组网实验成功了!

使用Python脚本实现SSH登录设备

配置VMware实现从服务器到虚拟机的一键启动脚本

L2TP访问失败?快看看是不是NAT网关的ALG搞的鬼

配置Juniper虚墙vSRX基于路由的IPsec VPN(CLI方式)

使用vSRX测试一下IPsec VPN各加密算法的性能差异

RDP授权119天不够用?给你的Windows Server续个命吧!

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

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

相关文章

Springboot+Vue前后端分离的个人博客系统

项目介绍 进入二十一世纪,以Internet为核心的现代网络积水和通信技术已经得到了飞速的发展和广泛的应用,各种网络交流互动工具也应运而生。其中以论坛、博客、社区、空间最为受广大网民朋友的欢迎,也是目前为止发展的比较成熟的信息交流工具…

【RAG实践】基于 LlamaIndex 和Qwen1.5搭建基于本地知识库的问答机器人

什么是RAG LLM会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented G…

Linux第81步_使用“互斥体”实现“互斥访问”共享资源

1、创建MyMutexLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyMutexLED回车”,创建“MyMutexLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件和文件夹 2、…

el-table树形数据序号排序处理

1&#xff0c;用下面这个代码可以实现基本表格的序号排序 <el-table-column label"序号" width"50px" align"center"><template slot-scope"scope">{{ scope.$index 1 }}</template></el-table-column>2&…

Linux-线程同步

文章目录 前言一、为什么要线程同步&#xff1f;二、线程同步pthread_cond_initpthread_cond_destroypthread_cond_wait、pthread_cond_signal和 pthread_cond_broadcast 三、示例代码 前言 上节课学习了线程互斥&#xff0c;这节课针对线程互斥内容在做进一步的补充和完善&am…

Java小项目--满汉楼

Java小项目–满汉楼 项目需求 项目实现 1.实现对工具包的编写 先创建libs包完成对jar包的拷贝和添加入库 德鲁伊工具包 package com.wantian.mhl.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import java.io.FileInputStream…

惟客数据CTO 钱勇:数据资产运营创新和实践

​企业如何做好数据资产运营&#xff0c;有效挖掘和利用数据资产&#xff1f; 近日&#xff0c;在由华东江苏大数据交易中心主办的“第四届数字经济科技大会”上&#xff0c;WakeData惟客数据CTO、星光数智CEO 钱勇 给出了自己的观点。 在演讲环节&#xff0c;钱勇以《数据资…

vulnhub打靶记录——Mycmsms

文章目录 一、环境布置主机发现 二、端口扫描nikto基本探测目录扫描CMS EXP搜索探查mysql数据库CMS代码审计CMS后台权限提升 一、环境布置 靶机在virtualbox中搭建&#xff0c;攻击机使用vmware中安装的kali&#xff0c;主要是解决kali能ping通靶机&#xff0c;同时能访问外网…

比较10个数值的最大值(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int arr[10] { 0 };int i 1;int n 1;int t 0;int max 0;//提示用户&#xff1b;printf("请输入10个整数&…

java系统部署到Linux

1、安装java 1.8JDK 卸载Open JDK 首先&#xff0c;我们先检查系统是否自带了 JDK。输入命令 java -verison批量删除 rpm -qa | grep java | xargs rpm -e --nodeps下载并安装JDK 我们在 user 目录下建立一个新的 java文件夹&#xff0c;用来存放 JDK文件。 jdk下载地址 …

操作系统——处理机管理(2)

四、作业的基本概念 8、作业的定义 是指用户在一次计算过程或一次事务处理的过程中要求计算机系统所做的工作的总称。 通常把一次事务计算中从输入开始到输出结束&#xff0c;用户要求计算机所做的全部工作称为一个作业。 用户的角度&#xff1a;作业就是用户要求计算机完…

运维人少,如何批量管理上百个微服务、上千条流水线?

作者&#xff1a;周静 随着微服务和云原生技术的发展&#xff0c;一个业务系统往往由多个微服务应用组成&#xff0c;多个业务方向涉及几十上百应用。每个应用研发过程又划分为测试、预发、生产多条流水线&#xff0c;也即成百上千条流水线。而一个企业下通常只有 1&#xff5…

【JS】替换文本为emjio表情

最终效果展示 T1 T2 T3 T4 需求 把评论你好帅啊啊啊[开心][开心]&#xff0c;[开心] 替换为图片 思路 正则match提取[开心]到一个数组数组去重创建img标签img标签转文本. 。例&#xff1a;&#xff08;el.outerHTML&#xff09;&#xff0c;将el元素转文本字符串replaceAll…

Javaee 进程调度的基本过程

进程 一个程序,运行起来/跑起来,在操作系统中,就会出现一个对应的进程, 进程其实就是一个跑起来的应用程序 让程序跑起来就是可以双击快捷方式或者在开始菜单中 单击该选项 . 在我们的电脑上 可以打开任务管理器 可以看到很多进程: 我们可以把运行起来的可执行文件 称为进程 …

[C语言]——操作符详解

目录 一.操作符的分类 二.二进制和进制转换 1.二进制转十进制 2.二进制转八进制和十六进制 2.1二进制转八进制 2.2二进制转十六进制 三.原码、反码、补码 四.移位操作符 1.左移操作符 2.右移操作符 五.位操作符&#xff1a;&、|、^、~ 练习1&#xff1a;编写代码实…

两个现货白银理财产品投资技术分析方法

现货白银是投资市场中比较受欢迎的理财产品。要投资现货白银&#xff0c;我们需要具备一定的金融投资经验。下面我们就来讨论一下&#xff0c;在现货白银这个理财产品的投资过程中&#xff0c;常常用到的一些技术分析方法。 宏观的趋势分析法。在现货白银理财产品投资中&#x…

nodejs pkg打包跨平台执行文件,带.node插件(sharp、sqlite3)

在nodejs引入的第三方库中,大部分插件都是nodejs原生开发,使用pkg可以快速打包,生成windows、linux(ubuntu、centOS等)、麒麟系统下面执行文件。遇到了第三方插件gdal、sharp、sqlite3,在webstorm中打包生成执行文件,跨平台部署的时候会出现找不到###.node文件,需要获取部…

Harbor介绍

1.什么是Harbor Harbor是一个开源的企业级Docker Registry管理项目&#xff0c;由VMware公司开源。 Harbor提供了比Docker官方公共镜像仓库更为丰富和安全的功能&#xff0c;尤其适合企业环境使用。以下是Harbor的一些关键特性&#xff1a; 权限管理&#xff08;RBAC&#x…

什么是内网穿透?如何实现内网穿透?

关注微信公众号&#xff1a;怒码少年&#xff0c;回复关键词【电子书】可以免费获取计算机相关电子书 大家好&#xff0c;我是小码。 如果你能上线或者部署你的项目以便于面试官查看&#xff0c;无疑是大大增加了真实性。使用上一篇讲到的如何使用腾讯云宝塔Linux面板部署项目…

QT QGraphicsView 在鼠标点击处进行放大缩小

一、前段时间在用QGraphicsView对图元进行放大缩小时&#xff0c;发现图形总是越来越跑偏&#xff0c;无法像地图中那样&#xff0c;点击哪里就能放大哪个地方。 如下所示&#xff1a;此时放大缩小的焦点并不在鼠标位置 方法&#xff0c;使用QGraphicsView类的设置属性函数.在构…