chatGLM-6B 部署记录
Windows 下部署 chatGLM-6B

准备环境
首先,chatGLM-6B 不能直接在 Windows 中完成部署,需要使用 Linux 子系统。
要求 windows 10 以上。。。
在 启用或关闭Windows功能 中,勾选 "适用于 LInux 的 Windows 子系统" 并确定,以启用该功能。
然后在 微软商店 中搜索安装需要的Linux子系统,也可以到微软官网去下载需要的分发版本来安装。
这里直接在商店获取了 Debian,Ubuntu也可以。
子系统默认安装到系统盘符,有需要可以移动它的位置,因为后面经过软件的安装后体积会比较大。
这里直接通过mklink的方式创建目录链接来改变位置,比较粗暴,但也简单。
先在 C:\Users\[用户名]\AppData\Local\Packages 中找到 Debian 的文件夹,然后直接剪切到想要的位置。
这里 文件夹是 TheDebianProject.DebianGNULinux_76v4gfsz19hv4,截切到了 F:\_WSL\ 下。
然后用 mklink 命令在原位置上创建同名的目录链接,指向新的位置,如:
mklink /J TheDebianProject.DebianGNULinux_76v4gfsz19hv4 F:\_WSL\TheDebianProject.DebianGNULinux_76v4gfsz19hv4
而F:\_WSL\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState目录就是Linux的“硬盘”目录了
首次启动 Debian ,会要求输入一个用户名/密码,自己定就行了。
然后逐个执行下面命令安装需要的环境,我对python不熟悉,什么vue、anaconda还搞不懂,就直接装了,反正这个子系统随时可以删。。。
更新 apt
sudo apt-get clean
sudo apt-get update
安装 chatGLM-6B 需要的软件
sudo apt-get install gcc
sudo apt-get install python3.9
sudo apt-get install python3-pip
对python重新建立指令链接,已存在则删了重新建到3.9,pip看一下不行也重建
sudo ln -rm /usr/bin/python
sudo ln -s /usr/bin/python3.9 /usr/bin/python
升级pip到最新
pip install --upgrade pip
pip换源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set install.trusted-host https://pypi.tuna.tsinghua.edu.cn

Linux 子系统中访问 windows 的盘符目录
Linux子系统中,在 mnt 中自动挂载了 windows 的盘符目录,盘符 与 mnt 对应关系如下:
C盘:/mnt/c
D盘:/mnt/d
E盘:/mnt/e
F盘:/mnt/f
盘符内目录结构与windows中一致,这就可以让以部分工作放在 windows 里做了,比如 git 获取项目,而且项目不会随着子系统被卸载而丢失。
注意在Linux子系统的“硬盘”中的东西会随着子系统的卸载一起被清,比如前面安装的gcc和python。

chatGLM-6B
项目地址:https://github.com/THUDM/ChatGLM-6B
获取 chatGLM-6B
通过git获取:git clone https://github.com/THUDM/ChatGLM-6B.git
通过git更新:git pull -- cd进入项目目录后执行
切换到项目目录,F:\_AI\ChatGLM-6B
cd /mnt/f/_AI/ChatGLM-6B/

pip下载安装需要的组件
目录中的 requirements.txt 文件已经把需要组件都列上了,直接指定它就行
pip install -r requirements.txt
也可能遭遇失败的情况,这里总遇到 torch 失败,于是先跳过它,逐个安装其他组件,每一个都要单独执行
其他组件有依赖 torch 的,可能会自动安装一个能用的版本,这样不用安装它也能使用
获取模型(电脑配置不高,这里用的int4)
可以通过git获取:git clone https://huggingface.co/THUDM/chatglm-6b-int4
也可以浏览器访问下载 https://huggingface.co/THUDM/chatglm-6b-int4/tree/main
这里都下载到 chatGLM-6B 的根目录的 THUDM/chatglm-6b-int4 文件夹中了,下面会使用这个文件夹,可以认为这个文件夹整个就是模型

默认的 demo 都是使用gpu的,显卡不行的 cpu 和 内存 够用的话,也可以使用 cpu 运行,需要修改 demo 代码,配置越低 响应速度 越慢...
下面是 demo 的代码中被修改后的内容部分,主要修改 AutoTokenizer.from_pretrained 和 AutoModel.from_pretrained 的部分
前面步骤都完成后,chatGLM-6B 的准备工作就完成了,然后启动 demo 就可以了
启动 chatGLM-6B 的demo
python web_demo.py 或 python cli_demo.py

chatGLM2-6B
项目地址:https://github.com/THUDM/ChatGLM2-6B
chatGLM2-6B 与一代的一样,不能直接部署到 windows 上,要通过 Linux 子系统才能顺利完成部署和启动。
获取 chatGLM2-6B
通过git获取:git clone https://github.com/THUDM/ChatGLM2-6B
通过git更新:git pull -- cd进入项目目录后执行
切换到项目目录,F:\_AI\ChatGLM2-6B
cd /mnt/f/_AI/ChatGLM2-6B/

pip下载安装需要的组件
目录中的 requirements.txt 文件已经把需要组件都列上了,直接指定它就行
pip install -r requirements.txt
获取模型
通过git获取:git clone https://huggingface.co/THUDM/chatglm2-6b-int4
同样比较大,可以上网页单独下载。
这里都下载到 chatGLM2-6B 的根目录的 THUDM/chatglm2-6b-int4 文件夹中了,下面会使用这个文件夹,可以认为这个文件夹整个就是模型

和一代一样,启动前需要配置模型路径,也用代码处理了:
启动入口py文件有:cli_demo.py、web_demo.py、api.py、openai_api.py
启动 chatGLM2-6B 的demo
python web_demo.py
————————————————————
chatglm.cpp
项目地址:https://github.com/li-plus/chatglm.cpp
chatglm被另一个人用cpp重写了,类似llama被人用cpp重写的一样。
该项目对chatglm-6b的一代、二代都能支持,但glm的模型要转换成gglm的,项目中也提供了转换的代码。
项目介绍中说的应该是为了Mac能运行glm而重写的,但这里是在 windows 上运行的记录。。。
获取 chatglm.cpp
通过git获取:git clone --recursive https://github.com/li-plus/chatglm.cpp.git
多了 --recursive 参数是因为该项目中还引用了三个其他项目。
克隆后需要检查项目中 third_party 目录下的ggml、pybind11、sentencepiece 是否完成了获取
如果忘了加 --recursive 参数,或者 third_party 中的项目没有获取到,就要cd切换到项目目录中,再执行下面命令:
git submodule update --init --recursive
切换到项目目录,F:\_AI\chatglm.cpp
cd /mnt/f/_AI/chatglm.cpp/

模型转换
python convert.py -i /mnt/f/_AI/ChatGLM2-6B/THUDM/chatglm2-6b-int4/ -t q4_0 -o chatglm2-ggml.bin
/mnt/f/_AI/ChatGLM2-6B/THUDM/chatglm2-6b-int4/ 是之前部署的ChatGLM2-6B的模型目录,这里要视情况调整。
chatglm2-ggml.bin 是转换后的gglm模型的名字,这里没有加路径,转换后就放在当前目录了
转换时报错缺少模块tabulate:
ModuleNotFoundError: No module named 'tabulate'
直接pip安装
pip install tabulate
使用 CMake 编译项目:
cmake -B build
cmake --build build -j
运行模型
./build/bin/main -m chatglm2-ggml.bin -i
