手把手教你本地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.c和quantization_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.so和quantization_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%
大家好,我是微学AI,今天教你们本地CPU环境部署清华大ChatGLM-6B模型,利用量化模型,每个人都能跑动大模型。ChatGLM-6B是一款出色的中英双语对话模型,拥有超过62亿个参数,可高效地处理日常对话场景。与GLM-1…...
FFmpeg 自定义IO CONTEXT实现音频解码,以及seek函数
对于从音频流buffer中解码的场景中,我们需要实现自己的io context 去从buffer中解码,参考ffmepg官方实例:doc/examples/avio_reading.c 关于是否要实现avio context中的seek函数,需要看需要解码什么格式,大部分格式不…...
技能升级(2023寒假每日一题 13)
小蓝最近正在玩一款 RPG 游戏。 他的角色一共有 N N N 个可以加攻击力的技能。 其中第 i i i 个技能首次升级可以提升 A i A_i Ai 点攻击力,以后每次升级增加的点数都会减少 B i B_i Bi。 ⌈ A i / B i ⌉ ⌈A_i/B_i⌉ ⌈Ai/Bi⌉(上取整&a…...
低频量化之 可转债 配债数据及策略 - 全网独家
目录 历史文章可转债配债数据 待发转债(进展统计)待发转债(行业统计)待发转债(5证监会通过,PE排序)待发转债(5证监会通过,安全垫排序)待发转债(5证…...
Code area 和Data area的区别
Code Area FLASH :程序在这个flash运行时,几乎没有延时, 运行速度以时钟设置为准。 Data Area FLASH: 程序在这段flash运行时,每条语句都有延时, 最后的速度可能是以10M为时钟(举例)…...
Oracle LiveLabs DB Security (数据库安全)实验汇总
在Oracle LiveLabs中,和数据库安全相关的实验分为2个系列,共12个实验。 Oracle数据库安全架构如下图: 这些实验涉及了Oracle安全相关的特性,企业版选件,独立产品和服务。 关于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抠图工,了解了一下,AI抠图基于深度学习框架,结合智能检测识别技术,目前已能够实现高精视,秒级全自动主体、场景像素级识别等的分割能力。 一款好的抠图工具,可以把照片变得更加…...
最多能打多少场比赛呢
凌乱的yyy / 线段覆盖 题目背景 快 noip 了,yyy 很紧张! 题目描述 现在各大 oj 上有 n n n 个比赛,每个比赛的开始、结束的时间点是知道的。 yyy 认为,参加越多的比赛,noip 就能考的越好(假的&#x…...
鸿蒙Hi3861学习二-程序烧录与日志输出
一、准备事项 开发板:BearPi-Hm Nano windows工具:HiBurn.exe https://pan.baidu.com/s/18OQD1_BvjNKD_J2e2iX3qg?pwdadrs 提取码:adrs windows工具:MobaXterm和RaiDrive 把ubuntu文件夹映射到windows本地。可以参考如下链接&am…...
typescript Awaited<Type>教程用法
typescript Awaited教程用法 文章目录 typescript Awaited<Type>教程用法 ts4.5发布了Awaited,但是很多人不明白Awaited的用法。 首先看一下官方的说明:这种类型旨在模拟函数await中的操作async,或 s.then()上的方法——特别是它们递归…...
AES硬件运算单元
功能描述 AES单元主要功能如下: 支持解密密钥扩展 支持128bit/192bit/256bit的密钥长度支持ECBCBCCTRM支持DMA进行自动数据传输 支持GF(2^128)域下的乘法,支持GMAC 工作模式 AES有4种工作模式,通过配置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单片机定时器的应用
定时器应该是一个单片机的标准配置,所以k210也是有的,拥有3个定时器,具体的使用方法我们往下看: 分步介绍: 首先是相关模块的使用 构造函数: machine.Timer(id,channel,modeTimer.MODE_ONE_SHOT,period100…...
linux0.12-7-1
[272页] 第7章 初始化程序 1、main.c主要内核初始化工作。 2、如果能完全理解这里调用的所有程序,那么看完这张内容后应该对Linux内核有了大致的了解。 3、 有一定的C语言知识 4、 需要GNU gcc手册在身边作为参考,因为在内核代码很多地方使用gcc的扩展…...
设置 文本框 自动填充背景颜色 为白色
关于autofill伪类的 兼容性: 在现代浏览器中,包括Chrome、Safari、Firefox等,都支持:autofill伪类,但在使用时必须加上浏览器前缀-webkit-,即:-webkit-autofill。 在旧版的浏览器中,可能不支持:autofill伪…...
Bitmap引起的OOM问题
作者:向阳逐梦 1.什么是OOM?为什么会引起OOM? 答:Out Of Memory(内存溢出),我们都知道Android系统会为每个APP分配一个独立的工作空间,或者说分配一个单独的Dalvik虚拟机,这样每个APP都可以独立…...
【JavaEE初阶】认识线程(Thread)
目录 🌾 前言 🌾 了解线程 🌈1.1 线程是什么? 🌈1.2 一些基本问题 🌾2、创建线程的方式 🌈 2.1 继承Thread类 🌈 2.2 实现Runnable接口并重写run()方法 🌈 注意…...
自动化运维工具一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 的使用方法,对于批量任务的部…...
json 中有递归parentId节点转 c#实体类时如何处理
如果您有一个具有递归parentId节点的JSON数据,并且您需要将其转换为C#实体类,则可以使用以下方法: 创建一个类来表示JSON对象的节点,包括它的属性和子节点。 public class Node {public int Id { get; set; }public string Name …...
教育机构开设AI课程时利用Taotoken管理学生实验用API
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 教育机构开设AI课程时利用Taotoken管理学生实验用API 在高校或培训机构开设大模型应用相关课程时,为学生提供一个统一、…...
终极英雄联盟工具箱:5个核心功能快速提升你的游戏体验
终极英雄联盟工具箱:5个核心功能快速提升你的游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款专为英雄…...
别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比)
别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比) 当你的Python项目需要处理成千上万的文件时,传统的os.listdir()方法可能会成为性能瓶颈。我曾经在一个图像处理项目中,因为使用了不当的遍历方法&a…...
实战指南:如何为nvm-windows项目配置专业级持续集成流水线
实战指南:如何为nvm-windows项目配置专业级持续集成流水线 【免费下载链接】nvm-windows A node.js version management utility for Windows. Ironically written in Go. 项目地址: https://gitcode.com/gh_mirrors/nv/nvm-windows nvm-windows作为Windows平…...
从数据驱动到物理约束:盘点神经网络求解偏微分方程的三大范式与核心进展
1. 神经网络求解偏微分方程的技术背景 偏微分方程(PDE)是描述自然界各种现象的核心数学工具,从流体力学中的纳维-斯托克斯方程到量子力学中的薛定谔方程,再到金融工程中的布莱克-斯科尔斯方程,PDE的身影无处不在。但传…...
HoRain云--Skills 基本结构
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
基于开源项目构建实时语音AI对话系统:从ASR、LLM到TTS的完整技术栈解析
1. 项目概述与核心价值 最近在折腾一个挺有意思的东西,一个叫 bigsk1/voice-chat-ai 的开源项目。简单来说,它让你能和一个AI进行实时的语音对话,就像打电话一样。你对着麦克风说话,AI不仅能听懂,还能思考࿰…...
深度剖析APK Installer:Windows平台Android应用安装的专业解决方案
深度剖析APK Installer:Windows平台Android应用安装的专业解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer是一款专为Windows平台设计…...
汇顶科技入围GSA奖项:中国芯片设计公司的全球化突破与启示
1. 项目概述:一次里程碑式的行业认可最近在半导体圈子里,一个消息引起了不小的关注:汇顶科技成功入围了全球半导体联盟(GSA)2019年度的两大奖项提名。对于不熟悉这个领域的朋友来说,这或许只是一个普通的公…...
