基于ChatGLM.cpp实现低成本对ChatGLM3-6B的量化加速

文章目录

    • 1. 参考
    • 2. ChatGLM3 介绍
    • 3. 本地运行
      • 3.1 硬件配置
      • 3.2 下载ChatGLM3代码
      • 3.3 量化模型
      • 3.4 编译和运行
        • 3.4.1 编译
        • 3.4.12 运行
    • 4. python绑定
      • 4.1 安装
      • 4.2 使用预先转换的 GGML 模型
    • 总结

前面两章分别有讲到基于MacBook Pro M1芯片运行chatglm2-6b大模型和如何在本地部署chatGLM3,但是如果你的Mac的配置比较低,也没有足够的内存,然后还想运行大模型的话,那么接下来就给大家带来 基于ChatGLM.cpp实现低成本对ChatGLM3-6B的量化加速。

1. 参考

  • ChatGLM.cpp
  • conda安装

2. ChatGLM3 介绍

ChatGLM-6B、ChatGLM2-6B、ChatGLM3-6B 和更多 LLM 的 C++ 实现,可在 MacBook 上进行实时聊天,是通过基于c++来实现的可以跑在Mac甚至windows环境下,特点如下:

  • 基于ggml的纯C++实现,工作方式与llama.cpp相同。
  • 通过 int4/int8 量化、优化的 KV 缓存和并行计算加速内存高效的 CPU 推理。
  • 具有打字机效果的流式生成。
  • Python 绑定、Web demo、API server和更多可能性。

同时支持的如下硬件平台和模型:

  • 硬件:x86/arm CPU、NVIDIA GPU、Apple Silicon GPU
  • 平台:Linux、MacOS、Windows
  • 模型:ChatGLM-6B, ChatGLM2-6B, ChatGLM3-6B, CodeGeeX2, Baichuan-13B, Baichuan-7B, Baichuan-13B, Baichuan2, InternLM

详细介绍参考官方README介绍。

3. 本地运行

3.1 硬件配置

  • 芯片:Apple M1 Pro
  • 内存:32 GB

3.2 下载ChatGLM3代码

cd /Users/joseph.wang/llm
git clone --recursive https://github.com/li-plus/chatglm.cpp.git
cd chatglm.cpp

3.3 量化模型

安装加载和量化拥模型所需的软件包

conda create -n ChatGLM3 python=3.11
conda activate chatglm2vi m
python3 -m pip install -U pip
python3 -m pip install torch tabulate tqdm transformers accelerate sentencepiece

使用convert.py转化ChatGLM3为量化的GGML格式,如将fp16原始模型转换为q4_0(量化int4) GGML模型,运行命令如下:

python3 chatglm_cpp/convert.py -i ../chatglm3-6b/ -t q8_0 -o chatglm3-ggml-q8.bin

在这里插入图片描述
在这里插入图片描述
关于转换的具体参数:

  • -i:指加载模型的路径
    • ChatGLM-6B: THUDM/chatglm-6b, THUDM/chatglm-6b-int8, THUDM/chatglm-6b-int4
    • ChatGLM2-6B: THUDM/chatglm2-6b, THUDM/chatglm2-6b-int4
    • ChatGLM3-6B: THUDM/chatglm3-6b
    • CodeGeeX2: THUDM/codegeex2-6b, THUDM/codegeex2-6b-int4
    • Baichuan & Baichuan2: baichuan-inc/Baichuan-13B-Chat, baichuan-inc/Baichuan2-7B-Chat, baichuan-inc/Baichuan2-13B-Chat
  • -t:指量化类型
    • q4_0: 4-bit integer quantization with fp16 scales.
    • q4_1: 4-bit integer quantization with fp16 scales and minimum values.
    • q5_0: 5-bit integer quantization with fp16 scales.
    • q5_1: 5-bit integer quantization with fp16 scales and minimum values.
    • q8_0: 8-bit integer quantization with fp16 scales.
    • f16: half precision floating point weights without quantization.
    • f32: single precision floating point weights without quantization.
  • -l:指将LoRA 权重合并到基本模型中。

3.4 编译和运行

3.4.1 编译
cd /Users/joseph.wang/llm/chatglm.cpp
cmake -B build
cmake --build build -j --config Release
3.4.12 运行
#单句提问
./build/bin/main -m chatglm3-ggml-q8.bin -p 你好
#交互提问
./build/bin/main -m chatglm3-ggml-q8.bin -i

在这里插入图片描述

Function调用
在这里插入图片描述
Code 解释器
在这里插入图片描述

4. python绑定

