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

news2024/10/7 10:15:44

文章目录

    • 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.coloradmin.cn/o/1433477.html

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

相关文章

《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)

文章目录 1.1 网络爬虫简介1.1.1 重点基础知识讲解1.1.2 重点案例:社交媒体数据分析1.1.3 拓展案例1:电商网站价格监控1.1.4 拓展案例2:新闻聚合服务 1.2 网络爬虫的工作原理1.2.1 重点基础知识讲解1.2.2 重点案例:股票市场数据采…

玩家笔记:幻兽帕鲁搭建服务器开服教程

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

MyBatis之环境搭建以及实现增删改查

MyBatis之环境搭建以及实现增删改查 前言准备工作1.保证数据库已启动2. 创建Person表 MyBatis开发环境搭建1.下载MyBatis jar包2.下载MySQL的JDBC驱动3.新建Java工程(Java8),导入MyBatis的jar包以及JDBC驱动 实现步骤1. 创建Peron类2. 编写Ma…

Log360,引入全新安全与风险管理功能,助力企业积极抵御网络威胁

ManageEngine在其SIEM解决方案中推出了安全与风险管理新功能,企业现在能够更主动地减轻内部攻击和防范入侵。 SIEM 这项新功能为Log360引入了安全与风险管理仪表板,Log360是ManageEngine的统一安全信息与事件管理(SIEM)解决方案…

【复现】WordPress html5-video-player SQL 注入漏洞_39

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 在WordPress中播放各种视频文件。一个简单,可访问,易于使用和完全可定制的视频播放器,适用于所…

0基础学习VR全景平台篇第141篇:如何制作卫星航拍全景

大家好,欢迎观看蛙色官方系列全景摄影课程! 很多人都看过或者拍摄过航拍全景,其效果相比于普通的地拍的确有着更加震撼的拍摄效果,但是受限于无人机高度,以及禁飞区等等限制,导致很多大场景无法展示完全&a…

绝地求生:盘点游戏内七款真人脸模,你最喜欢哪款?

从27.1版本更新后,游戏内上线了荣都地图代言人吴彦祖和李政宰的真人脸模,从此闲游盒的各位盒友灵魂搭配的资源库里又多了两位英俊脸庞,那么今天闲游盒来盘点一下游戏内上线的七款真人脸模,看看大家更喜欢哪款呢? 吴彦祖和李政宰 …

前端文艺复兴:Vue3真的需要Pinia吗?

前言 说起Pinia,熟悉 vue3 开发的程序员肯定不会陌生,甚至被vue官方推荐取代vuex,成为vue全家桶之一。 疑惑 还记得之前用 vuex 时,更改 state 还分同步和异步(这里有尤雨溪的回答www.zhihu.com/question/48… &…

【实训】网络规划与部署实训

一 实训目的及意义 本周实训主要是了解网络规划与部署,熟悉三大厂商华为、思科、锐捷交换机路由器以及相关协议的原理和配置,提高学生的动手能力和分析规划部署能力。 实训主要针对计算机网络系统集成的设计与实现的实际训练,着重锻炼学生熟练…

【数据结构]排序算法之插入排序、希尔排序和选择排序

简单不先于复杂,而是在复杂之后。 文章目录 1. 排序的概念及其运用1.1 排序的概念1.2 排序运用1.3 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序(缩小增量排序) 2.2. 选择排序2.2.1 基本…

重写Sylar基于协程的服务器(6、HOOK模块的设计)

重写Sylar基于协程的服务器(6、HOOK模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模…

【STM32+HAL库+CubeMX】UART轮询收发、中断收发、DMA收发方法及空闲中断详解

(转载)原文链接:https://blog.csdn.net/qq_39344192/article/details/131470735 1. 什么是UART? UART是一种异步串行通信接口,常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输,使…

ROS2 Humble学习笔记 (2)

本文发表于个人的github pages。因csdn本身显示插件和转载过程中导致显示不太友好。建议大家阅读原文。想查看完整内容,请移步到ROS2 Humble学习笔记2。 本文篇幅较长,可抽空按照章节阅读。本文只作为对入门教程的一种浮现和提升。 一、前言 在上一篇…

项目02《游戏-08-开发》Unity3D

基于 项目02《游戏-07-开发》Unity3D , 本次任务做物品相互与详情的功能, 首先要做 点击相应, 接下来用接口实现点击相应事件,具体到代码中,我们找到需要响应鼠标事件的对象, 双击PackageCell…

数据结构与算法:图论(邻接表板子+BFS宽搜、DFS深搜+拓扑排序板子+最小生成树MST的Prim算法、Kruskal算法、Dijkstra算法)

前言 图的难点主要在于图的表达形式非常多,即数据结构实现的形式很多。算法本身不是很难理解。所以建议精通一种数据结构后遇到相关题写个转换数据结构的接口,再套自己的板子。 邻接表板子(图的定义和生成) public class Graph…

c语言实现greedy snake(贪吃蛇)

##第一个小项目 大一学生寒假项目 最终实现效果如图 一.以C语言实现个人小项目 在我们快速学完了一个高级编程语言,就应该写一个小项目来加以巩固自己的学习成果。 所以今天,我们来尝试写一写greedy snake,对于大学生来说也是可以加强能…

超时引发的牛角尖二(hystrix中的超时)

至今我都清楚记得自己负责的系统请求云上关联系统时所报的异常信息。为了解决这个异常,我坚持让这个关联系统的负责人查看,并且毫不顾忌他的嘲讽和鄙视,甚至无视他烦躁的情绪。不过我还是高估了自己的脸皮,最终在其恶狠狠地抛下“…

每日一练:LeeCode-513、找树左下角的值【二叉树】

本文是力扣LeeCode-513、找树左下角的值 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: …

图数据库(neo4j)在工业控制中的应用

最近看到国外发表的一篇文章,提到将OPC UA 模型映射到neo4j图模型数据库中,通过GraphQL 访问效率很高,顿时感觉自己眼睛一亮,这是一个好主意。 图模型 事物的模型中,除了它自身的某些特征之外,还包括它与其…

第十二讲_JavaScript浏览器对象模型BOM

JavaScript浏览器对象模型BOM 1. 浏览器对象模型介绍2. location2.1 常用的属性2.2 常用的方法 3. navigator3.1 常用的属性 4. history4.1 常用的方法: 5. 本地存储 1. 浏览器对象模型介绍 BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模…