当前位置: 首页 > news >正文

手把手教你本地CPU环境部署清华大模型ChatGLM-6B,利用量化模型,本地即可开始智能聊天,达到ChatGPT的80%

大家好,我是微学AI,今天教你们本地CPU环境部署清华大ChatGLM-6B模型,利用量化模型,每个人都能跑动大模型。ChatGLM-6B是一款出色的中英双语对话模型,拥有超过62亿个参数,可高效地处理日常对话场景。与GLM-130B模型相比,ChatGLM-6B在对话场景处理能力方面表现更加卓越。此外,在使用体验方面,ChatGLM-6B采用了模型量化技术和本地部署技术,为用户提供更加便利和灵活的使用方式。值得一提的是,该模型还能够在单张消费级显卡上顺畅运行,速度较快,是一款非常实用的对话模型。

ChatGLM-6B是清华开发的中文对话大模型的小参数量版本,目前已经开源了,可以单卡部署在个人电脑上,利用 INT4 量化还可以最低部署到 6G 显存的电脑上,在 CPU 也可以运行起来的。

项目地址:mirrors / THUDM / chatglm-6b · GitCode

第1步:下载:

git clone https://gitcode.net/mirrors/THUDM/chatglm-6b.git

第2步:进入ChatGLM-6B-main目录下,安装相关依赖

pip install -r requirements.txt

其中 torch安装CPU版本即可。

第3步:打开ChatGLM-6B-main目录的web_demo.py文件,源代码:

from transformers import AutoModel, AutoTokenizer
import gradio as gr
import mdtex2htmltokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()

这个是在GPU版本下的代码,现在改为CPU版本下的代码:

from transformers import AutoModel, AutoTokenizer
import gradio as gr
import mdtex2htmltokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()
model = model.eval()

模型下载改成THUDM/chatglm-6b-int4,也就是int4量化版本。模型量化到int4是一种将神经网络模型中的参数从浮点数格式调整为4位精度的整数格式的技术,可以显著提高硬件设备的效率和速度,并且适用于需要在低功耗设备上运行的场景。

INT4量化的预训练文件下载地址:https://huggingface.co/THUDM/chatglm-6b-int4/tree/main

 第4步:kernel的编译

CPU版本的安装还需要安装好C/C++的编译环境。这里大家可以安装TDM-GCC。

下载地址:https://jmeubank.github.io/tdm-gcc/,大家选择选取TDM-GCC 10.3.0 release下载安装。特别注意:安装的时候在选项gcc选项下方,勾选openmp,这个很重要,踩过坑,直接安装的话后续会报错。

 安装完在cmd中运行”gcc -v”测试是否成功即可。

安装gcc的目的是为了编译c++文件,quantization_kernels.cquantization_kernels_parallel.c

 quantization_kernels.c文件:

void compress_int4_weight(void *weight, void *out, int n, int m)
{for(int i=0;i<n*m;i++){(*(unsigned char*)(out)) = ((*(unsigned char*)(weight)) << 4);weight += sizeof(char);(*(unsigned char*)(out)) |= ((*(unsigned char*)(weight)) & 15);weight += sizeof(char);out += sizeof(char);}
}void extract_int8_weight_to_float(void *weight, void *scale_list, void *out, int n, int m)
{for(int i=0;i<n;i++)for(int j=0;j<m;j++)(*(float*)(out + sizeof(float) * (i * m + j))) = (*(float*)(scale_list + sizeof(float) * i)) * (*(char*)(weight + sizeof(char) * (i * m + j)));
}void extract_int4_weight_to_float(void *weight, void *scale_list, void *out, int n, int m)
{for(int i=0;i<n;i++){for(int j=0;j<m;j++){(*(float*)(out)) = (*(float*)(scale_list)) * ((*(char*)(weight)) >> 4);out += sizeof(float);(*(float*)(out)) = (*(float*)(scale_list)) * (((char)((*(unsigned char*)(weight)) << 4))>> 4);out += sizeof(float);weight += sizeof(char);}scale_list += sizeof(float);}
}

以上C++程序对于每个8位的输入权重值,都会被压缩成一个4位的输出权重值,并存储到指定的输出数组中。这种权重量化方式可以有效减小模型的内存占用,提高模型的推理速度。

 第5步:运行web_demo.py文件

