chatglm.cpp

GitHub - li-plus/chatglm.cpp: C++ implementation of ChatGLM-6B & ChatGLM2-6B & more LLMs,这个项目咱不能说别的,只能说:牛逼、牛逼、牛逼……为啥这么说呢?天下武功,唯快不破。LLM系列的前两篇(ChatGLM2-6BLangchain-Chatchat 没别的意思,就是想让你点进去看看)你也看到了,他俩的运行速度都不好意思说(当然这是咱机器的原因)。但是在他的加持下那速度是飕飕的!

再简单说一下和他的渊源:其实,先知道的是llama.cpp这个项目(至于怎么遇到的他,就不记得了),非常非常非常,是吧。于是就想赶紧试试,种种原因吧,没有跑成功,再加上手头的ChatGLM2-6B项目已经跑通了。于是就开始乱想了,既然有llama系列的cpp,那就不能有chatglm的cpp吗?酸爽的是还真有,就是他了。好了,我俩的故事讲完了。

这里再插播一下:目前国内开源的大模型也就那几个,除了上面提到的,还有百川、悟道·天鹰、中文LLaMA-2 & Alpaca-2、千问等。其中百川、悟道·天鹰、中文LLaMA-2 & Alpaca-2已经被llama.cpp收纳了。你可能想到了,那么千问有没有对应的cpp,哈哈,必须得安排上啊,并且还是亲儿子,都隶属于QwenLM

前期准备

本笔记是ChatGLM2-6B - xiaodu114.github.io的后续,还是先根据这篇准备好环境吧!机器必须还是我的老朋友。

还需要什么

这是一个c++项目,并且作者没有发布编译之后的程序(写这篇笔记的时候没有),所以需要咱们自己编译。参考之前的llama.cpp项目,MakeCMake等编译工具,参数……真头大啊!

CMake

选择这个的原因是电脑上已经有了宇宙第一的IDE。果然已经安装了,如下图:

Visual Studio 2022 安装 C++

这里安装是安装了,但是不能任性的使用CMake,因为他没有被添加到环境变量中。这里已经添加到环境变量了。

添加的时候也遇到一个小问题:CMake不知道放到哪个文件夹下了,利用where cmake也没有找到,最后是使用Everything神器找到的。

路径:D:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin

主角登场

chatglm.cpp项目中包括两部分:C/C++部分,也就是需要编译的,他可以帮你和llm对话等;Python部分,它可以帮你转换为GGUF格式。这里记录一下编译过程:

下载仓库

下载项目源码,官网推荐使用git,因为需要安装第三方依赖。安装命令如下:

#   你想把项目放到哪个目录下,在该目录下进入命令行
#   --recursive 安装依赖
git clone --recursive https://github.com/li-plus/chatglm.cpp.git
            

这里将项目下载到E:\llm\chatglm.cpp路径下了,如下图:

chatglm.cpp GitHub项目结构目录

说明:这里的仓库是今天(2023-10-20)下载的。

注意:一定要看看依赖的三个类库中是否是空盒子。有一次弄啥的时候报错,发现这三个文件夹中是空的,不知道是不是网络的原因。之后重新克隆了一下就好了。

编译项目

cmake -B build
            

chatglm.cpp cmake build

#   上面的命令 cmake -B build 成功之后,执行下面这个  
cmake --build build -j --config Release
            

这个执行的时候有点胆战心惊啊!一大堆黄色的输出,简直就是刷屏了,我一度怀疑是不是要失败了,结果成功了,哈哈。您上眼:

chatglm.cpp cmake build

Python

这里准备一下该项目的Python部分

虚拟环境

#   PowerShell进入项目根目录,这里是:E:\llm\chatglm.cpp
#   创建虚拟环境
python -m venv venv
#   激活虚拟环境
.\venv\scripts\activate
            

Python 虚拟环境

安装依赖

这里还有个小插曲:如果参照官网的说明安装依赖包,会有点问题(下面会详细说下)。因为有了之前ChatGLM2-6B跑通的经验,这里创建了一个requirements.txt文件,并且将项目依赖项添加进去,之后根据ChatGLM2-6B项目修改对应库的版本,如下图:

chatglm.cpp python依赖 添加 requirements.txt 并修改版本

下面的两个命令都可以,视情况而定。

#   我这里设置全局的清华镜像源
pip install -r requirements.txt
#   如果你不想全局设置,也可以仅本次安装时使用镜像源
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
            

