chatglm.cpp编译与执行

ChatGLM3介绍

ChatGLM3是由智谱AI和清华大学KEG实验室联合发布的对话预训练模型。作为第三代大型语言模型,ChatGLM3不仅理解和生成人类语言,还能执行代码、调用工具,并以markdown格式进行响应。其目标是打造更智能、更安全的代码解释器和工具使用体验。

ChatGLM3在性能上取得了显著的提升。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3具有在10B以下的基础模型中最强的性能。与ChatGLM二代模型相比,在44个中英文公开数据集测试中,ChatGLM3在国内同尺寸模型中排名首位,其中MMLU提升36%、CEval提升33%、GSM8K提升179%、BBH提升126%。

ChatGLM现在开源的最高版本就是3.0版本,发布版最高已经到了4.0版本。

ChatGLM.cpp介绍

ChatGLM.cpp是一个由li-plus开发并托管在GitCode上的开源项目,它基于Transformer架构,致力于提供高效、灵活且强大的自然语言理解和生成能力。

ChatGLM.cpp的主要亮点包括:

  1. 基于ggml的纯C++实现,与llama.cpp的工作方式相同,这使得它在性能优化方面具有显著优势。
  2. 采用了int4/int8量化的内存高效CPU推理加速技术,并优化了KV缓存和并行计算,进一步提升了模型的推理速度和效率。
  3. 支持带打字机效果的流生成,使得生成的文本更加自然流畅。

编译安装ChatGLM.cpp

下载ChatGLM.cpp

git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp

编译ChatGLM.cpp

cmake -B build
cmake --build build -j --config Release

用python 转pytorch模型到ggml格式

安装库

python3 -m pip install -U pip
python3 -m pip install torch tabulate tqdm transformers accelerate sentencepiece
# pip install sentencepiece

下载模型

如果hf不好下载,可以去星河社区下载:chatglm2-6b_数据集-飞桨AI Studio星河社区

也可以到启智社区下载:kmno4/ChatGLM3 - ChatGLM3 - OpenI - 启智AI开源社区提供普惠算力!

下载之后放置到~/model/chatglm2 目录,然后执行转换:

转换模型

# cd chatglm.cpp
python3 chatglm_cpp/convert.py -i ~/model/chatglm2 -t q4_0 -o chatglm-ggml.bin

但是转模型需要torch,这点不如llama.cpp好,llama.cpp是纯c转换。所以前面的库需要装全。

运行模型

前面已经将ggml模型保存在chatglm.cpp目录,现在只需要执行:

./build/bin/main -m chatglm-ggml.bin -p 你好
# 你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。# 使用-i参数进入交互模式
./build/bin/main -m chatglm-ggml.bin -i

运行结果:

Welcome to ChatGLM.cpp! Ask whatever you want. Type 'clear' to clear context. Type 'stop' to exit.Prompt   > hello
ChatGLM3 > Hello! How can I help you today?
Prompt   > 树上7个鸟,打死一只,还有几只? 
ChatGLM3 > 如果你打死一只鸟,其它的鸟很可能会被吓飞。因此,在打这样您就可以份树上的鸟的情况下,可能一只都不剩。

可以看到,针对树上7只鸟,打死一只这样的脑筋急转弯,ChatGLM3回答正确,效果非常好。一年时间,我们的ChatGLM长大了!

调试

转换模型的时候报错

    vocab = {self._convert_id_to_token(i): i for i in range(self.vocab_size)}
  File "/home/linuxskywalk/.cache/huggingface/modules/transformers_modules/chatglm2/tokenization_chatglm.py", line 108, in vocab_size
    return self.tokenizer.n_words
AttributeError: 'ChatGLMTokenizer' object has no attribute 'tokenizer'. Did you mean: 'tokenize'?

问题解决参见这个issue:AttributeError: 'ChatGLMTokenizer' object has no attribute 'tokenizer' · Issue #1835 · chatchat-space/Langchain-Chatchat · GitHub

降低transformer版本即可:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple transformers==4.33.2

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

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

相关文章

【力扣一刷】代码随想录day27(39. 组合总和、40.组合总和II、131.分割回文串)

目录 【39. 组合总和】中等题 【40.组合总和II】中等题 【131. 分割回文串】中等题 【39. 组合总和】中等题 思路: 确定终止条件:sum target时记录路径并返回。剪枝:当前节点的路径之和已经大于sum就不可能再等于sum了,结束该分支…

16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串