注意如果大家在运行中遇到了错误提示,说明两个文件编译出问题。我们可以手动去编译这两个文件:即在上面下载的D:..\chatglm-6b-int4本地目录下进入cmd,运行两个编译命令:

gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels.c -shared -o quantization_kernels.so
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels_parallel.c -shared -o quantization_kernels_parallel.so

没有报错说明运行成功,目录下看到下面两个新的文件:quantization_kernels_parallel.soquantization_kernels.so。说明编译成功,后面我们手动载入,这里要多加一行代码

model = model.quantize(bits=4, kernel_file="D:..\\chatglm-6b-int4\\quantization_kernels.so")

如果原来代码没有错可以去掉这行。

 第6步:web_demo.py文件运行成功

 出现地址就大功告成了。

 第7步:测试问题

1.鲁迅和周树人是同一个人吗?

ChatGLM的结果:

 ChatGPT的结果:

 2.树上9只鸟,用枪打掉1只,还剩几只?

ChatGLM的结果:

 ChatGPT的结果:

ChatGLM在某些中文问题和常识问题上超过ChatGPT,但是总体上是不如ChatGPT,他在总结任务上,代码编写上不如ChatGPT,总体达到ChatGPT的80%左右,可以做简单的任务。

相关文章:

手把手教你本地CPU环境部署清华大模型ChatGLM-6B,利用量化模型,本地即可开始智能聊天,达到ChatGPT的80%

大家好&#xff0c;我是微学AI&#xff0c;今天教你们本地CPU环境部署清华大ChatGLM-6B模型&#xff0c;利用量化模型&#xff0c;每个人都能跑动大模型。ChatGLM-6B是一款出色的中英双语对话模型&#xff0c;拥有超过62亿个参数&#xff0c;可高效地处理日常对话场景。与GLM-1…...

FFmpeg 自定义IO CONTEXT实现音频解码,以及seek函数

对于从音频流buffer中解码的场景中&#xff0c;我们需要实现自己的io context 去从buffer中解码&#xff0c;参考ffmepg官方实例&#xff1a;doc/examples/avio_reading.c 关于是否要实现avio context中的seek函数&#xff0c;需要看需要解码什么格式&#xff0c;大部分格式不…...

技能升级(2023寒假每日一题 13)

小蓝最近正在玩一款 RPG 游戏。 他的角色一共有 N N N 个可以加攻击力的技能。 其中第 i i i 个技能首次升级可以提升 A i A_i Ai​ 点攻击力&#xff0c;以后每次升级增加的点数都会减少 B i B_i Bi​。 ⌈ A i / B i ⌉ ⌈A_i/B_i⌉ ⌈Ai​/Bi​⌉&#xff08;上取整&a…...

低频量化之 可转债 配债数据及策略 - 全网独家

目录 历史文章可转债配债数据 待发转债&#xff08;进展统计&#xff09;待发转债&#xff08;行业统计&#xff09;待发转债&#xff08;5证监会通过&#xff0c;PE排序&#xff09;待发转债&#xff08;5证监会通过&#xff0c;安全垫排序&#xff09;待发转债&#xff08;5证…...

Code area 和Data area的区别

Code Area FLASH &#xff1a;程序在这个flash运行时&#xff0c;几乎没有延时&#xff0c; 运行速度以时钟设置为准。 Data Area FLASH&#xff1a; 程序在这段flash运行时&#xff0c;每条语句都有延时&#xff0c; 最后的速度可能是以10M为时钟&#xff08;举例&#xff09;…...

Oracle LiveLabs DB Security (数据库安全)实验汇总

在Oracle LiveLabs中&#xff0c;和数据库安全相关的实验分为2个系列&#xff0c;共12个实验。 Oracle数据库安全架构如下图&#xff1a; 这些实验涉及了Oracle安全相关的特性&#xff0c;企业版选件&#xff0c;独立产品和服务。 关于Oracle安全产品的中文主页可见&#…...

PAT A1012 The Best Rank

1012 The Best Rank 分数 25 作者 CHEN, Yue 单位 浙江大学 To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C - C Programming Language, M - Mathematics (Calculus or Linear Algrbra), and E -…...

“我和AI抠图网站的秘密情缘“

在浏览器里面意外发现了一个AI抠图工&#xff0c;了解了一下&#xff0c;AI抠图基于深度学习框架&#xff0c;结合智能检测识别技术&#xff0c;目前已能够实现高精视&#xff0c;秒级全自动主体、场景像素级识别等的分割能力。 一款好的抠图工具&#xff0c;可以把照片变得更加…...