Python 绑定提供了类似于原始 Hugging Face ChatGLM(2)-6B 的高级聊天和stream_chat 接口。

4.1 安装

#苹果芯片
CMAKE_ARGS="-DGGML_METAL=ON" pip install -U chatglm-cpp

或者

# install from the latest source hosted on GitHub
pip install git+https://github.com/li-plus/chatglm.cpp.git@main
# or install from your local source after git cloning the repo
pip install .

4.2 使用预先转换的 GGML 模型

cd  ~/llm/chatglm.cpp/examples

命令行键入python3进入python环境,输入如下命令

import chatglm_cpp
pipeline = chatglm_cpp.Pipeline("../chatglm3-ggml-q8.bin")
pipeline.chat([chatglm_cpp.ChatMessage(role="user", content="hi,nici to meet you")])

在这里插入图片描述
在stream中聊天,请运行以下 Python 示例

cd  ~/llm/chatglm.cpp/examples
python3 cli_demo.py -m ../chatglm3-ggml-q8.bin -i

在这里插入图片描述
启动一个web端在浏览器中展示
在这里插入图片描述
在这里插入图片描述
更高级的web展示

pip3 install streamlit jupyter_client ipython ipykernel
ipython kernel install --name chatglm3-demo --user

修改chatglm3_demo.py脚本中的model path

...
...
MODEL_PATH = Path(__file__).resolve().parent.parent / "chatglm3-ggml-q8.bin"
...
...
streamlit run chatglm3_demo.py

在这里插入图片描述

聊天模式
在这里插入图片描述
工具调用
在这里插入图片描述

画爱心
在这里插入图片描述

总结

整体用下来,感觉和如何在本地部署chatGLM3的效果是一样的,速度上感觉还会更快一些,更重要的是资源使用很划算的,机器的内存也不会爆。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音矩阵云混剪系统源码(免授权版)多平台多账号一站式管理

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 大家都知道,无论做什么都需要形成规模,形成矩阵效果更棒,现在有这样一款源码,可以实现这个效果。 抖音矩阵云混剪…

关于harbor做HA

我起初是用helm在k8s上装的harbor,最近遇到如下故障:就是服务器硬件设备故障突然死机,恰巧是harbor容器所在的服务器,其他在这个服务器上运行的容器,由kubelet调度到其他正常的服务器上重启去了,但harbkor并…

BZOJ0481. 树的重心之砍树Link Cut Centroids

题目 思路 分类讨论。 首先当树只有一个重心的时候,我们删掉最小的边再加上原边即可. 再看有两个重心的情况. 显然这棵树必定是类似这样的: 即删掉 A 后,以B 为根的子树是剩下的最大连通块,反之亦然. 那就可以得到一个结论: 删掉边 (A,B) 后,两棵树的大小相等. 那我们只…

ElementUI Form:Upload 上传

ElementUI安装与使用指南 Upload 上传 点击下载learnelementuispringboot项目源码 效果图 el-upload.vue(Upload上传)页面效果图 el-upload.vue代码 import Vue from vue import VueRouter from vue-router import HomeView from ../views/HomeV…

基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xff0…

幻兽帕鲁服务器怎么搭建?Palworld多人联机教程

玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

openGauss学习笔记-213 openGauss 性能调优-总体调优思路

文章目录 openGauss学习笔记-213 openGauss 性能调优-总体调优思路213.1 调优思路概述213.2 调优流程 openGauss学习笔记-213 openGauss 性能调优-总体调优思路 213.1 调优思路概述 openGauss的总体性能调优思路为性能瓶颈点分析、关键参数调整以及SQL调优。在调优过程中&…

[职场] 老教师对年轻教师的肺腑之言 #媒体#笔记

老教师对年轻教师的肺腑之言 对学生 不要拖堂!不要拖堂!不要拖堂!临下课十分钟,学生已经心不在焉,更别说下课后了!有什么内容等下节课再说,不连贯没关系,反正拖堂讲课他们更听不进去…

算法学习——华为机考题库3(HJ21 - HJ25)

算法学习——华为机考题库3(HJ21 - HJ30) HJ21 简单密码 描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码…

Linux 驱动开发基础知识——内核对设备树的处理与使用(十)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

Linux权限【超详细】

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 扩展知识&#xff1a…

基于WordPress开发微信小程序2:决定开发一个wordpress主题

上一篇:基于WordPress开发微信小程序1:搭建Wordpress-CSDN博客 很快发现一个问题,如果使用别人的主题模板,多多少少存在麻烦,所以一咬牙,决定自己开发一个主题模板,并且开源在gitee上&#xff…