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的主要亮点包括:
- 基于ggml的纯C++实现,与llama.cpp的工作方式相同,这使得它在性能优化方面具有显著优势。
- 采用了int4/int8量化的内存高效CPU推理加速技术,并优化了KV缓存和并行计算,进一步提升了模型的推理速度和效率。
- 支持带打字机效果的流生成,使得生成的文本更加自然流畅。
编译安装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