最多能打多少场比赛呢

凌乱的yyy / 线段覆盖 题目背景 快 noip 了&#xff0c;yyy 很紧张&#xff01; 题目描述 现在各大 oj 上有 n n n 个比赛&#xff0c;每个比赛的开始、结束的时间点是知道的。 yyy 认为&#xff0c;参加越多的比赛&#xff0c;noip 就能考的越好&#xff08;假的&#x…...

鸿蒙Hi3861学习二-程序烧录与日志输出

一、准备事项 开发板&#xff1a;BearPi-Hm Nano windows工具&#xff1a;HiBurn.exe https://pan.baidu.com/s/18OQD1_BvjNKD_J2e2iX3qg?pwdadrs 提取码&#xff1a;adrs windows工具&#xff1a;MobaXterm和RaiDrive 把ubuntu文件夹映射到windows本地。可以参考如下链接&am…...

typescript Awaited<Type>教程用法

typescript Awaited教程用法 文章目录 typescript Awaited<Type>教程用法 ts4.5发布了Awaited&#xff0c;但是很多人不明白Awaited的用法。 首先看一下官方的说明&#xff1a;这种类型旨在模拟函数await中的操作async&#xff0c;或 s.then()上的方法——特别是它们递归…...

AES硬件运算单元

功能描述 AES单元主要功能如下: 支持解密密钥扩展 支持128bit/192bit/256bit的密钥长度支持ECBCBCCTRM支持DMA进行自动数据传输 支持GF(2^128)域下的乘法&#xff0c;支持GMAC 工作模式 AES有4种工作模式&#xff0c;通过配置MODE1:0]寄存器设置。 模式1:用存储在AES KEYRx寄存…...

mulesoft MCIA 破釜沉舟备考 2023.04.28.26 (易错题)

mulesoft MCIA 破釜沉舟备考 2023.04.28.26 (易错题) 1. According to MuleSoft, what is a major distinguishing characteristic of an application network in relation to the integration of systems, data, and devices?2. An integration team follows MuleSoft’s r…...

k210单片机定时器的应用

定时器应该是一个单片机的标准配置&#xff0c;所以k210也是有的&#xff0c;拥有3个定时器&#xff0c;具体的使用方法我们往下看&#xff1a; 分步介绍&#xff1a; 首先是相关模块的使用 构造函数&#xff1a; machine.Timer(id,channel,modeTimer.MODE_ONE_SHOT,period100…...

linux0.12-7-1

[272页] 第7章 初始化程序 1、main.c主要内核初始化工作。 2、如果能完全理解这里调用的所有程序&#xff0c;那么看完这张内容后应该对Linux内核有了大致的了解。 3、 有一定的C语言知识 4、 需要GNU gcc手册在身边作为参考&#xff0c;因为在内核代码很多地方使用gcc的扩展…...

设置 文本框 自动填充背景颜色 为白色

关于autofill伪类的 兼容性&#xff1a; 在现代浏览器中&#xff0c;包括Chrome、Safari、Firefox等&#xff0c;都支持:autofill伪类&#xff0c;但在使用时必须加上浏览器前缀-webkit-&#xff0c;即:-webkit-autofill。 在旧版的浏览器中&#xff0c;可能不支持:autofill伪…...

Bitmap引起的OOM问题

作者&#xff1a;向阳逐梦 1.什么是OOM&#xff1f;为什么会引起OOM&#xff1f; 答&#xff1a;Out Of Memory(内存溢出)&#xff0c;我们都知道Android系统会为每个APP分配一个独立的工作空间&#xff0c;或者说分配一个单独的Dalvik虚拟机&#xff0c;这样每个APP都可以独立…...

【JavaEE初阶】认识线程(Thread)

目录 &#x1f33e; 前言 &#x1f33e; 了解线程 &#x1f308;1.1 线程是什么&#xff1f; &#x1f308;1.2 一些基本问题 &#x1f33e;2、创建线程的方式 &#x1f308; 2.1 继承Thread类 &#x1f308; 2.2 实现Runnable接口并重写run()方法 &#x1f308; 注意…...

自动化运维工具一Ansible Roles实战