注意:安装完依赖之后,先别着急关掉啊!后面有小弟要表演,请耐心等待。

大佬已到位。他的小弟还行,下面我们挑几个遛遛:

ChatGLM2-6B

下载LLM 模型

之前使用的都是量化版:chatglm2-6b-int4。这里需要使用:chatglm2-6b。下载方式和之前的相同。

重点:【互链高科】下载【清华大学云盘】中没有的文件,两者合并,完美。

这里将下载的模型放到D:\llm\THUDM\chatglm2-6b路径下了,记住这个路径,下面会用到。如下图:

ChatGLM2-6B 大语言模型 结构目录

转GGUF

失败的经历,如果有兴趣,可以点开看看

这里需要注意一下,按照官网的方式添加依赖,安装包的时候报错了,不知道是否和这边创建虚拟环境有关(人家官网也没有让你创建虚拟环境啊,静瞎搞,出错了吧!)。官方截图以及异常如下:

chatglm.cpp 官方安装python依赖

chatglm.cpp 官方安装python依赖 报错

重新弄一个虚拟环境,再试试下面这个:

#   这次直接使用这个
pip install torch tabulate tqdm transformers accelerate sentencepiece
                

chatglm.cpp 官方安装python依赖 成功

安装成功了,下面开始转换了,使用下面的命令:

python chatglm_cpp/convert.py -i D:\llm\THUDM\chatglm2-6b -t q4_0 -o E:\llm\chatglm.cpp\build\bin\Release\chatglm2-6b-ggml.bin
                

chatglm.cpp ChatGLM2-6B转GGML 异常

接着上面创建的Python虚拟环境,赶紧表演吧,已经等不及了。

python chatglm_cpp/convert.py -i D:\llm\THUDM\chatglm2-6b -t q4_0 -o E:\llm\chatglm.cpp\build\bin\Release\chatglm2-6b-ggml.bin
            

嗨皮不,必须的,成功了,哈哈!就是依赖类库的版本问题。是否成功,全靠碰……

chatglm.cpp ChatGLM2-6B转GGML 成功

如果你熟悉llama.cpp这个项目:他是先转换,之后在量化。而chatglm.cpp可以一步到位。

赶紧聊聊吧

这里问了他两个问题:你好;javascript实现斐波那契数列。速度没的说啊!直接上截图(这个图很有内涵噢,你看见那速度了嘛,遥遥领先,遥遥领先,遥遥领先……)

#   更多参数的使用,还得多去官网逛逛啊
#   第一问
.\main.exe -m chatglm2-6b-ggml.bin -p 你好 --top_p 0.8 --temp 0.8
#   第二问
.\main.exe -m chatglm2-6b-ggml.bin -p javascript实现斐波那契数列
            

chatglm.cpp ChatGLM2-6B转GGML 对话

ChatGLM3-6B

ChatGLM3-6B:二哥,小弟我来啦!

下载LLM 模型

三弟就比较友好了,下载很方便。虽然拥抱脸🤗还是联系不上,但是你可以使用:魔搭社区或者始智AI-wisemodel-中国AI开源创新社区

这里将模型下载到了:D:\llm\THUDM\chatglm3-6b,下载命令如下:

#   在目录 D:\llm\THUDM 打开命令行
git lfs install
git clone https://modelscope.cn/ZhipuAI/chatglm3-6b.git 
            

ChatGLM3-6B 大语言模型 结构目录

三弟的表演

不知道之前项目是否支持ChatGLM3-6B,没有测试。今天打开官网,发现已经支持了,果断重新下载一下,还是老地方:

chatglm.cpp GitHub项目结构目录 2023-10-30

编译、Python环境、对话都比较顺利,这里就不详细写了。只是简单记录一下:

#   重点是 transformers 的版本
pip install torch tabulate tqdm transformers==4.30.2 accelerate sentencepiece
#   转化并量化    
python chatglm_cpp/convert.py -i D:\llm\THUDM\chatglm3-6b -t q4_0 -o E:\llm\chatglm.cpp\build\bin\Release\chatglm3-6b-gguf.bin
#   对话
.\main.exe -m chatglm3-6b-gguf.bin -p 你好 --top_p 0.8 --temp 0.8
.\main.exe -m chatglm3-6b-gguf.bin -p 说一下你和chatglm2-6b的区别
            

chatglm.cpp 安装Python依赖; ChatGLM3-6B转GGUF; 对话