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

相关推荐

  1. kotlin 程序 编译执行

    2024-04-02 19:12:03       23 阅读
  2. c的编译链接执行

    2024-04-02 19:12:03       37 阅读
  3. 编译执行

    2024-04-02 19:12:03       21 阅读
  4. 1.3编程基础之算术表达式顺序执行

    2024-04-02 19:12:03       34 阅读
  5. c# 执行动态编译的方法

    2024-04-02 19:12:03       19 阅读
  6. SQL 解析执行流程

    2024-04-02 19:12:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 19:12:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 19:12:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 19:12:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 19:12:03       20 阅读

热门阅读

  1. Qt实现Kermit协议(二)

    2024-04-02 19:12:03       17 阅读
  2. C++中重载和重写的区别

    2024-04-02 19:12:03       12 阅读
  3. 解密SFP和QSFP:你需要知道的一切

    2024-04-02 19:12:03       16 阅读
  4. Git使用

    2024-04-02 19:12:03       15 阅读
  5. 每日一题: 为什么要使用Spring?

    2024-04-02 19:12:03       14 阅读
  6. 【数据库】[MYSQL][面试题]常见数据库知识整理

    2024-04-02 19:12:03       15 阅读
  7. C++ map 常用部分

    2024-04-02 19:12:03       15 阅读
  8. 【zml】vp9 vp8

    2024-04-02 19:12:03       12 阅读
  9. 简单的HTML

    2024-04-02 19:12:03       13 阅读
  10. 东方财富网股票数据爬虫

    2024-04-02 19:12:03       14 阅读
  11. Windows 11 中Docker的安装教程

    2024-04-02 19:12:03       18 阅读