目录 一、Ansible Roles概述 1.1.roles官方的目录结构 1.2.Ansible Roles依赖关系 二、Ansible Roles案例实战 2.1.Ansible Roles NFS服务 2.2 Roles Memcached 2.3 Roles-rsync服务 一、Ansible Roles概述 之前介绍了 Playbook 的使用方法&#xff0c;对于批量任务的部…...

json 中有递归parentId节点转 c#实体类时如何处理

如果您有一个具有递归parentId节点的JSON数据&#xff0c;并且您需要将其转换为C#实体类&#xff0c;则可以使用以下方法&#xff1a; 创建一个类来表示JSON对象的节点&#xff0c;包括它的属性和子节点。 public class Node {public int Id { get; set; }public string Name …...

从语义熵到可信AI:构建大语言模型幻觉检测的通用框架

1. 当AI开始"胡说八道"&#xff1a;什么是大语言模型幻觉&#xff1f; 想象一下&#xff0c;你正在咨询一位AI客服关于某款手机的参数。它信誓旦旦地告诉你"这款手机搭载了最新款骁龙8Gen3芯片&#xff0c;电池容量5000mAh"&#xff0c;而实际上这款手机用…...

Python与OPC UA实战:高效读写PLC数据

1. 为什么选择Python操作OPC UA&#xff1f; 在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;就像工厂的"大脑"&#xff0c;而OPC UA则是让这个大脑与其他系统对话的"普通话"。作为Python开发者&#xff0c;我们经常需要从PLC读…...

从原理图到实测:手把手打造Ti电量计通讯盒EV2400

1. 为什么需要自制EV2400通讯盒 搞锂电池开发的朋友应该都熟悉Ti的电量计芯片&#xff0c;比如bq系列。这些芯片需要通过I2C/SMBus或者HDQ接口与电脑通信&#xff0c;这时候就需要一个通讯盒作为桥梁。官方EV2400虽然好用&#xff0c;但价格实在不亲民&#xff0c;而且功能上可…...

Spring Boot 实现网络限速:让流量“收放自如”

Spring Boot 实现网络限速&#xff1a;让流量“收放自如” 一、为啥要网络限速&#xff1f; 在当今这个数字化时代&#xff0c;网络服务就像我们生活中的水电一样不可或缺&#xff0c;而网络限速则是保障这些服务稳定、高效运行的关键一环。它能确保在各种复杂的网络环境下&…...

springboot+vue基于web的在线试题库考试系统的设计系统

目录同行可拿货,招校园代理 ,本人源头供货商功能模块设计技术实现要点扩展功能建议安全注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块设计 后端&#xff08;SpringB…...

GinCdn内容分发系统V1.0.9更新内容

GinCdn内容分发系统GinCdn是一款基于Go语言Gin框架自研的轻量高效内容分发系统&#xff0c;专为中小型企业/个人搭建CDN打造&#xff0c;采用主控边缘节点分布式架构&#xff0c;实现智能调度、高效缓存、精准监控的一体化解决方案。无需复杂命令行&#xff0c;小白也能轻松上手…...

Hunyuan-MT-7B翻译终端效果展示:Pixel Language Portal长文本段落对齐精度对比

Hunyuan-MT-7B翻译终端效果展示&#xff1a;Pixel Language Portal长文本段落对齐精度对比 1. 产品概览&#xff1a;像素语言冒险工坊 **像素语言跨维传送门(Pixel Language Portal)**是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译终端。与传统翻译工具不同&#xff0c…...

疯了!用 AI 做销售,一人能干三人活,效率直接拉满!

一、AI 秒出全场景话术&#xff0c;告别绞尽脑汁从破冰开场、持续跟进&#xff0c;到异议处理、逼单成交&#xff0c;AI 都能根据产品、客户、场景一键生成专业话术。新人不用死记硬背&#xff0c;复制粘贴就能专业沟通&#xff1b;老人不用反复修改&#xff0c;节省大把时间&a…...

MMSkeleton部署指南:从开发环境到生产环境的完整迁移

MMSkeleton部署指南&#xff1a;从开发环境到生产环境的完整迁移 【免费下载链接】mmskeleton A OpenMMLAB toolbox for human pose estimation, skeleton-based action recognition, and action synthesis. 项目地址: https://gitcode.com/gh_mirrors/mm/mmskeleton MM…...

3大技术突破重构macOS鼠标体验:Mac Mouse Fix深度解析

3大技术突破重构macOS鼠标体验&#xff1a;Mac Mouse Fix深度解析 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 核心痛点分析&#xff1a;mac…...