16进制的字符串转byte[]数组 public class ClientString16 {@Testpublic void get16Str(){String str="48 47 12 00 14 12 16 08 15 0d 30 0f 02 30 30 30 30 30 30 30 30 30 30 00 c2";byte[] bytes = hexStringToByteArray(str);getBytetoString(bytes);//String …

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么?二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

【御控物联】JavaScript JSON结构转换(8):数组To数组——多层属性重组

文章目录 一、JSON结构转换是什么?二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JS…

Java

1.学生和老师都会有work方法,学生的工作是学习,老师的工作是教书,我利用了一个接口来实现; 2.同时,老师和学生都是人,并且都有姓名,姓名,年龄和身高等特征,我用了一个继承…

http协议补充

7.7实现http请求 class httprequest { public:void Deserialize(std::string content){while (true){auto pos content.find(sep);if (pos std::string::npos){break;}std::string temp content.substr(0, pos);if (temp.empty()){break;}req_header_.push_back(temp);cont…

轮播卡片切换实现

背景 如上图&#xff0c;实现一个轮播卡片能力&#xff0c;支持手动滑动&#xff0c;手动拖动&#xff0c;已经点击两端切换按钮。 实现 <template><div class"top-menu"><!-- Swiper --><div v-if"headerMenuList.length > 9" c…

并查集----格子游戏

并查集中最重要的是要搞懂&#xff1a; 不明白的可以拿纸自己先演示一番&#xff0c;find函数不仅能找到他们的祖先数&#xff0c;而且同时也能更新路径的子结点都等于祖先&#xff0c;然后以后寻找时会更加的方便&#xff01;

蓝桥杯单片机速成4-温度传感器DS18B20

目录 一、电路图 二、底层驱动代码 三、温度读取实现 四、实际使用 一、电路图 二、底层驱动代码 时序是单总线 我们需要修改的地方是单总线内部延时函数&#xff0c;改成 void Delay_OneWire(unsigned int t) { t*12; while(t--); } #ifndef __ONEWIRE_H #defi…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

动态规划刷题(算法竞赛、蓝桥杯)--合唱队形(线性DP)

1、题目链接&#xff1a;[NOIP2004 提高组] 合唱队形 - 洛谷 #include <bits/stdc.h> using namespace std; int n,ans; int a[105],f[105][2];//f[i][2]中2表示正反两个方向int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}//正方向求最长上升子序列 a[…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

HTTP,Servlet

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

【学习笔记】java项目—苍穹外卖day06

文章目录 苍穹外卖-day06课程内容1. HttpClient1.1 介绍1.2 入门案例1.2.1 GET方式请求1.2.2 POST方式请求 2. 微信小程序开发2.1 介绍2.2 准备工作2.3 入门案例2.3.1 小程序目录结构2.3.2 编写和编译小程序2.3.3 发布小程序 3. 微信登录3.1 导入小程序代码3.2 微信登录流程3.3…

基于Java的车辆出入校预约管理系统设计与实现(论文+源码)_kaic

摘 要 二十一世纪以来我国科技水平得到很大提升&#xff0c;人们对于生活的美好向往更加强烈&#xff0c;而目前的车辆出入校预约管理由于存在管理不规范等缺点&#xff0c;严重影响了校园的安全&#xff0c;因此&#xff0c;需要设计一个车辆出入校预约管理系统对人们出入校园…

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等 功能包含: 成语大全 二十四节气 英语单词 古诗词 近反义词 词语造句 汉语字典 英文缩写 百家姓 范文文库 文件目录:1个数据库 1个系统源码 1个伪静态规则 安装方式:把1.2G的…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

T1 神奇苹果桶 (25分) - 小米前端笔试编程题解

考试平台&#xff1a; 赛码 题目类型&#xff1a; 20道选择 2道编程题 考试时间&#xff1a; 2024-03-23 &#xff08;两小时&#xff09; 题目描述 小希在森林冒险的时候发现一个神奇的木桶&#xff0c;某些时会凭空出现一些苹果&#xff0c;小希很解地大家分享了这一个神奇…

CCIE-01-VLAN-Trunk

目录 实验条件网络拓朴逻辑拓扑物理拓扑实验目的 开始配置配置SW1配置SW2检验证配置结果 实验条件 网络拓朴 逻辑拓扑 物理拓扑 实验目的 SW1和SW2之间的E2/0-3配置为trunk&#xff0c;使用802.1q协议&#xff0c;不需要配置捆绑根据逻辑图和物理图标识&#xff0c;使得R1~R7…