安装总结:(不需要太大的压力~~,没有使用GPU。)
- 下载模型
- clone项目chatglm.cpp
- 转换模型
- 编译-运行
如果过程里有未知的坑,我觉得可能需要安装下visual stidio,把一些涉及C,C++什么的东西安装好,应该就可以啦。本次安装,大概需要半个小时,下载文件需要十分钟+,配置运行,大概二十分钟。
背景
今年一个比较热闹的话题就是大模型,最近因为一些原因,也需要开始接触一下,所以决定在windows上部署一个模型,然后去探索在工作中的使用。
chatglm-6b介绍
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。欢迎通过 chatglm.cn 体验更大规模的 ChatGLM 模型。
为了方便下游开发者针对自己的应用场景定制模型,我们同时实现了基于 P-Tuning v2 的高效参数微调方法 (使用指南) ,INT4 量化级别下最低只需 7GB 显存即可启动微调。
ChatGLM-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
ChatGLM-6B 开源模型旨在与开源社区一起推动大模型技术发展,恳请开发者和大家遵守开源协议,勿将开源模型和代码及基于开源项目产生的衍生物用于任何可能给国家和社会带来危害的用途以及用于任何未经过安全评估和备案的服务。目前,本项目团队未基于 ChatGLM-6B 开发任何应用,包括网页端、安卓、苹果 iOS 及 Windows App 等应用。
尽管模型在训练的各个阶段都尽力确保数据的合规性和准确性,但由于 ChatGLM-6B 模型规模较小,且模型受概率随机性因素影响,无法保证输出内容的准确性,且模型易被误导(详见局限性)。本项目不承担开源模型和代码导致的数据安全、舆情风险或发生任何模型被误导、滥用、传播、不当利用而产生的风险和责任。
部署
由于没有高性能的服务器,所以只好拿我的台式机折腾。虽然有显卡,但是不知道为什么,配置了很久也没有配好。所以只好选择一些其他方案,充分利用我的CPU~
参考的项目:
1.下载模型
由于网络不太好,没法子从Hugging Face Hub 下载模型。所以按照ChatGLM-6B说的,分开两步走:
-
下载模型实现:
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
-
手动下载模型参数文件,然后替换了上面的文件。(清华网盘~)
2. 下载chatglm.cpp项目
项目的介绍:
Highlights:
- Pure C++ implementation based on ggml, working in the same way as llama.cpp.
- Accelerated memory-efficient CPU inference with int4/int8 quantization, optimized KV cache and parallel computing.
- Streaming generation with typewriter effect.
- Python binding, web demo, api servers and more possibilities.
Support Matrix:
- Hardwares: x86/arm CPU, NVIDIA GPU, Apple Silicon GPU
- Platforms: Linux, MacOS, Windows
- Models: ChatGLM-6B, ChatGLM2-6B, CodeGeeX2, Baichuan-13B, Baichuan2-13B
- 下载
git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp
- 转换模型
python3 chatglm_cpp/convert.py -i THUDM/chatglm-6b -t q4_0 -o chatglm-ggml.bin
这里需要安装一些包,但是比较奇怪的是,没找到具体需要哪些~不过因为安装了Anaconda,基本的包都有了,然后没有怎么报错,只是提示缺失一个tabulate包。
em,这里还是列了下虚拟环境的包。(python3.11.3)
protobuf
transformers==4.27.1
cpm_kernels
torch>=1.10
gradio
mdtex2html
sentencepiece
accelerate
-
编译执行
windows的话,需要安装cmake,https://cmake.org/files/v3.22/
cmake -B build
cmake --build build -j --config Release
使用交互模式运行:
.\build\bin\Release\main.exe -m chatglm-ggml.bin -i
测试下:
________ __ ________ __ ___
/ ____/ /_ ____ _/ /_/ ____/ / / |/ /_________ ____
/ / / __ \/ __ `/ __/ / __/ / / /|_/ // ___/ __ \/ __ \
/ /___/ / / / /_/ / /_/ /_/ / /___/ / / // /__/ /_/ / /_/ /
\____/_/ /_/\__,_/\__/\____/_____/_/ /_(_)___/ .___/ .___/
/_/ /_/
Welcome to ChatGLM.cpp! Ask whatever you want. Type 'clear' to clear context. Type 'stop' to exit.
Prompt > 中国的首都在哪里
ChatGLM > 中国的首都是北京。
Prompt > 如何使用python编写脚本,实现对sqlite数据库的查询操作
ChatGLM > 可以使用以下代码段实现对SQLite数据库的查询操作:
```python
import sqlite3
# 连接到数据库
conn = sqlite3.connect('database.db')
# 执行查询
cursor = conn.cursor()
cursor.execute('SELECT * FROM table_name')
# 输出结果
for row in cursor:
print(row)
# 关闭数据库连接
conn.close()
在上面的代码中,需要将 database.db
替换为您实际的数据库文件名,table_name
替换为您要查询的表的名称。然后,执行以下代码即可查询数据库中的数据:
# 查询数据
for row in cursor:
print(row)
如果需要进行其他类型的操作,例如插入数据、删除数据等,可以修改上面的代码,并按照相应的操作来进行。同时,也需要注意在操作数据库时,需要进行 conn.close()
的操作,以释放数据库资源。
Prompt >
或者也可以这样:
```toml
./build/bin/main -m chatglm-ggml.bin -p 你好
# 你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。